java static关键字

package object;
/*
 * 1、static(静态的)我们从内存管理方面去思考
 * 如何理解静态的static ?
 * 从内存上考虑:我们在加载类的同时就已经加载与初始化了(静态的)static,(实际上属于类)
 * 使他们在内存中常存,并且他们具有全局唯一性。
 * 
 * 
 * 2、使用范围
	 * 2.1变量:类变量、静态变量
	 * 2.2方法:类方法、静态方法
	 * 2.3代码块:静态代码块
	 * 2.4嵌套类:静态内部类
 * 
 * 
 */
public class TestStatic {

	public static void main(String[] args) {
		StaticVariable display=new StaticVariable(1.1f,2.2f);
		/*
		 * --2.如果类中有一个固定的常量,则可以赋予静态常量(从而达到节省空间
 * 不必每创建一个实例就分配一次内存)
		 */
		display.TestStatic03();//1.1 2.2 3.3
		StaticVariable.TestStatic02();
		
		
		
		
		
		ClassMethod display02=new ClassMethod();
		ClassMethod.TestMethod01();
		System.out.println(ClassMethod.test0001);
				

}
}	
	//2.1静态变量
/*
 * 静态变量与实例变量区别
 * 1.内存:
 * 静态变量在加载类过程中完成静态变量分配(且只分配一次)
 * 实例变量在加载一个实例完成一次实例变量分配
 * 2.类内部
 * 静态变量,可以在任何方法直接访问
 * 实例变量,只能在非静态方法访问
 * 3.其他类
 * 前者可以直接使用类名调,后者需要通过实例对象
 * 			4.静态变量作用
 * --1.静态变量可以被类的所有实例共享(增加实例交互性)
 * --2.如果类中有一个固定的常量,则可以赋予静态常量(从而达到节省空间
 * 不必每创建一个实例就分配一次内存)
 */
 class StaticVariable
{
	int test01=55;
	static int test02=555;
	
	float test001;
	float test002;
	static float test003=3.3f;
	
	public StaticVariable(float test001, float test002) {
		super();
		this.test001 = test001;
		this.test002 = test002;
		/*
		 * PS:在调用默认构造器时我们找不到静态变量
		 * 原因在于:构造器实际作用是创建对象,以及初始化属性
		 * 然而我们静态变量,一般是一个静态常量它不再改变
		 * 也就说明不需要再初始化了(不然静态无意义)
		 */
	}
	public void TestStatic01()
	{
		test01=66;
		test02=666;
	}
	static public void TestStatic02()
	{
		/*
		 * 2.类内部
 * 静态变量,可以在任何方法直接访问
 * 实例变量,只能在非静态方法访问
		 */
		//test01=66;
		
		test02=666;
	}
	 public void TestStatic03()
	{
		  System.out.println(test001+" "+test002+" "+test003+" ");
	}
}
 //		静态方法
 /*1、静态方法(或称为类方法),指被 static 修饰的成员方法。
  *2、实例方法,指没有被 static 修饰的成员方法。
  *
  *3、静态方法与实例方法的区别:
  *		1.静态方法,属于类,而不属于类的对象。(在调用时使用类调)
  *		2.静态方法不能使用非static的变量、方法;this、super(与实例相关)
  *	可以直接访问静态变量方法
  *		3.可直接访问所属类的静态变量、静态方法、实例变量和实例方法。
  *
  *///	4.静态方法,适合入口方法定义;比如单例模式,因从外部拿不到构造函数,
	 //所以定义一个静态的方法获取对象非常有必要。
 
 
 class ClassMethod
 {
	 
	 static String test0001;
	 String test0002;
	 public void TestMethod02()
	 {
		 
	 }
	 static public void TestMethod01()
	 {
		 //this();
		 //super();
		 //String test0002="g";
		 //TestMethod02();
		test0001="ggg";
	 }
	 //2.静态方法,适合入口方法定义;比如单例模式,因从外部拿不到构造函数,
	 //所以定义一个静态的方法获取对象非常有必要。

	public static String getTest0001() {
		return test0001;
	}
	public static void setTest0001(String test0001) {
		ClassMethod.test0001 = test0001;
	}
	 
 }
 /*静态方法与静态变量好处:

1. 属于类级别,无需创建对象就即可直接使用,使用方便。

2. 全局唯一,内存中唯一,静态变量可以唯一标识某些状态。

3. 类加载时候初始化,常驻在内存,调用快捷方便。

静态方法与静态变量缺点:

1. 静态方法不能调用非静态的方法和变量。

2.不能使用this和super关键字。

静态方法与静态变量适用场景:

1. 静态方法,最适合工具类中方法的定义;比如文件操作,日期处理方法等。

2.静态方法,适合入口方法定义;比如单例模式,因从外部拿不到构造函数,所以定义一个静态的方法获取对象非常有必要。

3.静态变量适合全局变量的定义;举例:用一个布尔型静态成员变量做控制标志。
————————————————
版权声明:本文为CSDN博主「春风化作秋雨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jiahao1186/article/details/121886704
  */
 
 abstract class RewriteStatic
 {
	 public abstract  void Rewrite();
	
 }
 class RewriteStaticSon extends RewriteStatic
 {
	 public   void Rewrite()
	 {
		 System.out.print("我是重写的");
	 }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值