类的访问权限

Java中,访问权限修饰词用于确定库中哪些类对于该库的使用者是可用的。

public class Foo{
}

注意点:

  1. 每个文件(编译单元)只能有一个public类。
  2. public类的名称必须完全和含有该编译单元的文件名相匹配,包括大小写。
  3. 编译单元内没有public类也是可行的(不常这么用),在这种情况下,可以随意对文件命名。

类既不可以是private的(除该类以外,任何类都不能访问它),也不可以是protected。(事实上,内部类可以是private或protected的)

类的访问权限:包访问权限或public。

若不希望别人对该类有访问权限,可以将所有的构造器都指定为private,从而阻止其他人创建该类的对象。

例外

在该类static成员内部可以创建。

class Soup1{
//构造器是private,任何其他人无法创建该类对象
private Soup1(){ }
//static方法,创建对象并返回引用。
//1.可以在返回引用前,做一些额外的工作
//2. 可以记录创建了几个类的对象
public static Soup1 makeSoup(){
return new Soup1();
}
}
class Soup2{
private Soup2(){ }
//单例模式,始终只能创建一个对象
public static Soup2 soup2 = new Soup2();
public static Soup2 access(){
return soup2;
}
public void f(){ }
}
public class Lunch {
void testPrivate(){
// Soup1 soup1 = new Soup1();
}
void testStatic(){
Soup1 soup1 = Soup1.makeSoup();
}
void testSingleton(){
Soup2.access().f();
}
}

对于包访问权限修饰的类,包内其他类可以创建它的对象,包外则不行。但如果该类的某个static成员的访问权限是public的话,依旧可以调用

该static成员,尽管它们并不能生成该类对象。

Java编程思想学习笔记——类的访问权限的更多相关文章

  1. [Java编程思想-学习笔记]第3章 操作符

    3.1  更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...

  2. Java编程思想学习笔记_2(继承和多态)

    静态初始化: 静态初始化只在必要的时刻进行.(即当程序需要加载类进入内存的时候,执行静态初始化.静态变量和静态代码块的初始化顺序,按照在代码中声明的顺序老执行.例如:如果要执行某个public类,那么 ...

  3. Java编程思想 学习笔记6

    六.访问权限控制 访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关. 如何把变动的事物与保持不变的事物区分开来,这是面向对象设计中的一个基本问题. 为了解决这一问题,Java提供了访问权限修饰词 ...

  4. Java编程思想学习笔记——访问权限修饰词

    几种访问权限修饰词 public,protected,private,friendly(Java中并无该修饰词,即包访问权限,不提供任何访问修饰词) 使用时,放置在类中成员(域或方法)的定义之前的,仅 ...

  5. Java编程思想 学习笔记1

    一.对象导论 1.抽象过程 Alan Kay曾经总结了第一个成功的面向对象语言.同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了纯粹的面向对象程序设计方式 1)万物皆 ...

  6. Java编程思想 学习笔记11

    十一.持有对象  通常,程序总是根据运行时才知道的某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型. Java实用库还提供了一套相当完整的容器类来解决这个问题,其中基本的类 ...

  7. Java编程思想 学习笔记7

    七.复用类 1.组合语法 在新的类中产生现有类的对象.由于新的类是由现有类的对象所组成,所以这种方法叫做组合. 类中域为基本类型时能够自动被初始化为零.对象引用被初始化为null. 编译器不是简单地为 ...

  8. [Java编程思想-学习笔记]第2章 一切都是对象

    2.1  创建新的数据类型:类 通过第一章掌握了面向对象的理论后,我们知道每个对象必定属于一个类型,那么Java如何创建新的数据类型?如下程序所示: class Circle { // 属性 // 方 ...

  9. Java编程思想 学习笔记8

    八.多态  在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征. 多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来. “封装”通过合并特征和行为来创建新的数据类型.“实现 ...

随机推荐

  1. ajaxfileupload.js ajax上传文件(含application/json)

    jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId = 'jUploadFrame' ...

  2. java框架篇---struts实现拦截器

    Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept ...

  3. Linux 常用命令随笔(一)

    Linux 常用命令随笔(一) 1.检查linux服务器的文件系统的磁盘空间 df -h 说明: -h更具目前磁盘空间和使用情况 以更易读的方式显示 -H根上面的-h参数相同,不过在根式化的时候,采用 ...

  4. Android基础——Fragment控制切换多个页面

    今天接着上一篇文章,讲解一下Fragment的控制,主要是切换View和页面替换等操作.还有就是如何获取Fragment的管理对象,以及与Activity的通信方式. (PS:新建的QQ群,有兴趣可以 ...

  5. spring boot模仿reponseBody注解,自定义注解,返回值加上元数据

    简介 ResponseBody是通过RequestResponseBodyMethodProcessor起作用的. 我们的做法是写一个包装类,替换掉他 问题:怎么替换呢? 取出 Spring的List ...

  6. 【Android Studio】DDMS的模拟器控制(Emulator Control)不可用

    问题:Win10,Android Studio2.1.3中,创建了一个安卓手机模拟器,但是在DDMS中模拟器控制(Emulator Control)是灰色不可用的(比如想模拟来电和来短信).如下图: ...

  7. python多进程并发

    由于Python下调用Linux的Shell命令都需要等待返回,所以常常我们设置的多线程都达不到效果,因此在调用shell命令不需要返回时,使用threading模块并不是最好的方法.   http: ...

  8. JS运动 - 无缝滚动和缓动动画

    JS运动 - 无缝滚动和缓动动画 无缝滚动原理:首先先复制两张图片(第一张和第二张)放到最后面;ul绝对定位,如果ul的left值大于等于4张图片的宽度,就应该快速复原为0. html <!DO ...

  9. jQuery(五):文本操作

    text()可以获取或设置元素的文本内容.例如: 示例: <!DOCTYPE html> <html lang="en"> <head> < ...

  10. eclipse配置google代码风格

    1.下载google code style的xml文件 地址:https://github.com/google/styleguide 导入xml文件 可能会遇到警告: 版本的问题,忽略即可. < ...