疯狂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允许同一个类中定义多个同名方法,只要形参不一样就可以,如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,则被成为方法重载(两同一异). 同 ...
随机推荐
- dzzoffice协同办公平台与onlyoffice在线协作平台安装与部署
1.安装dzzoffice协同办公平台 DzzOffice是一套开源办公套件,适用于企业.团队搭建自己的 类似“Google企业应用套件”.“微软Office365”的企业协同办公平台. 官网地址:h ...
- R(5): sql 数据处理
sqldf程序包是R语言中实用的数据管理辅助工具,但最新版本的包在处理中文时出现乱码,待解决 Usage: sqldf(x, stringsAsFactors = FALSE, row.names ...
- 【python】split 和 join函数
一.关于split 和 join 方法 1只针对字符串进行处理.split:拆分字符串.join连接字符串2.string.join(sep): 以string作为分割符,将sep中所有的元素(字符串 ...
- C#连接Oracle数据库的连接字符串
来源:http://blog.csdn.net/superhoy/article/details/8108037 两种方式:1.IP+SID方式 2.配置链接方式 1..IP+SID方式 DbHelp ...
- 2013-8-6 ubuntu基本操作
1,apt-get下载文件默认安装路径 apt-get 下载后,软件所在路径是什么?? /var/cache/apt/archives ubuntu 默认的PATH为 PATH=/home/brigh ...
- 杂项:GitHub
ylbtech-杂项:GitHub gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub. gitHub于2008年4月10日正式上线, ...
- WDA编译失败问题
1.放假回来,wda编译失败,报错如下 2018-09-25 10:03:09.020964+0800 WebDriverAgentRunner-Runner[335:33309] +[CATrans ...
- 关于ESXI5.0版本+ Broadcom BCM5720的BUG
主要发生在网卡 Broadcom Corporation NetXtreme BCM5720 Gigabit Ethernet 和ESX 5.0之前的版本. 虚拟机的网络突然不通,必须删除网卡重新创建 ...
- ETL项目场景
1.基础数据的维护,基本都是人工实现 2.慢慢基于文件进行导入 3.专业的数据交换平台 ================================= Kettle:数据导入不是采取数据库模式,因 ...
- 如何对hashmap按value值排序
http://bbs.csdn.net/topics/90321713 这个帖子中没有我想要的答案,treemap是根据key排序的,想以value排序,那么可以key,value互换一下,不过这样的 ...