java内部类与单例模式
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内部类与单例模式的更多相关文章
- 折腾Java设计模式之单例模式
博文原址:折腾Java设计模式之单例模式 单例模式 Ensure a class has only one instance, and provide a global point of access ...
- Java 设计模式之单例模式(一)
原文地址:Java 设计模式之单例模式(一) 博客地址:http://www.extlight.com 一.背景 没有太多原由,纯粹是记录和总结自己从业以来经历和学习的点点滴滴. 本篇内容为 Java ...
- [java设计模式]之单例模式
-------------------此部分比較深入地解说了单例模式,原文链接已给出.兴许将涉及一些常见面试问题--------------------------- 原文地址:http://www. ...
- 夯实Java基础系列18:深入理解Java内部类及其实现原理
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- java设计模式之单例模式你真的会了吗?(懒汉式篇)
java设计模式之单例模式你真的会了吗?(懒汉式篇) 一.什么是单例模式? 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供 ...
- Java内部类final语义实现
本文描述在java内部类中,经常会引用外部类的变量信息.但是这些变量信息是如何传递给内部类的,在表面上并没有相应的线索.本文从字节码层描述在内部类中是如何实现这些语义的. 本地临时变量 基本类型 fi ...
- Java内部类详解
Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...
- 黑马----JAVA内部类
黑马程序员:Java培训.Android培训.iOS培训..Net培训 黑马程序员--JAVA内部类 一.内部类分为显式内部类和匿名内部类. 二.显式内部类 1.即显式声明的内部类,它有类名. 2.显 ...
- java 内部类 *** 最爱那水货
注: 转载于http://blog.csdn.net/jiangxinyu/article/details/8177326 Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类.内部类又 ...
- java内部类和匿名内部类
内部类即是包含在类里面的又一个类. java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.clas ...
随机推荐
- Rust 的静态网站生成器「GitHub 热点速览」
如果你做过个人博客网站,那么一定对静态网站生成器不陌生.无论是 Ruby 语言的 Jekyll.Go 语言的 Hugo.还是基于 React 的 Gatsby,这些工具都有庞大的用户群体.对于喜欢的人 ...
- 不错的PHP扩展
不错的PHP扩展 ext name ext description ds data structure 提供list hash queue等数据结构 igbinary 数据压缩(速度快 压缩后内容小) ...
- 人形机器人-强化学习算法-PPO算法的实现细节是否会对算法性能有大的影响.
PPO算法是强化学习算法中目前应用最广的算法,虽然这个算法是2017年发表的,但是至今在整个AI领域下的agent子领域中这个算法都是最主要的强化学习算法(至少目前还没有之一),这个算法尤其在Chat ...
- VMware与Windows主机之间复制粘贴
其实就是安装VMware Tools,但不知道为什么我的VMware Workstation不能安装VMware Tools,记得之前有次安装过,但是失败了. 基于apt-get命令下载安装其实是更好 ...
- java——棋牌类游戏斗地主(webddz1.0)之二
package com.ddz; import java.io.ObjectInputStream; import java.net.DatagramSocket; /**************** ...
- 利用 Java 实现组合式解析器
Ward Cunningham 曾经说过,干净的代码清晰地表达了代码编写者所想要表达的东西,而优美的代码则更进一步,优美的代码看起来就像是专门为了要解决的问题而存在的.在本文中,我们将展示一个组合式解 ...
- Yii2 中配置方法汇总
1.默认框架接收的是x-www-format-unencode格式的数据,如果想要接收text/json格式的数据,会为空,这个时候需要在配置文件中添加对应的配置项 config > main. ...
- docker构建supervisor镜像
1 介绍 记录使用docker 构建包含 supervior 的镜像, supervisor: 是一个管理和监控进程的程序,可以方便的通过配置文件来管理我们的任务脚本 将supervisor构建到系统 ...
- Astro v5 x DevNow
先介绍下 DevNow DevNow Github 体验网站 DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论.搜索等功能,欢迎大家体验.同时也支持 Follow ...
- Flutter null safety 无法运行
Flutter空安全问题 在pub上有一些库导入之后无法运行,这是因为健全的空安全 解决方法 1.在命令行中添加参数 flutter run --no-sound-null-safety 2.在IDE ...