面向对象(构造方法,this,static)
构造方法
构造方法是Java中的一种特殊的方法,他的定义是与类名相同的方法。
public class Text01 {
public String name;
public int age;
Text01(){
System.out.println("空构造方法");
}
}
构造方法也符合普通方法重载的特性,在一个类中构造方法是必须存在的,如果自己没有写构造方法,java会自动给我们生成一个空构造器(当然我们是看不到的)。
构造方法在类中主要做什么呢?
在主方法中创建对象的时候,如果我们不使用构造方法的话,我们对成员变量的初始化是这样的:
public class Text {
public String name;
public int age;
public static void main(String[] args) {
Text text = new Text();
text.name="老王";
text.age=19;
}
}
如果我们使用构造器的话就简单的多了:
public class Text {
public String name;
public int age;
Text(String name,int age){
this.name=name;
this.age=age;
}
public static void main(String[] args) {
Text text = new Text("老王",19);
}
}
从这里可以看出使用构造方法我没们可以在创建对象的时候就可以为我们的成员变量进行初始化赋值了,使用构造方法在我们创建对象进行初始化时就变得简单的多了。
构造器主要用于我们在创建对象时对成员变量赋值。
this关键字
this关键字的三大作用:
调用属性,调用方法,使用this表示当前对象
调用属性
public class Text {
public String name;
public int age;
Text(String name,int age){
this.name=name;
this.age=age;
}
从上面的代码可以看出在构造方法中传入了两个形参,形参与我们的成员变量属性变量名都是一样。
public class Text {
public String name;
public int age;
Text(String name,int age){
name=name;
age=age;
}
根据就近原则我们的形参和成员属性都会指向我们的形参,那么就起不到创建对象并初始化成员变量。
public class Text {
public String name;
public int age;
Text(String name,int age){
this.name=name;
this.age=age;
}
public static void main(String[] args) {
Text text = new Text("老王",19);
}
}
this关键字在这里指的是当前对象的成员变量
this.name —>public String name;
这样我们就起到了形参与成员变量的区分
调用方法
public class This {
public String name;
public String email;
This(){
System.out.println("无参构造方法");
}
This(String name){
this.name=name;
System.out.println("name:"+name);
}
This(String name , String email){
this(name);
this.email=email;
System.out.println("email:"+email);
}
在我们使用构造器的重载在创建对象时为满足不同需求赋值,我们就可以这样书写
This(String name , String email){
this(name);
this.email=email;
System.out.println("email:"+email);
}
可以看出我们在第二个有参构造方法并没有像上面那样书写
this.name=name;
this.age=age;
而是用一个this()替代了
这里指的是调用前面构造方法的形参。
在成员变量多的时候,有想用方法重载的属性,为了避免多余的代码,java就提供了这个属性,在this关键字中可以书写对个成员变量形参的形参名。
static关键字
static关键字的特别之处
static主要存在的意义是创建独立于具体对象的域变量或方法。即使没有创建对象也可以通过类名来调用静态方法或静态变量
static的应用场景
修饰成员变量
修饰成员方法
静态代码块
修饰类(只能修饰内部类)
静态导包
访问静态变量的两种的两种方式
public class StaticText {
int i=2;//实例变量
static int j=3;//静态变量
public static void main(String[] args) {
System.out.println(StaticText.j);// 3 静态变量可以跟随类使用
StaticText staticText = new StaticText();
System.out.println(staticText.i);// 2 静态方法可以跟随对象的引用使用
//StaticText.i 非静态变量不能通过类名来使用
System.out.println(staticText.i);// 2 非静态变量只能通过对象的引用来使用
staticText.j++;
StaticText.j++;
//静态变量在方法区中是独一份的存在,用类名调用或对象引用名调用访问的都是同一个内存地址的静态变量
System.out.println(StaticText.j);//5
System.out.println(staticText.j);//5
}
}