java中 类的初始化

一个初学者的笔记

  • 1.类变量也叫静态变量,也就是在变量前加了static 的变量;

  • 2.实例变量也叫成员变量,即没加static 的变量;

  • 3.类变量和实例变量的区别在于: 类变量是所有对象共有,其中一个对象将它值改变, 其他对象得到的就是改变后的结果;

  • 而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;
    直接上代码 注释写的挺详细 哈哈哈

第一个例子

public class Demo1 {
	// 定义一个类变量/静态变量
	static int x;
	// 定义一个成员变量/实例变量/非静态变量
	int y = 100;// 并赋予初值

	// 静态代码块
	static {
		// 查看一下x的值
		System.out.println("x-->" + x);
		// y这里报错因为静态方法只能识别静态变量
		// System.out.println("y-->"+y);

		// 调用静态方法
		f1();
		f2();

		// f3()不是静态方法 则无法调用

	}

	// 定义静态方法
	public static void f1() {
		System.out.println("---静态方法f1()--");
	}

	public static void f2() {
		System.out.println("---静态方法f2()---");
	}

	// 实例方法/非静态方法/成员方法
	public void f3() {
		System.out.println("---成员方法f3() ---");
	}

	// 用static修饰的方法只能调用外部用static修饰的属性和方法
	public static void f4() {

		System.out.println("x--->" + x);

		// System.out.println("y--->"+y);

		f1();
		f2();
		// f3();
	}

	// 而实例方法/成员方法,可以调用所有的属性和方法除去main方法
	public void f5() {
		System.out.println("--这里是f5()成员方法--");
		System.out.println("--可以调用所有的属性和方法除去main方法---");
		System.out.println("x--->" + x);
		System.out.println("y--->" + y);
		f1();
		f2();
		f3();
	}

	public static void main(String[] args) {
		//通过类名调用静态变量
		//main也是静态方法所以类初始化时所以静态方法都会执行一遍
		System.out.println(Demo1.x);
		System.out.println("通过类名调用静态方法---");
		Demo1.f1();
		Demo1.f2();
		
		System.out.println("通过创建对象调用静态方法---");
		Demo1 demo1 = new Demo1();
		//可以调用但会有警告
		demo1.f1();
		
		//调用成员方法 没有问题
		demo1.f5();
	}

}

运行结果如下

x-->0
---静态方法f1()--
---静态方法f2()---
0
通过类名调用静态方法---
---静态方法f1()--
---静态方法f2()---
通过创建对象调用静态方法---
---静态方法f1()--
--这里是f5()成员方法--
--可以调用所有的属性和方法除去main方法---
x--->0
y--->100
---静态方法f1()--
---静态方法f2()---
---成员方法f3() ---

上述结果可以看出

类初始化时先走静态变量,静态方法,然后呢再执行成员变量成员方法
但静态变量及其方法有加载类的时候初始化一次 也就是执行一次,第一次的结果就是下一次的初始值
成员方法可以调用静态方法也可以调用静态变量

下面我们看

第二个例子

public class Demo2 {
	// 实例变量,成员变量,非静态变量
	int x = 10;
	// 类变量,静态变量
	static int y = 10;

	// 无参构造方法
	public Demo2() {
		x++;
		y = 100;
	}

	public static void main(String[] args) {
		// 创建对象
		Demo2 demo2 = new Demo2();
		// 打印成员变量
		System.out.println("成员变量x -->" + demo2.x);
		// 打印静态变量
		System.out.println("静态变量y -->" + demo2.y);
		
		System.out.println("=======================");
		// 第二次创建一个对象
		//对象初始化时就不走static int y = 10;了 只走一次
		Demo2 demo3 = new Demo2();

		System.out.println("成员变量x -->" + demo3.x);
		System.out.println("静态变量y -->" + demo3.y);
		
		System.out.println("类名调用静态变量");
		System.out.println("------共享数据----------");
		Demo2.y++;
		System.out.println("demo2静态变量y -->" + demo2.y);
		System.out.println("demo3静态变量y -->" + demo3.y);
		
		System.out.println("---------------------------");
		
		Demo2  demo4 = new Demo2();
		System.out.println(demo4.y);//100
		System.out.println(demo3.y);//100
		System.out.println(Demo2.y);//100
	}
}

运行结果如下

成员变量x -->11
静态变量y -->100
=======================
成员变量x -->11
静态变量y -->100
类名调用静态变量
------共享数据----------
demo2静态变量y -->101
demo3静态变量y -->101
---------------------------
100
100
100

可见
静态变量被所有的对象所共享,其中有一个变量将它的值改变,其他对象得到的就是改变后的结果,它只有在类加载时被初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值