java的特殊方法(构造方法,static,toString)
(1)不确定参数个数的方法
是一个带参数的方法(形式参数与普通的形式参数是不同的,多了”…“必须放在参数列表是最后面)
//在主程序类中写入
t.addName01();//没有实参
t.addName01("321");
t.addName01("147","258","369");
/**
* 不确定参数个数
* @param name
*/
public void addName01(String...name){
for (String n:name){
//数组的自动增长
this.name= Arrays.copyOf(this.name,this.name.length+1);
this.name[this.name.length-1]=n;
}
}
运行截图
三种方式的调用都可以传入自身类构造的数组name[]中
注意:
实参:可以不传递,可以传一个,也可以传多个还可以是数组或集合
(面试笔试:值传递与地址传递(数组,集合都是地址传递))
(2)构造方法(构造器,也是构造函数)
除了静态代码块(static{})外,就位于最前面的,是一个方法名与类名一样且不能写返回类型的一些具有实例化对象且初始化属性值的特殊方法。
类对象的(成员的),也是构造方法
//无参构造方法,默认不显示
public Teacher(){
//构造方法可以直接调用成员方法,但成员方法不可以调用构造方法
//在类名中不可以重新调用和类名一样的方法,用this代替
this.getAge();
}
//有参构造(当有参构造写出来后,无参构造必须写出来)
public Teacher(String name1,int age){
this();//放在有效方法的第一行
this.name1=name1;
this.age=age;
}
方法的重载(overload):在同一个类中,把其具有相同方法名且方法列表不同的一些(>=2)
方法称为方法的重载,当被调用时根据实参的;类型自动匹配的方法
扩展
重载与重写的区别:
(3)toString
把类对象转换为字符串(在类中默认存在的,输出类在内存中的哈希code),是一个直接被类对象调用,(代表类对象)方法(同时在类对象和主程序中写,可以输出字符串,而不是哈希code)
@Override
public String toString() {
return "Teacher{" +
"name1='" + name1 + '\'' +
", age=" + age +
", name=" + Arrays.toString(name) +
'}';
}
//主程序中进行输出
//输出类对象
Teacher t=new Teacher();
System.out.println(t);
System.out.println(t.toString());
(4)static关键字
1) 只能修饰成员变量或方法。一旦被static修饰则无法使用this,因为已经不依赖任何的类。
使用的方法:
静态方法可以在同包类中直接调用:类名.方法名
1…两个方法都是静态方法可以互相调用
2.两个方法都是非静态方法可以互相调用
3.一个为静态方法一个为非静态方法,非静态方法可以调用静态方法,静态方法不能调用非静态方法
工具类的方法:都是静态的
常量:final static
静态代码块:(在一个类中某一块,可以初始化某些值的)
/**
* 静态代码块,里面可以写任何东西,但不能写构造方法
*静态成员要写在静态代码块外面
*/
static {
System.out.println(""+score);
}
2)在抽象的父类中定义一个静态变量可以在子类中调用
当父类中用static定义了一个score
public static int score=1000;
在子类中写一个调用score的方法
public void showInfo(){
/**
* this是使用自身类的属性
* super是使用父类的属性
*/
System.out.println("学号:"+Num+",名字:"+getName()
+"分数:"+score+"身高:"+height);
}