构造函数被private修饰后只能通过静态方法获得实例

简介: 构造函数被private修饰后只能通过静态方法获得实例

没有给构造函数加private时,可以new对象来访问,同时我们并没有写构造方法,因为它会自己去创建

class ArrayTool{
  public static void printArray(int[] arr){
    //打印数组
    System.out.print("[ ");
    for(int x = 0;x < arr.length;x++){
      if(x == arr.length-1){
        System.out.println(arr[x]+" ]");
      }else {
        System.out.print(arr[x]+" , ");
      }
    }
  } 
}


测试类

class Test{
  public static void main(String[] args){
    int[] arr = {11,22,33,44,55,34};
    ArrayTool at = new ArrayTool() ;
    at.printArray(arr) ;
  }
}

上面这个是通过无参构造方法创建的对象,如何将对象的创建(无参构造方法)禁止调用? private关键字

class ArrayTool{
  private ArrayTool(){}
  public static void printArray(int[] arr){
    //打印数组
    System.out.print("[ ");
    for(int x = 0;x < arr.length;x++){
      if(x == arr.length-1){
        System.out.println(arr[x]+" ]");
      }else {
        System.out.print(arr[x]+" , ");
      }
    }
  } 
}


class Test{
  public static void main(String[] args){
    int[] arr = {11,22,33,44,55,34};
    ArrayTool at = new ArrayTool() ;
    at.printArray(arr) ;
  }
}


我们编译说ArrayTool()可以在ArrayTool()中访问private,所以对象的创建(无参构造方法)禁止调用


20191031190706716.png


没有其它构造函数就只能通过静态方法来获得

class ArrayTool{
  private ArrayTool(){}
  public static void printArray(int[] arr){
    System.out.print("[ ");
    for(int x = 0;x < arr.length;x++){
      if(x == arr.length-1){
        System.out.println(arr[x]+" ]");
      }else {
        System.out.print(arr[x]+" , ");
      }
    }
  } 
}


class Test{
  public static void main(String[] args){
    int[] arr = {11,22,33,44,55,34};
    //ArrayTool at = new ArrayTool() ;
    //at.printArray(arr) ;
    //类名.成员方法() ;
    ArrayTool.printArray(arr);
  }
}

成功输出


20191031191502828.png


    当构造函数被private修饰后只能通过静态方法获得实例
目录
相关文章
|
6月前
|
安全 Java
synchronized修饰普通方法和静态方法的区别
在Java多线程中,`synchronized`关键字用于同步机制,确保线程安全。修饰普通方法时,同步基于对象实例,仅同步访问同一对象的方法调用,不同对象间互不影响。修饰静态方法时,则基于类级别,所有对象访问同一静态方法时会互相阻塞。前者适合保护对象状态,后者适用于类级资源同步。需注意,修饰静态方法可能会影响并发性能。实际应用中应根据需求选择适当的同步策略,以平衡程序正确性和效率。
|
3月前
|
Java
被final修饰的类的所有方法都不能被重写吗
在Java中,被`final`修饰的类不能被继承,因此其所有方法也不能被重写。`final`关键字确保了类的定义和行为不会被子类改变。
139 2
|
5月前
|
设计模式 Java
静态方法可以访问实例成员变量吗
静态方法可以访问实例成员变量吗
|
存储 Java
浅谈匿名内部类和局部内部类只能访问final变量
浅谈匿名内部类和局部内部类只能访问final变量
105 0
|
安全 编译器 C++
C++:类中const修饰的成员函数
C++:类中const修饰的成员函数
|
设计模式 存储 安全
C++的单例模式为什么不直接全部使用static,而是非要实例化一个对象?
C++的单例模式为什么不直接全部使用static,而是非要实例化一个对象?
520 1
C++的单例模式为什么不直接全部使用static,而是非要实例化一个对象?
|
前端开发 开发者
class-实例方法和静态方法|学习笔记
快速学习 class-实例方法和静态方法
|
前端开发 开发者
class-子类访问父类上的实例方法|学习笔记
快速学习 class-子类访问父类上的实例方法
131 0