服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java编程访问权限的控制代码详解

Java编程访问权限的控制代码详解

2021-03-26 13:31iaiti Java教程

这篇文章主要介绍了Java编程访问权限的控制代码详解,涉及包名,公共的和私有的等相关内容,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

本文研究的主要是Java编程访问权限的控制的相关内容,具体介绍如下。

之前没去注意的修饰符,一般变量前面没添加,一个是不知道有什么用,一个是懒,后面遇到项目的时候就会发现私有和公有区别还是很大的。

(1)首先是包名

使用一个类的时候,例如集合类,就需要引入这个包,然后再使用该包下面的类。如:

java" id="highlighter_917027">
?
1
2
3
4
5
6
7
package com.myown.iaiti;
 
public class Print {
  static void print(String s){
    System.out.println(s);
  }
}

自定义的包,通过引入自己的包,以后你就可以使用自己写的方法进行字符串的打印。之前试过将自己包的路径设进CLASSPATH中,那么在其他目录编译,不需要将包放进该目录,也可以正常运行,不然的话是找不到JAR包的。

(2)public

public,公共的,以前的老师经常用老子来比喻,这是公共的东西,老子给你用,public紧跟数据成员,说明对每个人都是可用的。

(3)private

private,私有的,老子的私有财产,你不要动它,除了包里含有这个数据成员的类可以用之外,其他类不能使用,这部分是设计者本身不想给外人看和修改的。

?
1
2
3
4
5
6
7
8
9
10
public class Print {
  public static void main(String[] args) {
    GetIt g = new GetIt();
  }
}
 
 class GetIt{// 注意 一个文件只能有一个公共类 如果你想在
   //前面加上public 那么就不要和Print写在同一个文件
  private GetIt(){}
}

The constructor GetIt() is not visible,不可见,看出用处了吧,单例模式也是这么用的,控制对象的创建。

单例模式的应用:

?
1
2
3
4
5
6
7
class A{
  private A(){} 
  private static A a = new A(); 
  public static A getInstace(){
    return a;
  }
}

其他的类不能通过new来创建对象,因为构造器被private所修饰,用处在于,当这个A类极为复杂,耗内存的时候,我需要严格控制A对象的创建。既然举了单例,顺便就把单例给讲了。之前看过一些人写的,实在太经典,太厉害了。

上面那种是属于饿汉式,就是一来就帮你new出来,以后new的时候就直接用,不存在线程问题,缺点是放着如果没用的话就是资源浪费。

懒汉式

?
1
2
3
4
5
6
7
8
9
10
11
12
public class A {    
   private A(){ }  
   
   private static A a;  
   public static A getInstance(){  
     if(a == null){  
       return a = new A();  
     }else{  
       return a;  
     }  
   }  
 }

用的时候才帮你new,为null才new,但是存在线程问题,加上synchronized,但是效率降低,因为多线程的话,其中有一个在用的话,就会霸占着。

完美的方法是结合两者:

?
1
2
3
4
5
6
7
8
9
public class A {
  // 私有静态内部类, 只有当有引用时, 该类才会被装载
  private static class LazyA {
    public static A A = new A();
  }
  public static A getInstance() {
    return LazyA.A;
  }
}

前看不懂这个所谓的静态内部类,作用是,既可以做到延时加载,因为只有当使用的时候才会去new,用getInstace方法,不存在多线程问题是因为,静态类属于所有外部类对象,只会加载一次,而静态内部类实例化之后,便是类级别的属性,不属于某个对象,只会加载一次,这样就不会存在资源浪费,也没有多线程效率低的问题。想出这个方法的人真的厉害。

(4)protected

Print是基类,国人喜欢讲父类,但是老外觉得子类更牛逼,基类算是一个根基或者基础吧,protected就是老子专门留给儿子的财产。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Print {
  protected void print(){}
  private void cannotprint(){}
}
 
 
public class PrintSon extends Print{
  void get(){
    print();
    //cannotprint();  private 私有的方法,子类还是不能用
  }
}
 
 
public class NotSon {
  void get() {
    print();
  }
}

protected修饰的,子类可以拿到,介于public和private之间。

(5)类的访问权限

每个文件只能有一个public类。

类名和文件名一致。

单例的话如果没基础看起来有点超前,但是后面知识点完善之后,会容易理解,访问权限的控制还是在于你想不想把自己的那部分代码给别人直接使用。

总结

以上就是本文关于Java编程访问权限的控制代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

原文链接:http://blog.csdn.net/iaiti/article/details/38418927

延伸 · 阅读

精彩推荐