0
点赞
收藏
分享

微信扫一扫

Java关键字(三): static

Java关键字(三): static



前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!
也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!让我们在成长的道路上互相学习,欢迎关注!

“ static ” 关键字的使用

1. 引入

在这里插入图片描述

2. 理解

3. 使用

3.1 使用范围

3.2 static修饰属性

3.2.1 设计思想

3.2.2 分类

3.2.3 注意

静态变量实例变量
yesno
对象yesyes

3.2.4 举例

public class Test1 {
    public static void main(String args[]) {
                Circle c1 = new Circle(2.0);
                Circle c2 = new Circle(3.0);
                c1.display();//name:这是一个圆radius:2.0
                c2.display();//name:这是一个圆radius:3.0
    }
}
class Circle {
    private double radius;
    public static String name = "这是一个圆";
    public static String getName() {
        return name;
    }
    public Circle(double radius) {
        this.radius = radius; 
    }
    public double findArea() {
        return Math.PI * radius * radius; 
    }
    public void display() {
        System.out.println("name:" + name + "radius:" + radius);
    } 
}
class Person {
   private int id;
   public static int total = 0;
   public Person() {
     total++;
     id = total;
}
    public static void main(String args[]){
      Person Tom=new Person();
      Tom.id=0;
      total=100; // 不用创建对象就可以访问静态成员
    } 
}

public class StaticDemo {
    public static void main(String args[]) {
      Person.total = 100; // 不用创建对象就可以访问静态成员
      //访问方式:类名.类属性,类名.类方法
      System.out.println(Person.total);
      Person c = new Person();
      System.out.println(c.total); //101
    }
}

3.2.5 类变量内存解析

⭕ 图解1:
在这里插入图片描述
⭕ 图解2:
在这里插入图片描述

3.3 static修饰方法

3.3.1 设计思想

3.3.2 理解

3.3.3 使用

静态方法非静态方法
yesno
对象yesyes

3.3.4 注意

3.3.5 举例

public class StaticTest {
	public static void main(String[] args) {		
		Chinese.nation = "中国";				
		Chinese c1 = new Chinese();
		c1.name = "姚明";
		c1.age = 40;
		c1.nation = "CHN";		
		Chinese c2 = new Chinese();
		c2.name = "马龙";
		c2.age = 30;
		c2.nation = "CHINA";		
		System.out.println(c1.nation);//CHINA		
		//编译不通过
//		Chinese.name = "张继科";				
		c1.eat();		
		Chinese.show();
		//编译不通过
//		Chinese.eat();
//		Chinese.info();
	}
}
//中国人
class Chinese{	
	String name;
	int age;
	static String nation;	
	public void eat(){
		System.out.println("中国人吃中餐");
		//调用非静态结构
		this.info();
		System.out.println("name :" +name);
		//调用静态结构
		walk();
		System.out.println("nation : " + nation);
	}	
	public static void show(){
		System.out.println("我是一个中国人!");
		//不能调用非静态的结构
//		eat();
//		name = "Tom";
		//可以调用静态的结构
		System.out.println(Chinese.nation);
		walk();
	}	
	public void info(){
		System.out.println("name :" + name +",age : " + age);
	}	
	public static void walk(){		
	}
}

4. 注意

5. 单例 (Singleton)设计模式

5.1 概述

5.2 优点

5.3 单例设计模式-饿汉式

class Singleton {
    // 1.私有化构造器
    private Singleton() {
    }
    // 2.内部提供一个当前类的实例
    // 4.此实例也必须静态化
    private static Singleton single = new Singleton();
    // 3.提供公共的静态的方法,返回当前类的对象
    public static Singleton getInstance() {
    return single; 
    } 
}

5.4 单例设计模式-懒汉式

(1)单例设计模式-懒汉式(线程不安全)

class Singleton {
    // 1.私有化构造器
    private Singleton() {
    }
    // 2.内部提供一个当前类的实例
    // 4.此实例也必须静态化
    private static Singleton single;
    // 3.提供公共的静态的方法,返回当前类的对象
    public static Singleton getInstance() {
      if(single == null) {
      single = new Singleton();
      }
     return single; 
     } 
}

(2)单例设计模式-懒汉式(线程安全)

public class BankTest {

}

class Bank{

    private Bank(){}

    private static Bank instance = null;

    public static Bank getInstance(){
        //方式一:效率稍差
//        synchronized (Bank.class) {
//            if(instance == null){
//
//                instance = new Bank();
//            }
//            return instance;
//        }
        //方式二:效率更高
        if(instance == null){

            synchronized (Bank.class) {
                if(instance == null){

                    instance = new Bank();
                }

            }
        }
        return instance;
    }

}

5.5 应用场景

举报

相关推荐

0 条评论