方法内存图
构造方法
导入同一Package下的类没有import导入语句
若导入别的Package下的类有import导入语句
import com.javacto.day12.e.Dog;
//导入package e下面的Dog类
特征(6点)
1.无返回值(即返回值的位置不能出现int、void、String)
2.方法名字与类名相同
3.不能像普通方法那样被调用
4.构造方法在new对象(创建对象)时被调用
5.如果没有创建,系统默认创建1个无参构造方法
6.如果创建了,系统不会再创建无参构造方法
分类
无参构造方法
//创建无参构造方法
public Dog(){
System.out.println("这是1个无参构造方法");
}
有参构造方法
//创建含有1个参数的构造方法
public Dog(String name){
System.out.println("这是1个无参构造方法,传入的参数为"+name);
}
一般可通过构造方法赋值
public Dog(String name,int health,int love22,String strain){
//this代表当前的类 this在不同的类中代表的对象不一样
this.name=name;
//this.name指在当前的Dog类中寻找name变量
this.health=health;
//若写成“health=health;”,首先在方法体里面找名为health的变量,这里的health指传过来的health值
love=love22;
//这里的love指类Dog中的love变量,因为首先在方法体里没有找到名为love的变量,就去类中方法体外范围内找名为love的变量(即类Dog中的love变量)
this.strain=strain;
}
方法重载
特征(5点)
1.普通方法可以重载,构造方法也可以重载
2.方法能否重载与有无返回值无关
3.方法名相同才叫重载
4.判断方法是否重载与修饰符没有关系(只要其他条件满足,2个方法名前是public和protected都属于方法重载)
5.参数列表个数不同,或者参数类型不同,或者参数列表个数和类型都不同
(注:判断 方法是否重载与变量类型顺序有关,但与变量名没有任何关系)
static静态修饰符
static代码块
示例代码
注:1.构造方法:在new对象时被调用
2.static代码块:在类加载之前被调用
public class StaticDemo01 {
//创建构造方法
public StaticDemo01(){
System.out.println("在new对象时被调用1");
}
//static静态代码块 在类加载之前被调用
static{
System.out.println("在类加载之前被调用2");
}
}
测试类Test01
public class Test01 {
public static void main(String[] args) {
//创建对象
StaticDemo01 s1=new StaticDemo01();
//类只被加载1次
StaticDemo01 s2=new StaticDemo01();
}
}
结果截图
静态属性(static修饰的变量)
注:1个被声明的静态变量只被初始化1次(注意理解)
示例代码
public class StaticDemo02 {
//创建普通变量
public int i=0;
//创建静态变量
public int b=0;
//创建构造方法进行操作
public StaticDemo02(){
i++;
b++;
}
}
测试类Test02
public class Test02 {
public static void main(String[] args) {
StaticDemo02 s1=new StaticDemo02();
StaticDemo02 s2=new StaticDemo02();
StaticDemo02 s3=new StaticDemo02();
System.out.println(s1.i);
System.out.println(s2.i);
System.out.println(s3.i);
System.out.println(s1.b);
System.out.println(s2.b);
System.out.println(s3.b);
}
}
结果截图
内存图图解