java带参数的构造方法-Java命令行:Scanner类(io)类
#JAVA学习总结(与C系列语言比较) 变量的定义上,float必须在数值后面加上f才能识别是float类型;boolean表示布尔类型,在c#直接bool; 运算符上JAVA加了一个逻辑与和逻辑或的短路版本;&、|在左右两边都要进行运算,而短路与(&&)短路或(||)问题上只要左边符合条件不用继续判断下去。 在Java中,语法上允许这样做,但实际得到的效果是两个数组引用指向同一块内存。
? int[] ary1 = {2, 4, 6, 8, 10};
? int[] ary2; ? ary2 = ary1; //允许这样赋值 在Java中,foreach变成for int num=lnteger.parselnt(String number);进行字符串转换为数字的方法; ``` 注意二维数组的边界。 ```ruby Teacher[][] t_array = new Teacher[4][6]; length = t_array.length.//length=4 length=t_array[0].length.//length=6
JAVA是相对来说比较稳定的,通过虚拟机运行而不是通过操作系统,在垃圾的释放问题上也直接通过虚拟机在系统比较空闲的时候自动进行释放。
命令行:
public class ArgumentDemo { public static void main(String[] args) { int len = args.length; //获得命令行参数的个数 if (len > 0) //判断是否有命令行参数 { //如果有,将其逐一打印到控制台 System.out.println(len + "个命令行参数,具体如下:"); for (int i = 0; i < args.length; i++) { System.out.println(args[i]); } } else { //否则给出提示信息 System.out.println("您没有传递任何命令行参数。"); } } }
Scanner类(在java.util包中)Scanner print =new Scanner(System.in);调用这个类中的nextByte();nextint()等方法进行输入相关数据类型的数据;
数组是引用数据类型,只能存放在堆内存中。引用类型都是通过new进行定义分配类型的;
类中构造函数:在对象生成时都必须执行构造方法java带参数的构造方法,而且只能执行一次;如果构造方法调用失败,那么对象无法创建。不可以显示地直接调用构造方法,在没有定义构造函数的时候类会自动产生一个无参数的默认构造函数,这个默认的构造函数什么都不做。
在C#和JAVA中,静态特点:静态函数,静态成员变量都能通过类名直接访问,也可以像普通成员函数一样通过定义对象调用。静态成员变量在的作用域只在类内部,但其生命周期却贯穿整个程序。
使用package关键字将源文件中的类打入某个包中,如果省略了这个语句,源文件中的类打入一个没有名字的缺省的包中。使用import关键字导入中的类,import java.io.*表示导入java包下的io子包中的所有类;import mypkg.student;表示导入mypkg报下的student类,但是不导入该报的其他类。使用package关键字打包;使用import关键字导入包或类。
对类使用的访问修饰符只有public和缺省两种;但要注意的是:在一个源文件中只能有一个被public修饰的类,并且文件名必须与public的类同名;如果要定义多个public的类,则必须分别写在不同的源文件中,一个源文件只写一个类是良好的编程习惯。
不加访问修饰符,缺省修饰的类只能从本包中访问,不同包则无法访问到;
C语言中结构体的成员可以从任何地方进行访问,这将给数据的安全留下极大的隐患。关键字public和private是访问修饰符,用来说明某个成员是否可以从类外部进行访问;
面向对象:封装,继承,多态,抽象
静态成员(包括静态成员属性和静态成员方法)属于类而不是属于某个对象,可以在实例化对象之前通过类名访问;
Protected 受保护的;Java中实现继承extends关键字 扩充;super 上一级
在Java中不但可以声明由原始数据组成的数组,还可以声明由对象组成的数组;Student[] stdAry = new Student[5];//表示对类的引用,不是创建对象。
实现继承的一般语法是:
[访问修饰符] class 派生类名 extends 基类名 {
成员列表
}class Student extends Person {……}
在Java中只允许单一继承方式,即一个派生类只能继承于一个基类,而不能象C++中派生类继承于多个基类的多重继承方式。
基类中构造函数不能被子类继承,只需要考虑属于自己的成员变量。
运算符instanceof是双目运算符,左面的操作元是一个对象,右面是一个类。当左面的对象是右面的类创建的对象时,该运算的结果为true,否则为false。
Super 用途:1、在子类的构造函数中,super关键字可以显示地调用父类的构造函数,用于将参数传递给它 super(实际参数),该语句必须是子类构造方法的第一条语句。
成员变量的隐藏: 子类可以隐藏继承的成员变量。子类中定义的成员变量和父类中的成员变量同名时(不必类型相同),子类就隐藏了继承的成员变量,即子类重新定义了这个成员变量
方法的隐藏(重写):子类中定义一个方法,并且这个方法的名字返回类型,参数个数、和类型与父类继承的方法完全相同,子类是通过方法的重写隐藏继承的方法,可以把父类的状态和行为改变为自己的状态的行为。
Super关键字可以明确指定访问父类中的成员,语法:super.成员名;(前提:父类中的该成员不是private)。
this关键字有两种意义:
– 表示一个指向“implicit parameter”的引用
– 调用本类中的另一个构造器
super关键字也有两种意义:
– 调用父类的方法
– 调用父类的构造器
但是,super并不表示一个指向对象的引用,它只是一个特殊的关键字,用来告诉编译器,现在要调用的是父类的方法。
抽象方法:某种情况下,基类无法(或者没必要)提供被覆盖方法的具体实现,那么久可以将此方法声明成抽象方法;使用关键字abstract声明抽象方法,一般语法:[访问权限]abstract 返回值类型 方法名称(参数列表);public abstract void draw();
抽象类:如果某个类中包含有抽象方法,那么这个类就必须定义成抽象类,定义抽象类同样使用关键字abstract,一般语法:[访问权限]abstract class 类名{ 成员列表}
? 抽象类不可以直接实例化只可以用来继承。
? 抽象类的派生子类应该提供对其所有抽象方法的具体实现;
? 可以这么认为,抽象方法实际上就是由抽象基类强制要求其派生子类必须实现的方法原型;
? 如果抽象类的派生子类没有实现其中的所有抽象方法,那么该派生子类仍然是抽象类,只能用于继承,而不能实例化;
? 抽象类中也可以包含有非抽象的方法;
? 构造方法和静态方法不可以修饰为abstract。
接口:如果某个类中的所有方法都是抽象方法,那么可以考虑将该类定义为接口,定义接口使用关键之interface,
一般语法:[访问权限] interface 接口名{成员列表}
实现接口:如果某类要实现接口,则使用implements关键字,
一般语法为:[访问权限]class 类名 implements 接口名{成员列表}
Final关键字有最终的,不可修改的含义;final关键字有三种用途,可以分别应用于变量,成员方法和类;
变量:常量,不能被修改
成员:不能被覆盖
类:不会被继承
假设java带参数的构造方法,B是A的子类或间接子类,当我们用子类B创建一个对象,并把这个对象的引用放到类A声明的对象中时,如
A a;
B b = new B();
a = b;
那么就称对象a是子类对象b的上转型对象
上转型对象的特点:
? 上转型对象不能操作子类声明定义的成员变量(失掉了这部分属性),不能使用子类声明定义的方法(失掉了一些功能)
? 上转型对象可以代替子类对象去调用子类重写的实例方法
? 上转型对象可以调用子类继承的成员变量和隐藏的成员变量
? 可以将对象的上转型对象再强制转换成一个子类对象,这时该子类对象又具备了子类的所有属性和功能
重载:可以不是发生在父类和子类中,只要方法名相同,参数列表,返回值类型不同都是重载。
重写(覆盖):必须发生在父类和子类之间中,与父类中的方法完全同原形.
基类的引用可以指向派生类的对象,但是派生类的引用则不可以指向基类的对象;基类的引用可以指向哪个类就调用这个类的方法;
Java.lang包中的类的使用(java.lang包是Java内置的一个基础包,通常自动导入每个程序中)
包装类:在操作对象的场合使用,将原始数据类型当作对象进行操作。
Character类中常用方法:
方 法 原 型 说 明
boolean isLetter(char ch) 判断字符ch是否为英文字母
boolean isDigit(char ch) 判断字符ch是否为0~9之间的数字
boolean isUpperCase(char ch) 判断字符ch是否为大写形式
boolean isLowerCase(char ch) 判断字符ch是否为小写形式
boolean isWhitespace(char ch) 判断字符ch是否为空格或换行符
对象类型 对象名=数(不用定义)
String类:通过这个类对字符串的操作;
插入At(int index)提取字符
Subing (int index) 提取指定位置的字符(int a,int b)提取之间的字符串
Concat(string str)连接 replace(char oldchar,char newchar)替换字符
Replace()替换字符串 string trim()不含任何空格
Stringbuffer:可以修改的字符串
Math类提供了一系列的数学运算和几何运算的方法,该类中构造方法被修饰为Pribate,因此不能实例化;都是静态的能通过类名直接调用,被修饰为final没有子类。
? JAVA.util包(工具包,不会默认导入)
时间类 Date
日期Calendar
随机数 Random
处理异常
Try{….}catch{……}finally{………..}throw(throws)
集合类:
ArraysList类 长度可变的对象引用数组
LinkedList类用于创建链表数据结构(随意添加删除)
Vector类是线程同步的
HashMap以键值对的形式存储元素
HashSet类不允许出现重复的元素
? Java.io.*;