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

(0)

相关推荐

  • 详解Java之路(五) 访问权限控制

    在Java中,所有事物都具有某种形式的访问权限控制. 访问权限的控制等级从最大到最小依次为:public,protected,包访问权限(无关键词)和private. public,protected和private这几个Java访问权限修饰词在使用时,是置于类中每个成员(域或者方法)定义之前的. 一.类成员的访问权限 取得对某成员的访问权的唯一途径是: 1).使该成员成为public.无论谁在哪里,都可以访问该成员: 2).通过不加访问权限的修饰词并将其他类放置于同一包内的方式给成员赋予包访问

  • Java访问权限控制的重要性深入讲解

    前言 人在什么面前最容易失去抵抗力? 美色,算是一个,比如说西施的贡献薄就是忍辱负重.以身报国.助越灭吴:金钱,算是另外一个,我们古人常说"钱乃身外之物,生不带来死不带去",但我们又都知道"有钱能使鬼推磨". 除去美色和金钱,我认为还有一个,就是读者的认可--"二哥,你的文章真的很棒,我特别喜欢.希望能多多更新Java基础知识,真的是受益良多,就好像是在读王小波的散文,但又学了编程!"--你说,收到读者这样暖暖的评语,还需要美色和金钱?"

  • 理解Java访问权限控制

    今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下为何需要访问权限控制.考虑两个场景: 场景1:工程师A编写了一个类ClassA,但是工程师A并不希望ClassA被该应用中其他所用的类都访问到,那么该如何处理? 场景2:如果工程师A编写了一个类ClassA,其中有两个方法fun1.fun2,工程师只想让fun1对外可见,也就是说,如果别的工程师来调用ClassA,只可以调用方法fun1,那么该怎么处理? 此时,访问权限控制便可以起到作用了. 在Java中,提

  • 浅析Java中的访问控制权限

    Java中为什么要设计访问权限控制机制呢?主要作用有两点: (1)为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作时必要的,但是它并不属于客户端程序员所需接口的一部分. (2)为了让类库设计者可用更改类的内部工作方式,而不必担心会对用户造成重大影响. Java中的访问权限控制的等级,按照权限从大到小依次为: Public -> protected -> 包访问权限(没有权限修饰词)-> private.  一.包(package) Java中包(package)的概念和

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

    本文研究的主要是Java编程访问权限的控制的相关内容,具体介绍如下. 之前没去注意的修饰符,一般变量前面没添加,一个是不知道有什么用,一个是懒,后面遇到项目的时候就会发现私有和公有区别还是很大的. (1)首先是包名 使用一个类的时候,例如集合类,就需要引入这个包,然后再使用该包下面的类.如: package com.myown.iaiti; public class Print { static void print(String s){ System.out.println(s); } } 自

  • Java编程Webservice指定超时时间代码详解

    WebService是一种跨编程语言和跨操作系统平台的远程调用技术 所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统(采用交互提问的方式来加深大家对此技术的理解). 远程调用技术有什么用呢?商场的POS机转账调用的转账方法的代码是在银行服务器上,还是在商场的pos机上呢?什么情况下可能用到远程调用技术呢?例如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,让第

  • Java编程实现快速排序及优化代码详解

    普通快速排序 找一个基准值base,然后一趟排序后让base左边的数都小于base,base右边的数都大于等于base.再分为两个子数组的排序.如此递归下去. public class QuickSort { public static <T extends Comparable<? super T>> void sort(T[] arr) { sort(arr, 0, arr.length - 1); } public static <T extends Comparabl

  • Java编程多线程之共享数据代码详解

    本文主要总结线程共享数据的相关知识,主要包括两方面:一是某个线程内如何共享数据,保证各个线程的数据不交叉:一是多个线程间如何共享数据,保证数据的一致性. 线程范围内共享数据 自己实现的话,是定义一个Map,线程为键,数据为值,表中的每一项即是为每个线程准备的数据,这样在一个线程中数据是一致的. 例子 package com.iot.thread; import java.util.HashMap; import java.util.Map; import java.util.Random; /*

  • Java动态代理(设计模式)代码详解

    基础:需要具备面向对象设计思想,多态的思想,反射的思想: Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架.通过阅读本文,读者将会对Java动态代理机制有更加深入的理解.本文首先从Java动态代理的运行机制和特点出发,对其代码进行了分析,推演了动态生成类的内部实现. 代理模

  • Java编程思想对象的容纳实例详解

    Java提供了容纳对象(或者对象的句柄)的多种方式,接下来我们具体看看都有哪些方式. 有两方面的问题将数组与其他集合类型区分开来:效率和类型.对于Java来说,为保存和访问一系列对象(实际是对象的句柄)数组,最有效的方法莫过于数组.数组实际代表一个简单的线性序列,它使得元素的访问速度非常快,但我们却要为这种速度付出代价:创建一个数组对象时,它的大小是固定的,而且不可在那个数组对象的"存在时间"内发生改变.可创建特定大小的一个数组,然后假如用光了存储空间,就再创建一个新数组,将所有句柄从

  • Java语言中的内存泄露代码详解

    Java的一个重要特性就是通过垃圾收集器(GC)自动管理内存的回收,而不需要程序员自己来释放内存.理论上Java中所有不会再被利用的对象所占用的内存,都可以被GC回收,但是Java也存在内存泄露,但它的表现与C++不同. JAVA中的内存管理 要了解Java中的内存泄露,首先就得知道Java中的内存是如何管理的. 在Java程序中,我们通常使用new为对象分配内存,而这些内存空间都在堆(Heap)上. 下面看一个示例: public class Simple { public static vo

  • Java编程构造方法与对象的创建详解

    java构造方法与对象的创建 可以用类来声明对象,声明对象后必须创建对象 1构造方法 首先,我们来谈谈什么叫构造方法,既然都说了这是一个构造方法,那么很显然,它本质上就是一个方法. 那么,既然作为一个方法,它应该有方法的样子吧.它除了回调一个Class();之后,也没见它有其他的定义方法的代码呀?这是因为,在未对类自定义构造方法的情况下,编译器会自动在编译期为其添加默认的构造方法 (1)程序用类创建对象时,需要使用该类的构造方法 (2)类中构造方法的名字必须和类名完全相同,而且没有类型 (3)允

  • Java中EnumMap代替序数索引代码详解

    本文研究的主要是Java中EnumMap代替序数索引的相关内容,具体介绍如下. 学习笔记<Effective Java 中文版 第2版> 经常会碰到使用Enum的ordinal方法来索引枚举类型. public class Herb { public enum Type { ANNUAL, PERENNIAL, BIENNIAL }; private final String name; private final Type type; Herb(String name, Type type)

  • Java四种权限修饰符知识点详解

    Java中有四种权限修饰符 public protected (default) private 同一个类 yes yes yes yes 同一个包 yes yes yes no 不同包子类 yes yes no no 不同包非子类 yes no no no Warning:(default)并不是关键字"default",而是根本不写 知识点补充: Java语言4种访问权限修饰符 Java语言4种访问权限修饰符,但是仅有3个关键字,因为不写访问权限,在Java中被称为默认权限,或同包

随机推荐