文章目录
关键字:static
为什么有static
static关键字的使用
静态属性
- 属性 按 是否使用static分类:
①static 修饰的属性 :静态变量 或 类变量,从名字类变量可看出,其是属于类的
,可不创建对象,直接用类调用
②非static 修饰的属性:非静态变量 或 实例变量,其是属于对象的
,必须由创建的对象调用。
public class AnimalTest {
public static void main(String[] args) {
Preson.nation = "china";//直接用类调用,不用创建对象
Preson preson = new Preson();
preson.name = "d";//创建对象后才能调用
}
}
class Preson{
static String nation;
String name;
}
类变量 vs 实例变量内存解析
- 类变量(静态属性)放在
方法区的静态域中
。
静态方法
- static方法内只能访问static修饰的属性和方法不能访问非static的结构,是因为
生命周期
的原因,静态属性和方法,随类的加载而加载,非静态属性和方法随对象的创建而加载,即静态属性和方法先于非静态属性和方法出现,所以static方法内只能访问static修饰的属性和方法不能访问非static的结构,因为这时非static的结构还未出现;而非static的结构即可访问非static的结构,也可访问static的结构。
属性和方法什么时候该用static
例子:
编写一个实现银行账户的类,包含的属性有“帐号”、“密码”、“存款余额”、“利率”、“最小余额”,
考虑:哪些属性可以设计成static属性?
通过new类,创建出不同的账户,显然,不同人的账户,“帐号”、“密码”、“存款余额”不能共用,所以这些属性是属于对象的
,要设计成非static属性;而不同人的账户的“利率”、“最小余额”是一样的,可共用,所以这些属性是属于类的
,要设计成static属性。
扫描二维码关注公众号,回复:
12912868 查看本文章

单例 (Singleton)设计模式(应用关键字:static)
单例设计模式-饿汉式
- 上来就new一个对象
private static Singleton single = new Singleton();
,即饿汉式
public class SingletonTest {
public static void main(String[] args) {
Singleton instance1 = Singleton.getInstance();
Singleton instance2 = Singleton.getInstance();
//由于static,该类只存在一个对象实例;
// 创建的instance1和instance2指向同一个对象
System.out.println(instance1 == instance2);//true
}
}
class Singleton {
// 1.私有化构造器
private Singleton() {
}
// 2.内部提供一个当前类的实例
// 4.此实例也必须静态化
private static Singleton single = new Singleton();
// 3.提供公共的静态的方法,返回当前类的对象
public static Singleton getInstance() {
return single;
}
}
单例设计模式-懒汉式
- 先声明一个对象
private static Singleton single
;,用到在创建,即,比较懒,懒汉式。 - 下面的写法线程不安全。原因在
if(single == null)
public class AnimalTest {
public static void main(String[] args) {
Singleton instance1 = Singleton.getInstance();
Singleton instance2 = Singleton.getInstance();
//由于static,该类只存在一个对象实例;
// 创建的instance1和instance2指向同一个对象
System.out.println(instance1 == instance2);//true
}
}
class Singleton {
// 1.私有化构造器
private Singleton() {
}
// 2.内部提供一个当前类的实例
// 4.此实例也必须静态化
private static Singleton single;
// 3.提供公共的静态的方法,返回当前类的对象
public static Singleton getInstance() {
if(single == null) {
//可导致法线程不安全
single = new Singleton();
}
return single;
}
}
饿汉式、懒汉式区别
- 饿汉式的对象加载时间过长,是因为static关键字修饰的结构生命周期长。
优点
应用场景
main方法
- main方法是在编译后的执行时,接受String[] args数组参数的,用于和控制台交互(之前使用Scanner)
- 编译:
javac 运行的类名
- 执行:
java 运行的类名 第一个参数 第二个参数 第三个参数 ...