一、回顾

1.类和对象的区别

2.UML(uniform makeup language)

3.方法区存储静态变量、常量(static final修饰)

4.堆内存中存储对象

5.栈存储变量

6.this()可用于构造方法第一行

7.static静态语句块(JVM中第一次使用类的时候,会进行加载静态语句块),还可以修饰变量和方法

8.设计模式是可以重复利用的解决方案可以分为四类

9.类的继承(单继承)

10.方法覆盖(相同修饰符,相同方法名,相同参数)

11.多态,子类->父类(向上转型

父类->子类(向下转换,强制类型转换)

12.super关键字,子类里面访问父类的方法

13.super()可以出现在构造方法第一行,默认自动生成,不会创建父类,只是用来初始化,用来调用父类的构造方法。

14.final关键字

15.abstract抽象类

非抽象类调用抽象类,必须将抽象类中的方法覆盖、重写

二、深入final关键字

1.抽象类不可以被final关键字修饰(抽象类定义出来就是用来继承的)

2.fianl修饰的引用类型,该引用不可以再重新指向其他的java对象

但是final修饰的引用,该引用指向的对象的属性是可以修改的。


package com.bjpowernode.java_learning;

​

public class D53_1_FinalKeywordAddition {

  public static void main(String[] args) {

    final Customer53 c1 = new Customer53("Jack",45);

//    c1 = new Customer53("liuming",45); //这个语句报错,这是因为final关键字修饰了c1这个变量

//    我们当然不能再将它进行赋值了,但是下面的对c1中的属性进行赋值就是可以的

    c1.name = "jfaolj";

  }

}

​

class Customer53 {

  String name;

  int age;

  Customer53(String name,int age){

    this.name = name;

    this.age = age;

  }

}

运行不会报错。

三、设计模式

1.设计模式:可以重复利用的解决方案

2.设计模式从结构 上可以分为三类:创建型、结构型、行为型

3.单例模式

(1)单例模式是23种设计模式中最简单的一种设计模式

(2)为了解决什么问题呢?

为了保证JVM中某一个类型的java对象永远只有一个;为了节省内存的开销

(3)实现单例模式的方法

i.构造方法私有化

ii.对外提供一个公开的静态的获取当前类型对象的方法

ii.对外提供一个当前类型的静态变量。


package com.bjpowernode.java_learning;

​

public class D53_2_SingletonMode {

  public static void main(String[] args) {

    Singleton53 s1 = Singleton53.getInstance();

    Singleton53 s2 = Singleton53.getInstance();

    System.out.println(s1==s2);//返回结果是true,说明这两个对象是同一个对象,这就达到了我们的目的 

  }

}

​

class Singleton53{

  private static Singleton53 s;//这个很关键,因为静态变量是存储在方法区内存的,这里的s一旦被赋值了,就不会变了

  //第二次调用这个类不会执行这段语句语句因为第一次调用类之前已经创建,第一次调用类改变了它,就一直不用变了

  //将构造方法私有化

  private Singleton53() { 

  }

  //对外提供一个公开获取Singleton对象的方法

  public static Singleton53 getInstance() {

    if(s==null) {

      s = new Singleton53();

    }

    return s;

  }//这里必须是静态方法,如果是实例方法,我们对象都不能在外面创建,那么如果调用这个方法呢?

}

四、源码:

D53_1_FinalKeywordAddition.java

D53_2_SingletonMode.java

地址:

https://github.com/ruigege66/Java/blob/master/D53_1_FinalKeywordAddition.java

https://github.com/ruigege66/Java/blob/master/D53_2_SingletonMode.java

2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Java连载53-单例模式初步、final关键字补充、回顾知识点的更多相关文章

  1. JAVA核心技术I---JAVA基础知识(单例模式和final关键字)

    一:单例模式 C++设计模式中提及,不再赘述设计模式---对象性能模式之单例模式(Singleton) public class single{ static single Instance=new ...

  2. java基本数据类型总结 类型转换 final关键字的用法

    java基本数据类型总结 Java数据类型总结 数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式.接触每种语言的时候,都会存在数据类型的认识,有复杂的. ...

  3. Java&&As3.0 中的final 关键字

    Java和AS3.0关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率.   可以修饰的对象:   fin ...

  4. 夯实Java基础(九)——final关键字

    1.前言 Java语言中的final关键字,想必大家都不是很陌生,我们自己用的最多的应该是用来定义常量吧,那么今天我们就来了解final这个关键字的用法,这个关键字还是非常简单的. final从字面意 ...

  5. Java中的static、final关键字

    static static 的含义是静态的,是一个静态修饰符,一般来说,被static修饰的有以下几种,类.变量.方法.代码块. static修饰类 Java中普通的类是不允许被声明为静态的,但是有一 ...

  6. java中的static和final关键字

    一:static 1)修饰成员变量: static关键字可以修饰成员变量,它所修饰的成员变量不属于对象的数据结构,而是属于类的变量,通常通过类名来引用static成员. 当创建对象后,成员变量是存储在 ...

  7. Java连载5-标识符、关键字和字面值

    一.标识符 1.标识符定义:在java源程序中凡是可以自己命名的单词 2.标识符可以标识什么元素? (1)类名(2)方法名(3)变量名(4)接口名(5)常量名 等等 3.标识符的命名要求 (1)一个合 ...

  8. Java第十一天,final关键字的使用规则

    final 最终的.不可改变的. 用法: 修饰类 修饰方法 修饰成员变量 修饰局部变量 注意事项: 对于类和方法,final和abstract不能同时修饰使用. 对于基本类型来说,不可变是说值不可变: ...

  9. final关键字(最终的)

    1.fianl关键字可以用来修饰类.属性.方法: 2.final关键字修饰的类不能再继承: 如:String   String类是final修饰的类不能被继承 3.final关键字修饰的方法不能被重写 ...

随机推荐

  1. std::map自定义类型key

    故事背景:最近的需求需要把一个结构体struct作为map的key,时间time作为value,定义:std::map<struct, time> _mapTest; 技术调研:众所周知, ...

  2. SSM(SpringMVC+Spring+MyBatis)三大框架使用Maven快速搭建整合(实现数据库数据到页面进行展示)

    本文介绍使用SpringMVC+Spring+MyBatis三大框架使用Maven快速搭建一个demo,实现数据从数据库中查询返回到页面进行展示的过程. 技术选型:SpringMVC+Spring+M ...

  3. 任正非讲话稿 PDF整理版

    任正非讲话稿 PDF整理版 任正非思想之路 这里收录了任正非讲话稿400余篇,从1994年到2018年,从深圳.中国到东南亚.非洲.欧洲.美洲,从研发.市场.服务到财经.人力资源.战略.内控与公共关系 ...

  4. Tornado—接口调用时方法执行顺序

    import tornado.web # web服务 import tornado.ioloop # I/O 时间循环 class MainHandler(tornado.web.RequestHan ...

  5. 运维工程师必会工具(Nmap和TCPdump)

    1.NMap工具 主要功能:探测主机是否在线.扫描主机开放端口和嗅探网络服务,用于网络探测和安全扫描. NMap支持很多扫描技术,例如:UDP.TCPconnect().TCPSYN(半开扫描).ft ...

  6. 2019年全国高校计算机能力挑战赛 C语言程序设计决赛

    2019年全国高校计算机能力挑战赛 C语言程序设计决赛 毕竟这个比赛是第一次举办,能理解.. 希望未来再举办时,能够再完善一下题面表述.数据范围. 话说区域赛获奖名额有点少吧.舍友花60块想混个创新创 ...

  7. Linux中ps -elf和ps aux的区别

    一.前言 Linux下输入命令man ps查看: 加横线是 standard syntax   -- 比如ps -elf  不加横线是 BSD syntax   -- 比如ps aux To see ...

  8. [CodeForces-1225B] TV Subscriptions 【贪心】【尺取法】

    [CodeForces-1225B] TV Subscriptions [贪心][尺取法] 标签: 题解 codeforces题解 尺取法 题目描述 Time limit 2000 ms Memory ...

  9. Docker 零碎

    Delete none tag docker image: $ docker stop $(docker ps -a | grep "Exited" | awk '{print $ ...

  10. 国产处理器的逆袭机会——RISC-V

    前言 今天天气阴沉,刚才又下起了小雨,温度骤降,前几天脱下的秋裤,今天又穿上了,这天气真是变化无常.上周六(4.20)参加了一场关于RSIC-V的技术沙龙,第一次真正了解了RISC-V架构,正好今天不 ...