一、构造方法
1、定义:
。用于初始化对象
。我们在通过new关键字创建对象的时候,必须调用构造方法
2、特点:
。方法名和类名相同(大小写也要与类名相同)
。没有返回值类型。注意,连void都没有
。没有具体的返回值return
。构造方法可以是有参的,也可以是无参的
3、演示
public class Student{ //构造方法 public Student(){ System.out.println("构造方法"); } }
4、注意事项:
。在创建对象时,构造方法会在对象创建之后自动被调用
。如果没有写构造方法,那么编译器会自动加一个空参的构造方法
。如果已经写了有参的构造方法,编译器就不会再加上空参的构造方法
。这时,如果还想使用空参的构造,那么,就需要手动补上空参构造
。构造方法必须通过new关键字来调用,不可以使用对象名来调用
。构造方法也是成员方法,只是比较特殊而已,所有成员方法的属性构
造方法也拥有
。创建对象的时候,只能调用一个构造方法,但构造方法内部可以相互
调用
。本类中的成员方法无法直接调用构造方法
二、构造方法的重载
1、定义:
。和成员方法的重载一样,方法名相同,参数列表不同。
。需要注意的是,只要是构造方法,方法名一定是相同的,也就是说构
造方法的重载只是参数列表不同
2、构造方法相互调用
。构造方法可以重载,我们可能会写多个构造方法以应对不同的赋值
动作,已经写过的构造方法可以直接调用
。使用this(),表示调用本类的构造方法
。this()必须写在第一行
3、演示
public class Student {
private String name ; private int age; //空参构造
public Student(){
} //有参的构造方法
public Student(int age){
if(age>0&&age<150) this.age = age; }
public Student(String name,int age){ //调用构造方法 this(age);
this.name = name; } }
三、类成员之间的相互调用
1、定义;
。成员变量一般来说都是为了成员方法服务的
。成员方法可以根据成员属性的不同做出不同的应对
2、演示
public class RectangLe{
private int high ;
private int with;
public Rectangle(int high ,int with){
this.high = high;
this.with = with;
} //获取面积 public int getArea(){
return high*with;
} //获取长方形的周长 public int getLength(){
return (high + with)*2;
} public int getHigh(){
return high;
} public int setHigh(int high){
this.high = high;
} public int getWith(){
return with;
} public int setWith(int with){
this.with = with;
}
}
四、代码块:
1、定义:
。代码块就是定义一个无名称的代码块,用{}括起来
2、分类:
。局部代码块:方法中
。构造代码块: 类中方法外
。静态代码块:类中方法外
。同步代码块:作用域多线程中
3、应用:
。局部代码块:
。限定局部变量的生命周期,及早释放,提高内存利用率
。在方法中创建一个域,限制变量的作用范围
。构造代码块:
。创建对象时候优先于构造方法执行,多个构造方法中相同
的代码存放到构造代码块中,节省代码量
。静态代码;
。给构造代码块加上static关键字就变成了静态代码块,用
于类的初始化,在类加载的时候就执行,并且只在类加载的
时候执行一次,一般用于加载驱动。
public class Demo { //构造代码块 { System.out.println("构造代码块执行了"); } //静态代码块 static{ System.out.println("静态代码块执行了"); } public void method(){ //局部代码块 { System.out.println("局部代码块执行了"); } } }
4、对象初始化顺序问题
。成员变量==》构造代码块==》构造方法
。成员变量和构造代码谁在上面先执行谁(一般是,成员变量在上)
五、静态(static)
[图片上传失败...(image-5da7d4-1584889379646)]
。静态:存储在静态方法区,跟对象没有关系,创建的对象中是不存在
静态的内容的
。好处:不用创建对象也可以直接调用,节省时间,每个对象中不用去
记录这个方法,节省对象的存储空间。
1、定义:
。用于修饰类的成员,表示静态
。一旦被修饰,类的成员将不再属于这个类创建的对象
2、特点:
。随着类的加载而载
。优先于对象存在
。被类的所有对象共享
。通过类名调用
·其实他本身也可以通过对象名调用
·推荐使用类名调用
。优先于非静态成员
。类的所有静态成员都存储于静态方法区
3、初始化顺序:
。静态成员变量==>静态代码块==>成员变量==>构造代码块==>构造方
法
。静态成员变量和静态代码块(构造代码块)谁写在前面谁先执行
4、静态方法的缺点:
。静态方法区小,存储过多的内容,容易造成内存溢出,还会降低
查询效率
六、类加载:
1、。从硬盘将.class文件读到内存中,形成java的类,这个过程称之为
类加载。
2、分两步(其实是13步):
。加载类
。类初始化
七、静态的使用:
。非静态可以直接调用静态,因为:非静态可以执行时,静态一定存在
。静态无法调用非静态,因为:因为不确定非静态是否真的存在,就是
存在,对象有可以有很多,也不知道用哪个对象的
。静态只能调用静态,非静态可以调用静态
1、定义:
。公用的变量就可以写成静态的、频繁被使用的方法要写成静态的
。当一个雷的成员被频繁的使用的时候,就可以写成静态
。当一个属性或方法被所有的对象共享的时候,可以写成静态的
2、使用格式:
。类名.成员变量名
。类名.方法名()
3、演示
public class Demo{
//静态成员变量
public static String name = "小红";
//静态的成员方法
public static void method(){
System.out.println("静态方法");
}
}
public static void main(String[] args){
//调用静态成员变量
System.out.pringtln(Demo.name); //调用静态的成员方法 Demo.method();
}
4、注意事项:
。静态的成员在内存中只有一份
。所有的操作指向的都是同一个静态成员
。可以使用对象名调用,但是不推荐
。静态可以极大的提升运行的效率
。静态随着类的存在而存在,随着类的消亡而消亡,jvm不关闭
,静态就一直存在,太多的话,容易造成内存溢出。
。频繁被使用的成员要写成静态的
八、静态和非静态
1、this关键字的问题
。静态中方法无法使用this关键字,因为静态方法调用的时候,不需要
对象
。非静态方法中可以使用this关键字,因为非静态方法在调用的时候必
须有对象
2、访问成员变量
。静态方法只能访问静态的成员变量,如果要使用非静态的成员变量
必须先创建对象
。非静态的方法可以直接访问静态的成员变量,也可以直接访问非静态
的成员变量
3、访问成员方法
。静态方法只能访问静态方法,如果想使用就必须要创建对象
。非静态方法可以直接访问静态方法,也可以直接访问非静态方法
4、简单记
。静态只能访问静态(直接调用)
public class Demo{ static String name = "李四"; int age = 19 ; public static void method(){ //静态方法可以直接访问静态成员变量 System.out.println(name); //这里会报错 //System.out.println(age); //静态要访问非静态的成员变量必须要创建对象 Demo d = new Demo(); System,.out.println(d.age); //静态方法可以直接访问静态方法 method3(); //静态方法想要访问非静态方法必须要先创建对象 demo.method4(); } public void method2(){ //非静态可以直接访问静态成员变量 System.out.println(name); //非静态方法可以直接访问非静态的成员变量 System.out.println(age); //非静态方法可以直接访问静态成员方法 method3(); //非静态方法可以直接访问非静态方法 method4(); } //静态方法 public static void method3(){ } //非静态方法 public void method4(){} }
九、main方法详解
1、格式:
。 public static void main(String[] args){}
2、详解
。public 被jvm调用,访问权限足够大
。static 被jvm调用,不用创建对象,直接类名访问
。void 被jvm调用, 不需要给jvm返回值
。main 一个通用的名称,虽然不是关键字,但是被jvm识别
。String[] args 以前用于接受键盘录入的arguments