static

static,第1张

static

static静态关键字
可以用在

变量:类的共有成员——静态变量
1:static变量只依赖与类存在(可以通过类访问),不依赖与对象实例化存在。
2:所有的对象实例,如例子中的obj1和obj2关于price变量的值都共享存储在一个共同的空间(栈);不过通过对象修改函数类修改,都是对同一个price(变量)访问。
3:一句话就static变量来说,就是一个变量同一个内存空间。突出一个共同成员

package Static_final;

public class Potato {
	static int price=5;
	//静态变量,依赖类的存在,可以直接用。内存里面只有一个price
	 String content="";
	public Potato() {}
	public Potato(int price,String content) {
		this.price=price;
		this.content=content;
	}
	public static void main(String[] args) {
		System.out.println(Potato.price);
		System.out.println("静态变量的调用方法");
//		System.out.println(Potato.content);
//		通过结果显示调用了两次price,而且结果也是一样的。
//		都是用同一个内存,内存里面只有一个price。这个price即可以通过类直接访问,也可以通过对象访问
		Potato obj1=new Potato(10,"青椒土豆丝");
		System.out.println(Potato.price);
		System.out.println(obj1.price);
		System.out.println("------------");
		Potato obj2=new Potato(20,"酸辣土豆丝");
		System.out.println(Potato.price);
		System.out.println(obj2.price);
	}
}
5
静态变量的调用方法
10
10
------------
20
20

方法——static方法——静态方法
1:静态方法也是无需通过对象来引用,是通过类名可以直接引用
2:在静态方法中,只能使用静态变量,不能使用非静态变量
3:静态方法禁止引用非静态方法
由下面的代码可知,静态的方法由对象直接访问,并且静态方法只能调用静态与非静态方法或者变量。

package Static_final;

import first.mainfile;

public class StaticMethodTest {
	int a=1111;
	static  int b=2222;
	public static void hello() {
		System.out.println("000000");
		System.out.println(b);
//		System.out.println(a);//报错,静态方法不能调用非静态变量;
	}
	public void hi() {
		System.out.println("33333");
		hello();
//		非静态方法可以调用静态与非静态变量/方法;但是静态方法不能调用非静态方法/变量
		System.out.println(a);
		System.out.println(b);
	}
	
	public static void main(String[] args) {
		StaticMethodTest.hello();
//		StaticMethodTest.hi();//不能使用类名引用非静态方法;
		StaticMethodTest foo = new StaticMethodTest();
		foo.hello();//警告
		foo.hi();
	
	}
}

类匿名方法块:没有名字的方法`{system.out.println(“1111111”)}`
-最后两种用的比较少,所以就不展开了 单例模式

单例模式是限定某一个类在整个程序运行过程中,只保留一个实例对象在内存空间这个类只能被new一次,只能在内存中出现一次单例模式是GoF的23种设计模式中经典的一种,属于创建型模式类型
- 模式

单例模式:保证一个类有且只有一个对象采用static来共享对象实例采用private构造函数,防止外界new *** 作

package Static_final;

public class Singleton {
//	静态变量就是自身,不能被外部实例化,规定了一个类只能由一个对象。
	private static Singleton obj=new Singleton();
//	静态变量
	private String content;
//	构造函数,为了防止外部定义,确保不能被外部访问只能在内部访问(private)
	private Singleton() {
		this.content="abc";
	}
//	获取内部的content值
	public String getContent() {
		return content;
	}
//	修改内部的content值
	public void setContent(String content) {
		this.content=content;
	}
//	
	public static Singleton getInstance() {
//		静态方法使用静态变量
//		另外可以使用方法内部的临时变量,但是不能引用非静态的成员变量
		return obj;
		//这里使用的对象实际上还是同一个内存中的obj,不管外界调用多少getInstance方法,所拿的实例多少obj。
//		而该方法又是类内部定义好的,因此外部每次定义都是用同一个内存
	}
	public static void main(String[] args) {
		Singleton obj1=Singleton.getInstance();
		Singleton obj2=Singleton.getInstance();
//		obj1与obj2都是同一个指针,obj3又是一个重新new出来的对象。
//		前面一种强调,单例不能在外部所调用,此时的main函数是在类的内部,因此可以new出来。
//		我们所说的外部是重新一个类里面所调用这个对象。
//		这里重新调用这个类,也就重新分配了一个内存,与obj不一样。所有修改值会出现不一样的结果
		Singleton obj3=new Singleton();
		System.out.println(obj1.getContent());
		System.out.println(obj2.getContent());
		System.out.println(obj3.getContent());
		obj1.setContent("qwe");
		System.out.println(obj1.getContent());
		System.out.println(obj2.getContent());
		System.out.println(obj3.getContent());
	
	}
}
abc
abc
abc
qwe
qwe
abc

Finall关键字
1:fiall的使用:

类方法字段(变量)(1):finall修饰一个类,表示这个类不能被继承了。(2):finall修饰一个方法,表示该方法不能被重写,这个方法就定死了(3):finall修饰一个变量,

 			——基本类型变量(int double.......)则这些变量的值不能被改变
 			——对象实例,那么只能修改指针的值,不能修改该指针。
 				例如:finall FinallObj obj1=new FinallObj ;已经定义一个obj1对象,即分配了一个空间给obj1.
 							obj1=new FianllObj;这里再分配一个空间,相当于又开辟一个obj1空间,就会报错,这样是不允许的

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5709661.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存