• JAVA基础之访问控制权限


    包:库单元

    1.当编写一个Java源代码文件时,此文件通常被称为编译单元(有时也被称为转译单元)。
    2.每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类名称必须和文件的名称相同。
    3.每个编译单元只能有一个public类,否则编译器就不会接受。
    4.如果在该编译单元之中还有额外的类的话,那么在包之外的世界是无法看见这些类的,因为它们不是public类。
    
    • 代码组织
    xx.java编译生成xx.class
    
    package语句必须是文件除注释以外的第一句程序代码
    

    package:

    
    
    [java] view plain copy
     
    1. package com.util.tools;  
    2.   
    3. public class Tools {  
    4.     public static void print(Object object) {  
    5.         System.out.println("" + object);  
    6.     }  
    7. }  

    import:

    
    
    [java] view plain copy
     
    1. package com.test;  
    2.   
    3. package com.test;  
    4.   
    5. import static com.util.tools.Tools.*; //注意  
    6. import java.util.*;  
    7.   
    8. public class Test {  
    9.     public static void main(String[] args) {  
    10.         print("Hello Java.");  
    11.         print(Calendar.getInstance().getTime().toString());  
    12.     }  
    13. }  
    • 创建独一无二的包名
    按照惯例,package名称的第一部分是类的创建者的反顺序的Internet域名
    

    java解释器的运行过程

    1.找出环境变量CLASSPATH,CLASSPATH包含一个或多个目录,用作查找.class文件的根目录
    2.从根目录开始,解释器获取包的名称并将每个句点替换成反斜杠,以从CLASSPATH根中产生一个路径名称
    3.得到的路径会与CLASSPATH中的各个不同的项相连接,解释器就在这些目录中查找与你所要创建的类名称相关的.class文件
    
    注:CLASSPATH=.;D:JAVA;Cflavorsgrape.jar //其中JAR文件的实际名称需要写清楚
    

    Java访问权限修饰词

    public - protected - 包访问权限(无关键字) - private
    置于类中每个成员的定义之前,无论它是域还是方法
    访问控制权限常被成为:具体实现的隐藏
    
    • 取得对某成员的访问权限途径
    1.使成员成为public
    2.放在同一包中,不加访问权限修饰词
    3.使用继承
    4.提供访问器和变异器(get/set方法)
    
    • public:接口访问权限
    任何类都可以访问
    
    • protected:继承访问权限
    protected也提供包访问权限,相同包内的其他类可以访问protected权限
    
    • 包访问权限
    默认权限,无关键字
    当前包中的所有其他类对那个成员都有访问权限,对于包之外的所有类,这个成员却是private
    默认包:在相同目录下,都没有定义package,是具有包访问权限的
    
    • private
    除了包含该成员的类之外,其他任何类都无法访问这个成员
    
    
    
    [java] view plain copy
     
    1. package com.test;  
    2.   
    3. public class Num1 {  
    4.     protected static int i = 0;  
    5.     static int j = 0;  
    6.     private static int k = 0;  
    7. }  
    8.   
    9. class Num2 {  
    10.     int i = Num1.i;  
    11.     int j = Num1.j;  
    12.     //int k = Num1.k; //不能访问private,编译报错  
    13. }  
    14.   
    15. class Num3 extends Num1 {  
    16.     int a = i;  
    17.     int b = j;  
    18.     //int c = k; //子类也不能访问private域,编译报错  
    19. }  

    类访问权限

    类可以为public和包访问权限的,但不可以是private和protected的(内部类除外)。
    
    如果不希望其他任何人对该类拥有访问权限,可以把构造器指定为private,从而阻止创建该类对象,但可以在该类内部创建对象。【单例模式】
    
    
    
    [java] view plain copy
     
    1. public class Test {  
    2.     public static void main(String[] args) {  
    3.         Camera mCamera = Camera.newCamera();  
    4.     }  
    5. }  
    6.   
    7. class Camera {  
    8.     private static Camera mCamera = new Camera();  
    9.     private Camera() {}  
    10.   
    11.     public static Camera newCamera() {  
    12.         return mCamera;  
    13.     }  
    14. }  

    总结

    • 访问权限
      类内部 本包 子类 外部包
    public
    protected ×
    包访问权限 × ×
    private × × ×
    • 访问权限使用
    1.类只能用public,protected
    2.方法,成员变量,局部变量可以使用以上四种权限

    访问权限

    • 成员访问权限
    1. 默认:不声明的话,就是包访问权限,同一个包下的可以访问,包外的无法访问。
    2. public:都可以访问。
    3. protected:继承访问权限,它的子类可以访问;同时也是包访问权限,同一个包内的可以访问。
    4. private:类外无法访问。
    • 类访问权限
    1. public:
    2. 包访问权限:此时最好将该类的域声明为private才有意义。

    注:类访问权限不能是private的,如果不希望任何其他访问该类,可以将此类的构造器定义为private,不让其他可以定义该类的对象!

          protected也不行!

    • 如果一个类的构造器是private

        可以在这个类里在定义一个 public static 类名 的方法,在方法里调用构造器返回这个类的对象引用  (return new leiming())。然后在类外,调用这个方法来建立该类的对象引用。



  • 相关阅读:
    LeetCode 769. Max Chunks To Make Sorted
    LeetCode 845. Longest Mountain in Array
    LeetCode 1059. All Paths from Source Lead to Destination
    1129. Shortest Path with Alternating Colors
    LeetCode 785. Is Graph Bipartite?
    LeetCode 802. Find Eventual Safe States
    LeetCode 1043. Partition Array for Maximum Sum
    LeetCode 841. Keys and Rooms
    LeetCode 1061. Lexicographically Smallest Equivalent String
    LeetCode 1102. Path With Maximum Minimum Value
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/8126364.html
Copyright © 2020-2023  润新知