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

 更新时间:2018年01月26日 09:20:06   作者:iaiti  
这篇文章主要介绍了Java编程访问权限的控制代码详解,涉及包名,公共的和私有的等相关内容,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

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

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

(1)首先是包名

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

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

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,不可见,看出用处了吧,单例模式也是这么用的,控制对象的创建。

单例模式的应用:

class A{ 
  private A(){}  
  private static A a = new A();  
  public static A getInstace(){ 
    return a; 
  } 
} 

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

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

懒汉式

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,但是效率降低,因为多线程的话,其中有一个在用的话,就会霸占着。

完美的方法是结合两者:

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就是老子专门留给儿子的财产。

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

相关文章

  • mybatis-plus动态表名实现方法

    mybatis-plus动态表名实现方法

    本文主要介绍了mybatis-plus动态表名实现方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Java中使用opencv的问题

    Java中使用opencv的问题

    这篇文章主要介绍了Java中使用opencv的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Java编程实现非对称加密的方法详解

    Java编程实现非对称加密的方法详解

    这篇文章主要介绍了Java编程实现非对称加密的方法,简单讲述了非对称加密的概念、原理,并结合实例形式分析了java实现DH加密解密、RSA加密解密、ElGamal加密等具体操作技巧,需要的朋友可以参考下
    2017-08-08
  • Java实现递归山脉

    Java实现递归山脉

    这篇文章主要为大家详细介绍了Java实现递归山脉,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文标点输入无效的完美解决方法

    Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文标点输入无效的完美解决方法

    Mac OS X 下基于 Java 的程序会出现中文标点输入无效的问题,在中文输入法状态,可以输入中文字,但输入中文标点最后上去的是英文标点.这篇文章主要介绍了Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文标点输入无效的完美解决方法,需要的朋友可以参考下
    2016-10-10
  • java数组复制的四种方法效率对比

    java数组复制的四种方法效率对比

    这篇文章主要介绍了java数组复制的四种方法效率对比,文中有简单的代码示例,以及效率的比较结果,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • spring boot中的properties参数配置详解

    spring boot中的properties参数配置详解

    这篇文章主要介绍了spring boot中的properties参数配置,需要的朋友可以参考下
    2017-09-09
  • JavaWeb响应下载功能实例代码(包含工具类)

    JavaWeb响应下载功能实例代码(包含工具类)

    今天通过本文给大家分享的是关于javaweb的响应(response)下载功能,需要的朋友参考下吧
    2017-07-07
  • 完整详解Java开发学习路线指南

    完整详解Java开发学习路线指南

    在本篇文章里小编给大家整理的是一篇关于Java开发学习路线以及期中的主要知识点内容,有兴趣的朋友么可以学习下。
    2022-11-11
  • SpringBoot使用POI进行Excel下载

    SpringBoot使用POI进行Excel下载

    这篇文章主要为大家详细介绍了SpringBoot使用POI进行Excel下载,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09

最新评论