疯狂JAVA——第六章 面向对象(下)
6.1包装类
java为了照顾程序员的传统习惯,所以提供了八种基本数据类型。但也带来不方便,例如所有引用类型都继承自Object类,都可当做Object类型变量使用。但基本数据类型的变量就不可以。如果有个方法需要Object类型的参数,但实际需要的值确实2、3等数值,这可能比较难以处理。所以提供了包装类。
自动装箱、自动拆箱
基本数据类型——————通过new WrapperClass(primitive)创建————————>包装类对象
基本数据类型<——————通过WrapperInstance.xxxValue()方法————————包装类对象
基本数据类型——————通过String.valueOf(primitive)创建————————>String对象
基本数据类型<——————通过WrapperClass.parseXxx()方法————————String对象
6.2处理对象
toString()方法是Object类里的一个实例方法,所有的Java类都是Object类的子类,因此所有的Java对象都具有toString()方法。
toString()方法是一个非常特殊的方法,它是一个“自我描述”的方法,用print输出。
大部分重写toString()方法总是返回该对象的所有令人感兴趣的信息所组成的字符串。
==和equal()方法判断引用对象相等时,都是当两者指向同一个对象时才相等,如果让他们在字面上就相等,应该重写equal方法。许多类重写了equal()方法,比如String类。
常量池——专门用于管理在编译时被确定并保存在已编译的.class文件中的一些数据。它包含了关于类、方法、接口中的常量,还包括字符串常量。
JVM常量池保证相同的字符串直接量只有一个,不会产生多个副本。而使用new String()创建的字符串对象时运行时创建出来的,它被保存在运行时内存区(堆内存)内,不会放入常量池。
6.3.2单例类
条件:1.构造器私有
2.有一个类外可访问到的类方法
3.有一个类变量来缓存曾经创建的实例。
6.4final修饰符
类成员变量提供默认的初始值,所以我们不指定值也可以;
final修饰的成员变量必须由程序员显示指定初始值,而且是在定义的时候;
局部变量必须初始化后才可以使用,因为局部变量没有默认的初始值;
final修饰的局部变量可以在定义的时候不给定初始值而在后边给定初始值,但只能赋值一次。
final修饰基本类型变量和引用类型变量区别:final只能保证引用类型变量所引用的地址不改变,但这个对象完全可以改变。
6.4.7不可变类
不可变类是指创建该类的实例后,该实例变量是不可改变的。
但如果里边有引用的变量,就要注意,这个时候要想保证引用的内容不变,必须要创建临时的对象,并返回一个匿名对象,详细内容参见P183页。
6.5抽象类和接口
有抽象方法的类只能定义成抽象类,抽象类里可以没有抽象方法。
static和abstract不能同时修饰某个方法,即没有所谓的类抽象方法。但是他们可以同时修饰内部类。
为什么static和abstract不能同时修饰某个方法?
答:因为static修饰的方法不能被重写,故不能实现多态,而abstract的目的就是实现多态,故二者不能同时修饰某个方法。
接口可以包含成员变量(只能是静态常量)、方法(只能是抽象实例方法、类方法或默认方法)、内部类(包括内部接口、枚举)定义。
接口里的所有成员,都是public的,可以省略,但是省略也是public的。
接口的成员变量,可以省略,但即使省略也全是public static final修饰符。而且在定义的时候就要指定默认值。
接口的普通方法不能有方法实现,但类方法、默认方法都必须有方法实现。
继承父类用extends,实现接口用implements
接口与抽象的区别和联系:
接口是一种规范,整个系统的“总纲”,不应该变来变去,所以成员变量是final的。一个接口的改变对整个系统甚至其他系统的影响是辐射式的,导致系统中大部分类都要改写。
抽象类是模板式设计,是中间设计,但还不能作为最终的产品,要进一步完善。
更多区别和联系看p195.
6.7内部类
使用静态内部类比使用非静态内部类要简单的多,只要把外部类当作静态内部类的包空间就可以。因此当程序需要使用内部类时,应该优先考虑静态内部类。
匿名内部类适合创建只需要一次使用的类,创建匿名内部类时会立即创建一个该类的实例,这个类定义立即消失,匿名内部类不能重复使用。匿名内部类必须创建一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。由于内部类不能是抽象类,所以匿名内部类必须实现它的抽象父类或者借口里包含的所有抽象方法。
6.8Lambda表达式
视频地址:http://weibo.com/tv/v/c03ed1e48edafe6d96b09d0d6c29f918?fid=1034:c03ed1e48edafe6d96b09d0d6c29f918
疯狂JAVA——第六章 面向对象(下)的更多相关文章
- 疯狂JAVA——第五章 面向对象(上)
5.1类和对象 构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例.通过new关键字来调用构造器,从而返回该类的实例. 类名:每个单词首字母大写,其他字母小写,单词之间不要 ...
- java 第六章 面向对象基础
1.面向对象编程思想 面向过程编程 传统的C语言属于面向过程编程.面向过程解决问题的思路:通常是分析出解决问题所需要的步骤,然后用方法把这些步骤一步一步实现,最后一个一个依次调用方法来解决. 面向过程 ...
- “全栈2019”Java第十六章:下划线在数字中的意义
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Python第六章 面向对象
第六章 面向对象 1.面向对象初了解 面向对象的优点: 1.对相似功能的函数,同一个业务下的函数进行归类,分类 2.类是一个公共的模板,对象就是从具体的模板中实例化出来的,得到对象就得到一 ...
- “全栈2019”Java第六章:注释
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- [Effective Java]第六章 枚举和注解
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Java 第六章
第六章 for语法:for(表达式①;表达式②;表达式③){ //④循环操作}表达式含义:表达式1:赋值语句, 它用来给循环变量赋初值 例如:int i = 1;表达式2:循环条件,一个关系表达式, ...
- 疯狂java学习笔记之面向对象(八) - static和final
一.static: 1.static是一个标识符: - 有static修饰的成员表明该成员是属于类的; - 没有static修饰的成员表明该成员是属于实例/对象的. 2.static修饰的成员(Fie ...
- 疯狂java学习笔记之面向对象(六) - 构造器重载、方法重载和方法重写
一.方法重载(Overload): Java允许同一个类中定义多个同名方法,只要形参不一样就可以,如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,则被成为方法重载(两同一异). 同 ...
随机推荐
- Linux下的一些名词解释
libffi (以下E文摘自http://www.sourceware.org/libffi/) A Portable Foreign Function Interface Library. Comp ...
- 关于Redis的那些事
1. MySql+Memcached架构的问题 Memcached采用客户端-服务器的架构,客户端和服务器端的通讯使用自定义的协议标准,只要满足协议格式要求,客户端Library可以用任何语言实现. ...
- BASIC-18_蓝桥杯_矩形面积交
解题思路: 1.先将可能的情况列出,根据分类确定计算的方式; 示例代码: #include <stdio.h>#define N 8 int main(void){ int i = 0 , ...
- spring boot学习(5) SpringBoot 之Spring Data Jpa 支持(2)
第三节:自定义查询@Query 有时候复杂sql使用hql方式无法查询,这时候使用本地查询,使用原生sql的方式: 第四节:动态查询Specification 使用 什么时候用呢?比如搜索有很多条 ...
- 挂载本地ISO
http://www.linuxidc.com/Linux/2017-03/142087.htm 挂载本地ISO mount -o loop /home/iso/RHEL-server-7.0-x86 ...
- win7连接centos的nfs
nfs的服务端这边设置忽略. 主要关于权限的问题: Windows7 NFS客户端,使用mount命令挂载NFS服务之后,文件系统对Win7只读,无法写入文件,无法新建文件夹解决方法. 在win的cm ...
- C++ 无锁队列实现
上源码 #ifndef __GLOBAL_LOCK_FREE_QUEUE_H__ #define __GLOBAL_LOCK_FREE_QUEUE_H__ #include <atomic> ...
- SQL SERVER回滚恢复误操作的数据
在生产数据库做CURD操作时,可能会有执行某条语句误操作的情况发生,针对这个种情况有两点建议: 1. 在SQL SERVER上开启事务确认功能,当执行完语句后确认无误,再提交事务.(开启方法见附件图片 ...
- 原型模式(ProtoType)
用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象. 原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节. .Net 在 system 命名空间中提供了I ...
- vb shell函数在c#的转换
vb shell: Private Sub AddBarcodeImages(ByVal DTab As DataTable) If Not DTab Is Nothing Then DTab.Col ...