Java 面向对象(四)
代码块
什么是代码块
在类中或方法当中 使用 { } 括起来的一段代码,就称它是一个代码块。

在代码块当中定义的变量我们称是局部变量,在外面是没有办法使用的。这里定义的 a 就是一个局部变量。
代码块分类
(1)局部代码块
(2)初始化代码块
(4)静态代码块
局部代码块
直接定义在方法当中的代码块。一般结合 if,while ,for 等关键字一起使用,表示一块代码区域。在调用方法的时候执行。

初始化代码块
直接定义在类当中的代码。每次创建对象的时候,都会执行初始化代码块。
class Run {
int n = 10;
{
System.out.println("执行初始化代码块");
}
Run() {
System.out.println("对象创建中。。。");
}
Run(int n) {
this.n = n;
System.out.println("对象创建中。。。");
}
}
public class Test {
public static void main(String[] args) {
new Run();
new Run(2);
}
}
输出结果:
执行初始化代码块
对象创建中。。。
执行初始化代码块
对象创建中。。。
初始化代码块本质是放到每个构造方法当中执行的,可以通过反编译查看。
反编译后:
class Run
{
int n;
Run()
{
n = 10;
System.out.println("执行初始化代码块");
System.out.println("对象创建中。。。");
}
Run(int n)
{
this.n = 10;
System.out.println("执行初始化代码块");
this.n = n;
System.out.println("对象创建中。。。");
}
}
静态代码块
在初始化代码块前面加上一个static,在加载字节码时就会自动调用,在主方法之前执行的。只执行一次。
静态代码块随着字节码加载也加载进了JVM,此时main方法还没有执行,因为方法需要JVM调用。
先把字节码加载进JVM,JVM再去调用main方法,静态代码块用来做一次性初始化操作。

组合
组合关系:自己当中的字段是一个“类”类型 ,依赖其它的类。
class Dog{
String name;
}
class Person{
String name;
int age;
// 人拥有狗
Dog pet;
}
public class Test {
public static void main(String[] args) {
Person per = new Person();
per.name = "zs";
Dog dog = new Dog();
dog.name = "wc";
per.pet = dog;
System.out.println(per.pet.name); // 输出结果:wc
}
}
类的加载
类在什么时候去加载?
当第一次使用该类对象的时候,去加载到JVM当中,只加载一次,下一次直接从内存当中使用了。
加载时,会执行 static。
字段的初始化
(1)静态字段初始化:是在静态代码块当中初始化。
(2)非静态的字段初始化:它是在构造器当中初始化。
例题,分析输出结果
public class MyXq {
private static MyXq xq = new MyXq();
private SubClass sub = new SubClass();
static {
System.out.println(3);
}
public MyXq() {
System.out.println(4);
}
public static void main(String[] args) {
System.out.println("main");
}
}
class SuperClass {
SuperClass() {
System.out.println("构造器SuperClass");
}
}
class SubClass extends SuperClass {
static {
System.out.println(1);
}
SubClass() {
System.out.println(2);
}
}
分析:
涉及知识点:
(1)类的加载
(2)字段的初始化
(3)子类构造器默认会调用父类的构造器
public class MyXq {
private static MyXq xq = null;
private SubClass sub = null;
static {
xq = new MyXq();
System.out.println(3);
}
public MyXq() {
sub = new SubClass();
System.out.println(4);
}
public static void main(String[] args) {
System.out.println("main");
}
}
class SuperClass{
SuperClass(){
System.out.println("构造器SuperClass");
}
}
class SubClass extends SuperClass{
static {
System.out.println(1);
}
SubClass(){
super();
System.out.println(2);
}
}
程序开始,先找mmain入口,在MyXq类中,先加载MyXq类,执行MyXq类中的静态代码……
输出结果:
1
构造器SuperClass
2
4
3
main
final 关键字
什么是 final
final:"最终,不可修改的",保证数据的安全,只能用, 不能修改。
final 可以修饰字段、方法和类。
修饰字段 : 不能再去修改该字段。
修饰方法 : 子类就不能再去覆盖该方法 。
修饰类: 该类就不能再去被继承。
final 关键字注意点
(1)final 修饰字段时, 字段是没有默认初始值 ,必须得要自己手动设置初始值。
(2)final 修饰变量,就代表是一个常量 命令规则 :所有的字母都大写。如:MAX_VALUE
(3)final 可以在局部代码块当中使用。
(4)如果final修饰的是基本数据类型 ,代表值不能再去修改了;如果final修饰的是一个引用类型,地址不能再去修改。
单例设计模式
什么是设计模式?
设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。之前很多程序员经常无数次的尝试,总结出来一套最佳实践。
什么是单例设计模式?
通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例
单例设计模式特点
(1)单例类只能有一个实例。
(2)单例类必须自己创建自己的唯一实例。
(3)单例类必须给所有其他对象提供这一实例。
单例设计模式优点
(1)控制资源的使用。
(2)控制实例的产生数量,达到节省资源目的。
(3)作为通信媒介,数据共享。
单例设计模式Java代码实现
饿汉模式:
(1)必须得要在该类中创建一个对象出来。
(2)私有化自己的构造器。防止外界通过构造器来创建新的对象。
(3)给外界提供一个方法,能够获取已经创建好的对象。
class ToolUtil {
// 1.必须得要在该 类中创建一个对象出来。
private static ToolUtil instance = new ToolUtil();
// 2.私有化自己 的构造器。防止外界通过构造器来创建新的对象。
private ToolUtil() {
}
// 3.给外界提供一个方法,能够 获取已经创建好的对象。
static public ToolUtil getInstance() {
return instance;
}
}
工具类
什么是工具类
把一些经常使用的功能,写在一个类当中,我们称这个类就为工具类。以后使用该功能时, 直接调用。提前写好的一些常用功能。
工具类经常使用的包名
工具类我们都喜欢把它放在名字叫 util/utils 或 tool/tools 等。
大家都喜欢这样干,以后看到这样的包名,要清楚里面放的都是工具类。写好以后, 可以直接拿来使用。
如何设计工具类
(1)工具类当中的方法我们一般都会给它设计成静态的方法,直接使用类名来调用。
(2)如果是一个工具类当中的方法,没有使用static,我们一般都把工具类设计为单例,通过单例获取对象调用工具方法。
(3)如果工具类全部使用static修饰,说明工具方法只需要使用工具类名调用即可。此时必须把工具类的构造器私有化。防止创建对象调用静态方法。
Java 面向对象(四)的更多相关文章
- 深入java面向对象四:Java 内部类种类及使用解析(转)
内部类Inner Class 将相关的类组织在一起,从而降低了命名空间的混乱. 一个内部类可以定义在另一个类里,可以定义在函数里,甚至可以作为一个表达式的一部分. Java中的内部类共分为四种: 静态 ...
- Java面向对象 IO (四)
Java面向对象 IO (四) 知识概要: (1)打印流 (2)序列流 SequenceInputStream (3)ObjectInputStream与Ob ...
- JavaSE学习总结(四)——Java面向对象十分钟入门
面向对象编程(Object Oriented Programming,OOP)是一种计算机模拟人类的自然思维方式的编程架构技术,解决了传统结构化开发方法中客观世界描述工具与软件结构的不一致性问题.Ja ...
- 2017-2018-2 20165301 实验四《Java面向对象程序设计》实验报告
2017-2018-2 20165301 实验四<Java面向对象程序设计>实验报告 一.Android Stuidio的安装测试 实验要求: 参考<Java和Android开发学习 ...
- 20155201 实验四《Java面向对象程序设计》实验报告
20155201 实验四<Java面向对象程序设计>实验报告 一.实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件.布局 ...
- Java第四次作业--面向对象高级特性(继承和多态)
一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握类的继承概念和设计 掌握构造方法的继承原则 掌握方法重写 掌握super键字和final关键字 理解多态的概念,掌握通过方法重写和方法重载机制 ...
- 20155217 实验四《Java面向对象程序设计》实验报告
20155217 实验四<Java面向对象程序设计>实验报告 一.实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件.布局 ...
- 2016-2017-2 20155339《 java面向对象程序设计》实验四Android程序设计
2016-2017-2 20155339< java面向对象程序设计>实验四Android程序设计 实验内容 1.Android Stuidio的安装测试: 参考<Java和Andr ...
- 2062326 齐力锋 实验四《Java面向对象程序设计Android开发》实验报告
北京电子科技学院(BESTI) 实 验 报 告 课程: 程序设计与数据结构 班级: 1623 姓名: 齐力锋 学号: 20162326 成绩: 指导教师: 娄嘉鹏/王志强 实验日期: 2017年5 ...
- Java第四次作业——面向对象高级特性(继承和多态)
Java第四次作业--面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能, ...
随机推荐
- 安装HANA Rules Framework(HRF)
1. 收集文档 1.1 SAP HANA Rules Framework by the SAP HANA Academy link 1.2 HANA Rules Framework (HRF) b ...
- Redis 知识 整理
简介 安装 启动 注意事项 使用命令 通用命令 数据结构 字符串(string) 哈希(hash) 队列(list) 集合(set) 有序集合(zset) 位图(bitcount) 事务 订阅与发布 ...
- VSCode Git 没有活动的源代码控制提供程序
主要原因:我以前安装的Git只允许在Git-Bash中运行,需要重新安装Git,选择允许三方软件的那个选项,然后安装Git插件,修改git.path即可. 以下是解决过程中的尝试,记录如下,实际上只需 ...
- word中快捷键查看与设定
很多时候,我们在编辑word文档的时候,为了快速方便都使用快捷键,常用的快捷键大家都知道,但是不常用的是不是就比较懵圈,本文就来告诉你怎么查看与设置word的快捷键. 我使用的word2016 第一步 ...
- Vue框架之组件与过滤器的使用
一.组件的使用 局部组件的使用 打油诗: 1.声子 2.挂子 3.用 var App = { tempalte:` <div class='app'></div>` }; ...
- cdh的web管理界面503
503 Service Unavailable No server is available to handle this request. 重启 agent 以及 server
- Gitlab-CI +Docker + Docker-Compose构建可持续集成java项目的镜像
先注册好Runner: https://www.cnblogs.com/zsifan/p/11714788.html 以及搭建Java和Maven环境: https://www.cnblogs.com ...
- git命令——git add
如何理解git add git add命令本身并不复杂,字面意义上理解是“将一个文件添加到项目中“.但是这种理解有缺陷,有时候可能会出现某个文件同时存在暂存区域 和 非暂存区域(staged and ...
- DNS服务——正向查找区 和 逆向查找区
前言 正向查找区,就是我们最熟知的DNS.即根据域名解析成IP 逆向查找区,即根据IP解析成域名. 他们之间的关系很像ARP和RARP 正向查找区 /etc/named.rfc1912.zones用于 ...
- ES6 正则扩展
一.新增 flags 属性 ES6 为正则表达式新增了flags属性,会返回正则表达式的修饰符. // ES5 的 source 属性 // 返回正则表达式的正文 /abc/ig.source // ...