从零双排学java之static与无参构造

一.无参构造方法

    当在类中没有书写无参的构造方法时,系统会自动提供一个无参的构造

注意:如果你提供了一个  有参  的构造方法时,这时系统将不会再给你提供一个  无参  构造.后期有可能会导致报错,

建议在书写的时候将两个方法同时写上.

二.static

 * 静态变量相当于一个共享的变量(每个对象都可以访问到)
 * 关键词 static 修饰
 * 
 * 静态变量(类变量)的调用
 * 
 * 1.可以使用对象  直接调用(不建议)
 * 2.使用类名直接调用(建议)
 * 为什么建议使用类名进行调用?
 * 使用类名调用静态变量  可以和 成员变量区分
 * 直接使用类名调用更准确  有静态变量时  对象还没有创建
 * 
 * 静态变量好处:
 * 节约内存(静态变量 是一个共享变量)
 * 举例:
 * 老师被所有学生共享 
 * 
 * 静态变量和成员变量的区别
 * 1.所属不同
 * 静态变量:属于类,也叫类变量
 * 成员变量:属于对象  也叫对象变量
 * 2.在内存中所处的位置不同
 * 静态变量:方法区的静态区
 * 成员变量:堆中
 * 3.在内存中加载时机不同(生命周期不同)
 * 静态变量:随着class文件的加载而加载    程序结束之后销毁
 * 成员变量:随着对象的创建而创建  随着对象的销毁而销毁
 * 4.调用方式不同
 * 静态变量:对象名和类名(推荐)
 * 成员变量:只能使用对象名

先上内存图:


代码:

public class Demo03 {
	public static void main(String[] args) {
		AVGirl girl1 = new AVGirl();
		girl1.name = "泷泽萝拉";
		AVGirl.country = "日本";

		AVGirl girl2 = new AVGirl();
		girl2.name = "冲田杏梨";
		girl1.sayHi();
		girl2.sayHi();
	}

}

class AVGirl {
	String name;// 姓名
	static String country;// 国籍

	// 思考:构造方法能不能用private 修饰
	public AVGirl() {

	}

	public void sayHi() {
		System.out.println(name + "" + country);
	}

}

运行结果:


内存图,文字解释:

 * 对象加载到内存中的表现步骤
 * 1.加载由于main函数的class文件到方法区中
 * 2.main方法  入栈(需要创建AVGirl对象)
 * 3.先把AVGirl.class文件加载到方法区中
 * 4.在堆内存中  开辟空间 创建 AVGirl的对象
 * 5.赋值方法入栈  赋完值  出栈
 * 6.main 方法执行完毕 出栈
 * 7.程序结束

静态方法特点:

	 * 静态方法  随着类的加载而加载(跟静态变量一样)
	 * 静态方法的执行跟成员方法一样  入栈和出栈
	 * 静态方法中不能使用成员变量
	 * (静态方法加载的时候还没有对象)
	 * 静态方法中不能对非静态的方法进行调用
	 * 因为静态进行调用时  成员变量是跟着对象的  还没有被创建
	 * 
	 * 简单记:静态只能调用静态的  
	 * 静态和成员的  成员都可以调用他们,因为成员进行调用的时候  静态的已经创建了 

猜你喜欢

转载自blog.csdn.net/jsymax/article/details/80258202