java中不允许外部类使用 private,protected 修饰

所谓的外部类:就是在源码中直接声明的类

所谓的内部类: 就是类中声明的类,内部类可以使用 public, private, protected 来修饰。

内部类

package goodStudy;
public class goodStudy{
public static void main(String[] args) { }
// 这个就是内部类,在类中声明的类
class InnerClass{ }
}
有的小伙伴可能就会问了,我如何使用内部类呢?

答:内部类就当成外部类的属性。从这一句我们也能够得到:

内部类可以使用 public, private, protected 来修饰。

在继续说如何使用? 内部类就当成外部类的属性,因此,需要构建外部类对象才可以使用

这一种也是内部类

package goodStudy;

public class goodStudy{
public static void main(String[] args) { }
// 这个就是内部类,在类中声明的类
class InnerClass{ }
}
// 外部类
class OutClass{
// 也是内部类
class InnerClass { }
}

内部类中也是可以使用static

有的小伙伴可能会说,之前我们有一个static,我们可以在内部类中使用static?

可以的,如果在内部类中使用static,我们叫做静态内部类

package goodStudy;

public class goodStudy{
public static void main(String[] args) { }
// 这个就是内部类,在类中声明的类
class InnerClass{ }
}
class OutClass{
// 静态内部类
static class InnerClass {
}
}

内部类就当成外部类的属性,所以需要构建外部类对象才可以使用

public class study01 {
public static void main(String[] args) {
System.out.println("main");
// 内部类就当成外部类的属性,所以需要构建外部类对象才可以使用
Person p = new Person();
Person.PersonGrid PersonGrid = p.new PersonGrid();
}
} // 外部类 Person
class Person {
// 内部类 PersonGrid
public class PersonGrid { }
}

私有构造,new的时候会报错

public class study01 {
public static void main(String[] args) {
System.out.println("main");
// 因为下面的是私有的。所以new的时候会报错
User p = new User(); // 报错
}
}
class User{
// 私有的,是有在当前类中才可以被访问
private User (){ }
}

protected 受保护的。在同类,同包(包路径相同),子类中可以访问

package studyDemo9yue;
public class study01 {
public static void main(String[] args) {
System.out.println("main");
// 受保护的。在同类,同包(包路径相同),子类中可以访问
User p = new User(); // 正常的
}
} class User{
// 受保护的。在同类,同包(包路径相同),子类中可以访问
protected User (){ }
}

JVM默认给类提供的构造方法,就是公共的public,无参的构造方法

类的创建过程复杂

类的对象消耗资源

成员对象,方法需要被new 才可以使用

静态方法不能直接访问成员属性,但是成员方法是可以访问静态属性。

类的对象消耗资源

package studyDemo9yue;
public class study01 {
public static void main(String[] args) {
System.out.println("main");
// 创建多个实例对象, 现在这样创建的实例对象仍然是消耗内存的
User u1 = User.getUser();
User u2 = User.getUser();
}
} class User{
// 成员方法
private User () { };
// 静态方法
public static User getUser() {
return new User();
}
}

单例模式

我们知道像上面那样去创建很多对象的时候;是非常消耗资源的。
现在我们希望去解决这个问题。
单例模式就出来了
package studyDemo9yue;
public class study01 {
public static void main(String[] args) {
// 创建多个实例对象, 现在这样创建的实例对象仍然是消耗内存的
User u1 = User.getUser();
User u2 = User.getUser();
// == 比较的是内存中的地址哈
System.out.println(u1 == u2); // true
} } class User{
// 静态属性,为什么这里写静态属性?因为静态方法中不能获取成员属性
private static User User = null; //成员方法
private User () { };
// 静态方法
public static User getUser() {
if(User == null){
User= new User();
}
return User;
}
}

java内部类与单例模式的更多相关文章

  1. 折腾Java设计模式之单例模式

    博文原址:折腾Java设计模式之单例模式 单例模式 Ensure a class has only one instance, and provide a global point of access ...

  2. Java 设计模式之单例模式(一)

    原文地址:Java 设计模式之单例模式(一) 博客地址:http://www.extlight.com 一.背景 没有太多原由,纯粹是记录和总结自己从业以来经历和学习的点点滴滴. 本篇内容为 Java ...

  3. [java设计模式]之单例模式

    -------------------此部分比較深入地解说了单例模式,原文链接已给出.兴许将涉及一些常见面试问题--------------------------- 原文地址:http://www. ...

  4. 夯实Java基础系列18:深入理解Java内部类及其实现原理

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  5. java设计模式之单例模式你真的会了吗?(懒汉式篇)

    java设计模式之单例模式你真的会了吗?(懒汉式篇) 一.什么是单例模式? 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供 ...

  6. Java内部类final语义实现

    本文描述在java内部类中,经常会引用外部类的变量信息.但是这些变量信息是如何传递给内部类的,在表面上并没有相应的线索.本文从字节码层描述在内部类中是如何实现这些语义的. 本地临时变量 基本类型 fi ...

  7. Java内部类详解

    Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...

  8. 黑马----JAVA内部类

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 黑马程序员--JAVA内部类 一.内部类分为显式内部类和匿名内部类. 二.显式内部类 1.即显式声明的内部类,它有类名. 2.显 ...

  9. java 内部类 *** 最爱那水货

    注: 转载于http://blog.csdn.net/jiangxinyu/article/details/8177326 Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类.内部类又 ...

  10. java内部类和匿名内部类

    内部类即是包含在类里面的又一个类. java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.clas ...

随机推荐

  1. kafka之介绍

    Kafka 由于高吞吐量.可持久化.分布式.支持流数据处理等特性而被广泛应用.但当前关于Kafka原理及应用的相关资料较少,在我打算编写本文时,还没有见到中文版本的Kafka相关书籍,对于初学者甚至是 ...

  2. Linux之密码生成工具pwgen

    linux中生成随机字符串,可以使用pwgen 安装) ubuntu: apt-get install pwgen Centos: yum install pwgen 语法及参数) pwgen [ O ...

  3. SMOS-II 电梯综合监控系统程序(电梯IC卡解决方案)安装的注意点

    命令提示符下输入命令dir "D:\SMOS-II-CH V3.2" /b /s 回车可返回SMOS II 3.2对应的各文件路径 D:\SMOS-II-CH V3.2\Setup ...

  4. Mybatis【3】-- Mybatis使用工具类读取配置文件以及从属性读取DB信息

    代码直接放在Github仓库[https://github.com/Damaer/Mybatis-Learning ],可直接运行,就不占篇幅了. 1.使用工具类获取sqlSession实例对象 在上 ...

  5. onlyoffice

    https://helpcenter.onlyoffice.com/installation/docs-enterprise-install-centos.aspx?_ga=2.51626159.76 ...

  6. 案例 | 某药企引进正也科技S2P系统 整合营销业务

    为了获取更大的市场空间,医药健康行业正迎来一波前所未有的产业升级.尽管不少企业取得了许多成绩,但仍面临诸多挑战. 天津某医药公司是集医药研发.药品生产.医药商业.大健康产业于一体的大型企业.敢为人先开 ...

  7. vue 创建一个项目

    1.npm init -y 2.vue create 名称  3.manuall select features   [手动配置v2,v3] 4.选版本 5 6 启动:npm run serve

  8. 【Kotlin】select简介

    1 前言 ​ 协程的 select 是一种用于异步操作的选择器,它允许同时等待多个挂起函数的结果,并在其中一个完成时执行相应的操作. ​ 能够被 select 的事件都是 SelectClause,在 ...

  9. CentOS 更换国内源

    前言 centos默认为官方yum源,国内使用的下载速度完全随缘,且不稳定,一般都需要更换国内源 过程 了解版本 通过cat /etc/redhat-release 可以获取当前centos的版本 知 ...

  10. 前端每日一知之opcity/visiblity/display隐藏元素对比

    脑图在线链接 本文内容依据CSDN博主FEWY精彩文章总结而来原文链接