ToB企服应用市场:ToB评测及商务社交产业平台

标题: this,构造器,static,final,单例模式 [打印本页]

作者: 不到断气不罢休    时间: 2024-6-2 18:19
标题: this,构造器,static,final,单例模式
this,构造器,static,final,单例模式

this关键字

构造器(构造函数)

留意点:
  1. public class Person {  
  2.     private String name;  
  3.     private int age;  
  4.   
  5.     // 无参构造函数  
  6.     public Person() {  
  7.         this("Unknown", 0); // 使用this()调用另一个构造函数  
  8.         //通过this之间调用有参构造函数
  9.     }  
  10.   
  11.     // 带两个参数的构造函数  
  12.     public Person(String name, int age) {  
  13.         this.name = name;  
  14.         this.age = age;  
  15.     }  
  16.   
  17.     // 省略getter和setter方法...  
  18.   
  19.     public static void main(String[] args) {  
  20.         Person unknownPerson = new Person(); // 调用无参构造函数,实际上会委托给带两个参数的构造函数  
  21.         System.out.println("Name: " + unknownPerson.getName() + ", Age: " + unknownPerson.getAge());  
  22.   
  23.         Person knownPerson = new Person("John Doe", 30);  
  24.         System.out.println("Name: " + knownPerson.getName() + ", Age: " + knownPerson.getAge());  
  25.     }  
  26.    
  27. }
复制代码
  1. public class Example {  
  2.     private int x;  
  3.     private String y;  
  4.   
  5.     // 第一个构造器,带有两个参数  
  6.     public Example(int x, String y) {  
  7.         this.x = x;  
  8.         this.y = y;  
  9.         System.out.println("Two-argument constructor called.");  
  10.     }  
  11.   
  12.     // 第二个构造器,无参数,通过this()调用第一个构造器  
  13.     public Example() {  
  14.         this(10, "Default"); // 使用this()调用带有两个参数的构造器  
  15.         System.out.println("No-argument constructor called.");  
  16.     }  
  17.   
  18.     public static void main(String[] args) {  
  19.         Example obj = new Example(); // 调用无参数构造器  
  20.     }  
  21. }
复制代码
static关键字

内存角度分析:当我们执行一个java文件时,java虚拟机会优先加载方法区中的内容,若碰到stati代码块,则立即运行.也就是说用static关键字修饰的内容在对象还未创建之前就被分配了内存空间,这也是我们为什么能够直接使用类名.方法或类名.变量名去调用类变量和类方法的缘故原由,也是为什么我们不能在类方法中使用实例变量和普通方法的缘故原由。

简单明白为被static修饰的方法或变量是存放再方法区与类信息存放在一起
static比实例化对象先分配内存空间

final关键字

可用来修饰变量和成员方法以及类
final类

final方法

final变量

final参数

单例模式

单例模式:是一种设计模式,它确保一个类只能有一个实例,并提供一个全局访问的点来访问这唯一的实例对象,  -这个模式在多线程情况和一些需要频仍创建和销毁对象但又希望限制这些对象数量的场景中特殊有用-。
懒汉式→多线程下不安全,但节流内存空间
  1. public class Singleton {
  2.        
  3.         private static Singleton singleton; //
  4.         //通过声明一个静态的私有成员变量,并且在该类被加载到JVM时立即初始化这个变量
  5.         //我们创建了一个类的唯一实例。由于是静态的,这个实例与类本身相关联,而不是与类的某个特定实例相关联。
  6.         //同时,由于是私有的,外部代码无法直接访问这个变量,只能通过类提供的公共方法来获取它的值。
  7.         private Singleton() { //将构造函数设为私有化,目的是防止外部代码通过new创建实例对象
  8.                 //它确保了除了类本身之外,没有其他代码能够实例化这个类
  9.         }
  10.        
  11.         public static Singleton getSingleton() {
  12.                 //外部代码可以获取到类的唯一实例。
  13.                 由于这个方法是静态的,我们不需要先创建类的实例就可以调用它。
  14.                 在方法内部,我们检查instance是否已经被初始化(即是否为null)。
  15.                 如果是,我们就创建一个新的实例并赋值给singleton;如果不是(即singleton已经被初始化过),我们就直接返回singleton。
  16.                 由于我们之前已经将构造函数设置为私有,并且singleton是静态的且只被初始化一次,
  17.                 所以getSingleton()方法将始终返回同一个实例
  18.                 if(singleton == null) {
  19.                         singleton = new Singleton();
  20.                 }
  21.                 return singleton;
  22.         }
  23. }
复制代码
饿汉式→可以实用多线程,但消耗内存空间
  1. public class Singleton2 {
  2.         Singleton2 类中的静态成员变量 singleton 在声明的同时就被初始化了。
  3.         这个初始化是在类被 JVM 加载到内存时发生的,且只会发生一次。
  4.         由于是静态的,所以不需要创建类的实例就可以访问它
  5.         private static Singleton2 singleton = new Singleton2();
  6.         private Singleton2() {
  7.                 //使外部不能创建singleton
  8.         }
  9.        
  10.         public static Singleton2 getSingleton() {
  11.                 return singleton;
  12.                 etSingleton() 是一个公共的静态方法,用于返回 Singleton2 类的单例实例。
  13.                 由于 singleton 已经在类加载时初始化了,所以无论多少次调用 getSingleton(),
  14.                 它都会返回同一个实例。
  15.         }
  16. }
复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4