1.静态static
概念:在有一种情况下,就是无论这个类的对象怎么变化,某些特质始终不会变,这类特质我们称之为静态属性。
静态的只能访问静态,非静态的可以访问静态和非静态
静态当中是不可以使用this和super
类中不存在静态的构造
静态变量:
使用static关键字来修饰成员变量,该变量就被称为静态变量。
static关键字只能用来修饰成员变量,不能用来修饰局部变量。
静态变量被所有实例共享。
静态内存唯一,和实例没有任何关系,所以可以直接通过“类名.变量名”进行调用
静态常量:
被static修饰的常量被称为静态常量
成员属性如果是常量,则必须赋初值,否则编译不通过,可以通过构造来赋初值
静态方法:
被static关键字修饰的方法,称为静态方法
静态方法只能访问静态属性
静态方法可以使用“类名.方法名”来访问
在一个静态方法中只能访问用static修饰的成员,原因在于没有被static修饰的成员需要先创建对象才能访问,而静态方法在被调用时可以不创建对象
静态代码块:
每个静态代码块,只会被执行一次
申明对象的时候,静态代码块并不会被执行,只有类被加载的时候才会
静态代码块可以有多个,顺序执行
静态代码块,样式如下:
static{ System.out.println("静态代码块"); }
2.单例模式
什么是单例模式?
为了保证资源不被过多得浪费,提出一种能让整个系统中一个类只能被实例化对象一次,且实例化对象在内存中唯一存在的路,实现这种思路的功能称作单例模式。
单例模式的特点:
单例模式内存唯一,资源共享
代码实现单例模式:
使用private关键字定义私有化静态属性
使用private关键字私有化构造方法
同步静态方法供外部共享。
package org.example; /** * 单例模式 */
public class Student { //使用static关键字让对象唯一存在 private static Student stu; //私有化构造方法,保证类的外部无法实例化对象 private Student() { } /** * 给外部提供一个唯一能够获得对象得方法 * 如果已经构建对象,则不用再继续构建,没有才能重新构建 * @return */ public synchronized static Student getStu() { if(stu == null){ stu = new Student(); } return stu; } private String name; //名字私有化
private int age;//年龄私有化
/* *给私有化的name设置getter方法 */
public String getName() { return name; } /* *给私有化的name设置setter方法 */
public void setName(String name) { this.name = name; } /* *给私有化的age设置getter方法 */
public int getAge() { return age; } /* *给私有化的age设置getter方法 */
public void setAge(int age) { if (age <= 0){ System.out.println("年龄不合法。。。。"); } this.age = age; } public void introduce(){ System.out.println("大家好!我叫"+name+",我今年"+age+"岁!"); } }
外部调用:
只能通过Student类提供的getStu方法获取对象,通过new 去创建对象直接提示报错。
package org.example; import javax.rmi.CORBA.Stub; public class Exceple1 { public static void main(String[] args) { //实例化对象已在student类内部自动判断完成,只有通过getStu()方法来获取 Student stu = Student.getStu(); stu.setName("小红"); //通过公开的方法设置姓名
stu.setAge(-10);//通过公开的方法设置年龄
stu.setAge(18); stu.introduce();//调用公开方法
} }
设计模式扩展可参考:
https://blog.csdn.net/qq_22339269/article/details/90176392