[Java核心技术]第四章-对象与类(4.1-4.6总结)
4.1面向对象程序设计概述
OOP(面向对象编程Object Oriented Programming)
OOP中数据第一位,算法第二位。
类
封装:关键在于不能让其他方法直接访问类的实例域,程序仅通过对象的方法与对象交互。
实例域:对象中的数据。
对象
对象的三个主要特性:
- 对象的行为:可以对对象施加哪些方法。
- 对象的状态:对于每个特定对象都有一组特定的实例域值,这些值的集合就是对象的当前状态。
- 对象标识:如何辨别具有相同行为与状态的不同对象???
类之间最常见的三种关系
- 依赖(uses-a):类A的方法操纵类B的对象,则A依赖于B。应尽量避免依赖,即解耦。
- 聚合(has-a):类A的对象包含类B的对象。
- 继承(is-a):特殊继承一般。
4.2 使用预定义类
对象与对象变量
- 构造对象:使用new操作符+构造器。构造器总是伴随着new方法一起调用
- 对象变量必须先初始化才能当作对象使用。
- 可以将Java对象看作C++的对象指针。
- 所有Java对象都存储在堆中。
- Java中,必须使用clone方法才能获得对象的完整拷贝。
Java类库中的Date类和LocalDate类
Date类:表示时间点
LocalDate类:日历表示法
更改器方法与访问器方法
更改器方法:原对象会被改变。
访问器方法:原对象不会被改变。
4.3 用户自定义类
Employee类
在源文件中,只能有一个public类,并且文件名与public类类名相同,但可以有任意数目的非公有类。
多个源文件的使用
编译多个源文件的程序时,只需javac 含主方法的文件 即可,编译器会自动查找编译使用到的类。并且,若之前编译过,若java编译器发现Employee.java较之前Employee.class有更新,会再编译新版本。
剖析Employee类
- 强烈建议将实例子域标记为private。private确保只有类自身的方法能访问该实例域。
- 一般将方法标记为public。public意味任何类的任何方法都可调用本方法。
从构造器开始
必须注意在所有方法中不要命名与实例域同名的变量,否则局部变量会屏蔽同名实例域。
隐式参数与显式参数
- 方法中,关键字this表示隐式参数。
- Java中,所有方法必须在类内部定义,但并不表示它们是内联方法,是否将某个方法设置为内联方法是Java虚拟机的任务。
封装的优点
- 获得实例域的值,用get set 方法(域访问器方法/域更改器方法)好处:
- 可以改变内部实现,除了该类的方法外,不影响其它代码。
- 更改器方法内部可以写错误检查等语句。
- 不要编写返回 引用可变对象 的访问器方法,要返回一个可变对象的引用,应首先对它进行克隆(clone方法)。
基于类的访问权限
一个方法可以访问所属类的所有对象的私有数据,而不仅限于访问隐式参数的私有特性。
私有方法
可以设置一些辅助方法为private的,并且由于不会被其他类调用,所以可以随时删去。
final实例域
final修饰符修饰的实例域必须在构建对象时初始化,即确保在构造器执行之后这个实例域被赋值。一般用来修饰基本类型域、或不可变类的域,否则容易造成混淆。
4.4 静态域与静态方法
静态域与实例域
类中带有static关键字的属于静态域。每个类只有一个静态域,静态域属于类。而每个对象对于所有的实例域都有自己的一份拷贝,即每个对象都有一个自己的实力域。
静态常量
- 静态变量使用的较少,静态常量使用的较多,例如
public static final double PI=3.1415926535...; - static 静态
- final修饰的局部变量,一旦赋值,无法改变——常量。
- 由于每个类的对象都可以对公有域进行修改,所以最好不要将域设计为public。但将final域设为public却没问题,因为它不允许被修改。
静态方法
用static修饰的方法,只能通过类名调用。
使用的两个情景:
- 一个方法所有参数都是通过显式参数提供,即没有this参数。
- 一个方法只需要访问类的静态域。
静态工厂方法——除使用构造函数外另一种创建实例的方法。
- 定义:不通过 new,而是用一个静态方法来对外提供自身实例的方法,即为静态工厂方法(Static factory method)。
Fragment fragment = MyFragment.newIntance(); - 考虑使用静态工厂方法代替构造器
因为静态工厂方法有诸多优点,总的来说,能够增大类的提供者对自己所提供的类的控制力。
- 有名字
- 可以返回原类型的子类
- 可以有多个参数相同但名称不同的工厂方法
- 可以减少对外暴露的属性
- 多了一层控制,方便统一修改
- 非常棒的参考链接 https://www.cnblogs.com/dyj-blog/p/8867028.html
main方法
- main方法是一个静态方法。在启动程序时还没有任何对象,静态的main方法将执行并创建程序需要的对象。
- 在一个类中可以有一个main方法,是一个常用的单元测试的技巧。
- 如果想要独立地测试Employee类,只需要执行
java Employee;如果Employee类是一个更大型应用Application的一部分,就可以执行java Application,Employee类的main方法将永远不会执行。
- 如果想要独立地测试Employee类,只需要执行
4.5 方法参数
Java语言中,方法参数的传递方式总是按值调用(包括当对象引用作为参数时,也是按值传递,拷贝一份对象引用),方法不能修改传递给它的任何参数变量的内容。
4.6对象构造
重载
方法的签名:要完整的描述一个方法,需要指出方法名、参数类型。
返回类型不是方法名的一部分,不能有两个方法名、参数类型相同却返回值不同的方法。
默认域初始化
域与局部变量的主要不同点:如果没有初始化类中的域,域会被初始化为默认值。而方法中的局部变量必须明确地初始化。
初始化数据域方法二:显式域初始化,会在构造器之前执行。
可以在域声明中赋值。
初始化数据域方法三:使用初始化块,会在构造器之前执行。
[Java核心技术]第四章-对象与类(4.1-4.6总结)的更多相关文章
- [core java学习笔记][第四章对象与类]
4.3 用户自定义类 4.3.1 类数组的声明 需要两次new Employee[]=staff=new Employedd[3]; staff[0]=new Employedd(参数列表); sta ...
- Java核心技术第四章——3.对象构造
重载: 如果多个方法(包含构造方法)有相同的名字.不同的参数,便产生重载.编译器必须挑选出具体执行哪个方法,它通过用各个方法给出的参数类型与特定方法调用所使用的值类型进行匹配挑选出相对应的方法. 如果 ...
- Java核心技术第四章——2.final 和 static
final实例域 实例域(对象的属性)可修饰为final.修饰为final后,在构建对象时必须初始化这个实例域.若没有在实例域进行初始化,那么必须在每个构造器内初始化这个实例域(否则会编译错误). 表 ...
- Java核心技术第五章——2.Object类
Object类:所有类的超类 Object类是Java中所有类的始祖,在Java中每个类都是由它扩展而来的.但是并不需要这样写: public class Emloyee extends Object ...
- Java核心技术第四章——1.封装性
封装性(有时称为数据隐藏): 实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域值.程序仅通过对象的方法与对象的数据进行交互. 给对象赋予了"黑盒"的特征,提高了重用性 ...
- Java核心技术第五章——1.类、超类、子类(2)
继上一篇Java核心技术第五章——1.类.超类.子类(1) 6.重载解析 假如调用ClassName.Method(args) 1.编译器列出类ClassName所有名为Method的方法. 2.编译 ...
- 自制Java虚拟机(四)-对象、new、invokespecial
自制Java虚拟机(四)-对象.new.invokespecial 一.对象的表示 刚开始学Java的时候,图书馆各种教程,书名往往都是“Java面向对象高级编程”,通常作者都会与C++做个比较,列出 ...
- “全栈2019”Java多线程第四章:设置和获取线程名称
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java异常第四章:catch代码块作用域详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
随机推荐
- kvm创建新虚拟机
安装图形化管理界面yum install virt-manager -y 安装好之后 新建虚拟机,我使用的方法是使用ISO镜像文件安装 选择镜像 设置内存 如此,一步一步走下去即可,不再截图 创建好之 ...
- zombodb 低级api 操作
zombodb 低级api 允许直接从zombodb 索引中进行insert.delete 文档,同时保留了mvcc 的特性,但是数据没有存储在 pg 中,但是也带来数据上的风险,我们需要注意进行es ...
- 【转载】Win10系统桌面右键新建没有Word、Excel、PPT怎么恢复?
Win10系统桌面右键新建没有Word.Excel.PPT怎么恢复? 以下正文转载至: 网址:http://www.xitongzhijia.net/xtjc/20170307/93471.html ...
- Java虚拟机的内部体系结构
1.Java程序执行流程 Java程序的执行依赖于编译环境和运行环境.源码代码转变成可执行的机器代码,由下面的流程完成: Java技术的核心就是Java虚拟机,因为所有的Java程序都在虚拟机上运行. ...
- 算法实践--不相交集合(Disjoint Sets)
什么是不相交集合(Disjoint Sets) 是这样的一组set,任何元素最多只能在一个set中 至少支持查找Find和合并Union操作 实现方式(基于树) 每个set都是一棵树 每棵树都由树的根 ...
- 在高并发情况nginx的作用
1 场景一:如图 在单机的情况下例如:单个tomcat 有100w条请求的时候,而默认tomcat支持的并发数量并不能达到要求,所所以单台服务器 扛不住 容易宕机,瘫痪 2 高并发的情况下要让服务器不 ...
- 对于HTML页面中CSS, JS, HTML的加载与执行过程的简单分析
来自 https://blog.csdn.net/u011088260/article/details/79563315 最近在研究HTML页面中JavaScript的执行顺序问题.在Java ...
- 理解OpenShift(4):用户及权限管理
理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...
- HTML禁止鼠标右键的代码
禁止鼠标右键,把Demo的图片全都设为表格的背景,表格的大小与图片的大小一样.这样做看起来是一样的,主要是防止鼠标经过图片时会出现另存的按钮.禁止鼠标右键的代码很简单:<script LANGU ...
- nodejs 函数 :html2js
var fs = require("fs"); var path = require("path"); function propStringToMap(ss1 ...