一、this关键字
①可以明确访问一个类的成员变量,解决与局部变量名称冲突的问题
int age;
public Person (int age ){
this.age=age;//this.age 代表第一个age;age代表第二个age
}
②可以通过this关键字调用成员方法,在方法中调用一个方法的时候,可以不写this
③构造方法不能像其他方法一眼在程序中被调用,但是可以使用this关键字,在一个构造方法中调用其他构造方法。
//调用无参
this();
//调用有参
this("参数");
使用this调用构造方法应该注意
①只能在构造方法中使用,不能再成员方法中使用
②使用this调用构造方法的语句必须位于第一行,只能出现一次
③不能在一个类的两个构造方法中使用this相互调用
二、static关键字
静态变量 :
只有一份,却可以被一个类的所有变量共享。例如一个学校被很多学生共享。
被static修饰的变量叫静态变量,可以使用“类名.变量名”的形式来访问
因为static是被共享的,所以只能修饰成员变量,不能修饰局部变量
class Student{
static String schoolName;
}
public class Test01{
public static void main (String [] args){
Student stu1=new Student();
Student stu2=new Student();
Student.schoolName="哈佛大学";
System.out.println("我的学校是"+stu1.schoolName);
System.out.println("我的学校是"+stu2.schoolName);
}
}
静态方法:
static修饰的方法是静态方法,可以不创建对象直接调用的。
同静态变量一样,静态方法也是 类名.方法名,也可以通过类的实例对象来访问
注意:静态方法只可以访问static修饰的成员,因为没有被修饰的成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象。
静态代码块:
被static修饰的代码块成为静态代码块,当类加载时,代码块会被执行,由于类只加载一次,因此静态代码块只执行一次,因此常用静态代码快对类的成员变量进行初始化
static{
//静态代码块
}
静态代码块如果写在main方法前面,则会先于main方法执行。
四、单例模式
class Single{
//自己创建一个对象
private static Single INSTANCE=new Single();
private Single(){};//私有化构造方法
public static Single getInstance(){
return INSTANCE;
}
}
class Tset02{
public static void main (String [] args){
Single s1=Single.getInstance();
Single s2=Single.getInstance();
System.out.println(s1==s2);
}
}
//结果是true 说明两次调用getInstance方法获得的是同一个对象,而getInstance是获得Single类实例得到唯一途径,因此Single类是一个单例的类。
单例模式还有一种写法
class Single{
private Single(){}
public static final Single INSTANCE=new Single();
}