JAVASE static关键字

static关键字

static关键字可以修饰方法!!!
static关键字可以修饰成员变量!!!

class Demo1 { 
	static Demo1 demo1 = new Demo1(); 
	static Demo1 demo2 = new Demo1(); 
	{ 
		System.out.println("构造代码块"); 
	}
	static { 
		System.out.println("静态代码块"); 
	}
	public Demo1() { 
		System.out.println("构造方法"); 
	}
	public static void main(String[] args) { 
		Demo1 demo1 = new Demo1(); 
	} 
}

在这里插入图片描述

  1. 静态成员变量推荐使用的方式是通过类名直接调用,不推荐 使用类对象来进行操作,IDE工具中会存在一定的警告提示,与对象 无关!!!【没有对象】
  2. 静态成员变量不管通过哪一种方式修改,都会影响到所有的 使用者,这是一个【共享资源】
  3. 静态成员变量在类对象创建之前可以使用,类对象销毁之后 依然可以使用,【生存期完全不同】,所有说静态成员变量和类对象 无关,【没有对象】
内存角度分析

类对象:占用内存空间是内存的【堆区】

人: 私人空间

静态成员变量: 占用内存空间是内存的【数据区】

在北京布置的共享单车 不会占用私人空间,在一个公共区域!!! 类对象和静态成员变量占用的内存空间不属于同一个区域。如果 没有引用指向操作,是不存在任何关系。 从内存角度来分析,【没有关系】

static修饰成员方法案例
package com.qfedu.b_staticmethod;

/*
 * 【警告】
 * 		The static method testStatic() from the type Car should be accessed in a static way
 * 		在Car类static修饰的静态成员方法testStatic() 应该通过静态方法访问
 * 【建议】
 * 		static修饰的方法全部采用类名访问!!!
 * 
 * 【错误】
 * 		Cannot make a static reference to the non-static field name
 * 		在静态成员方法中,不能使用一个静态的引用指向一个非静态成员变量。
 * 		在静态成员方法中,不能使用非静态成员变量
 * 	
 * 【错误】
 * 		Cannot make a static reference to the non-static method test() from the type Car
 * 		在一个静态成员方法中,不能使用一个静态引用去操作Car类内的非静态成员方法test();
 * 		在静态成员方法中,不能使用非静态成员方法
 * 
 * 【错误】
 * 		Cannot use this in a static context
 * 		不能在static修饰的静态内容中,使用this关键字
 * 
 * 【可以使用】
 * 		静态成员方法中可以使用类内的其他静态成员变量,和其他静态成员方法。
 * 		【难兄难弟】
 */
class Car {
	// 非静态成员变量
	public String name;
	
	// 静态成员变量
	public static String color = "白色";
	
	public Car() {}
	
	// 非静态成员方法
	public void test() {
		System.out.println("Car类【非静态成员方法】");
	}
	
	// 静态成员方法
	public static void testStatic() {
		// name = "A4L";
		// test();
		// this.name = "ATSL";
		color = "黑色";
		test2();
		System.out.println("Car类【静态成员方法】");
	}
	
	public static void test2() {
		System.out.println("12321321");
	}
}

public class Demo1 {
	public static void main(String[] args) {
		Car car = new Car();
		
		// 通过类对象操作非静态成员变量
		car.name = "领克05";
		
		Car.color = "黑色";
		
		car.test();
		
		// 推荐使用类名调用静态成员方法
		Car.testStatic();
	}
}

总结
1. 静态成员方法不推荐使用类对象调用,而是推荐使用类名直接调用,因为【没有对象】
2. 静态成员方法中不能够使用类内非静态成员变量 【没有对象】
3. 静态成员方法中不能够使用类内非静态成员方法 【没有对象】
4. 静态成员方法中不能够使用this关键字 【没有对象】
5. 静态成员方法可以使用类内的其他静态成员变量和静态成员方法 【难兄难弟】

问题:
1. 为什么是没有对象???
2. 为什么静态成员方法可以使用其他静态资源

静态成员方法,我们推荐是采用类名直接调用的!!!当然可以使用类对象调用,只不过会存在警告!!!而且这
个警告是非常重要的!!!
IDE工具都在提示你 (静态成员方法,静态成员变量)与对象无关

静态成员方法和对象无关,那也就是说所有和对象有关的内容就不要使用了!!!
静态成员方法推荐使用类名调用,那么也就是说调用过程中是没有对象的,所有需要使用对象来操作的非静态成员
变量,非静态成员方法都是无法直接在静态方法中使用的。
加载字节码文件时来解释

发现:
1. 在代码中创建对象之前,静态成员方法已经可以通过类名直接调用,而且是明确可以执行的状态。
2. 对象销毁之后,依然可以通过类名直接调用静态成员方法

代码加载过程的分析:
1. .java文件通过编译之后,生成对应的.class字节码文件。字节码文件中包含了Java文件的所有内容
2. Java程序需要运行的时候,首先会加载对应的资源(.class字节码文件)到内存的【方法区】
3. 加载.class文件的过程中,static修饰的静态成员方法会准备就绪!!!所有运行需要的内容,条件全部OK,可以直接通过类名调用。

整个过程和类对象无关!!!完全是摆脱类对象存在的!!!

销毁过程:
1. 程序运行结束退出之前,会销毁所有的类对象
2. 所有的类对象销毁之后,对于资源没有任何的需求,资源销毁,内存释放,这时静态成员方法使用空间,才会被销毁。

最重要的作用

工具类!!!
静态成员方法是完全不依赖成员变量,也不能使用非静态成员方法和非静态成员变量。所有使用的数据,都是外来
数据。
静态成员方法可以摆脱类对象约束,通过类名直接调用。
好处:
	1. 节约内存。简化逻辑
		不需要创建对象,不需要申请对象空间,也不需要销毁对象空间。
	2. 复用度更高!!!
		摆脱对象的限制,更加自由。

总之 static描述的非常抽象 只能不断练习来理解他的含义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值