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——第六章 面向对象(下)的更多相关文章

  1. 疯狂JAVA——第五章 面向对象(上)

    5.1类和对象 构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例.通过new关键字来调用构造器,从而返回该类的实例. 类名:每个单词首字母大写,其他字母小写,单词之间不要 ...

  2. java 第六章 面向对象基础

    1.面向对象编程思想 面向过程编程 传统的C语言属于面向过程编程.面向过程解决问题的思路:通常是分析出解决问题所需要的步骤,然后用方法把这些步骤一步一步实现,最后一个一个依次调用方法来解决. 面向过程 ...

  3. “全栈2019”Java第十六章:下划线在数字中的意义

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  4. Python第六章 面向对象

    第六章 面向对象 1.面向对象初了解 ​ 面向对象的优点: ​ 1.对相似功能的函数,同一个业务下的函数进行归类,分类 ​ 2.类是一个公共的模板,对象就是从具体的模板中实例化出来的,得到对象就得到一 ...

  5. “全栈2019”Java第六章:注释

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. [Effective Java]第六章 枚举和注解

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. Java 第六章

    第六章 for语法:for(表达式①;表达式②;表达式③){ //④循环操作}表达式含义:表达式1:赋值语句, 它用来给循环变量赋初值 例如:int i = 1;表达式2:循环条件,一个关系表达式, ...

  8. 疯狂java学习笔记之面向对象(八) - static和final

    一.static: 1.static是一个标识符: - 有static修饰的成员表明该成员是属于类的; - 没有static修饰的成员表明该成员是属于实例/对象的. 2.static修饰的成员(Fie ...

  9. 疯狂java学习笔记之面向对象(六) - 构造器重载、方法重载和方法重写

    一.方法重载(Overload): Java允许同一个类中定义多个同名方法,只要形参不一样就可以,如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,则被成为方法重载(两同一异). 同 ...

随机推荐

  1. 什么是JavaBean、bean? 什么是POJO、PO、DTO、VO、BO ? 什么是EJB、EntityBean?

    什么是JavaBean.bean?  什么是POJO.PO.DTO.VO.BO ?  什么是EJB.EntityBean?   前言:   在Java开发中经常遇到这些概念问题,有的可能理解混淆,有的 ...

  2. Delphi控件备份工具

    用途: 1.如果您需要重装Delphi,想省去重装控件的麻烦. 2.如果您把Delphi环境安装至另一台电脑上. 那么,您一定需要这个! 运行批处理后,自动在当前目录下生成备份目录. 批处理代码 @e ...

  3. shell 12输入输出重定向

    shell输入/输出重定向 unix系统命令从终端接受输入并将产生的输出发送回终端.命令读取输入的地方,成为标准输入,默认是终端:命令的输出,为标准输出,默认也是终端. command > fi ...

  4. s3express截图安装教程

    1.安装s3express_setup.exe 2.设置s3express 设置服务器地址setopt -endpoint:s3.cn-north-1.amazonaws.com.cn 设置协议set ...

  5. stm32串口接收完整的数据包

    参考了文章:<stm32串口中断接收方式详细比较> 文章地址:http://bbs.elecfans.com/jishu_357017_1_1.html 借鉴了第四种中断方式 串口的配置这 ...

  6. VS:error C3872: '0xe044': this character is not allowed in an identifier解决方法

     从网上粘贴代码到编译器中直接编译的话,会报这个错误,但是代码看上去是没有问题的,实际的原因是因为我们粘贴代码的时候粘贴了中文字符进来. 解决方法:就是把这段代码放到记事本里,选择替换把中文输入空 ...

  7. Maven web项目启动出错

    问题描述: 在第一次建立maven项目后,启动测试,结果jsp页面报告404错误 问题解决: 在pom.xml中引入servlet-api 和 jsp-api,maven不会自动的添加,因此,要在首次 ...

  8. HFDS核心技术

    HDFS 设计的前提与目标 HDFS体系结构1 HDFS体系结构2 HDFS特性与优点 高容错性保障机制 HDFS不适合的场景 HDFS2.0的新特征 HA-QJM Federation 快照 异构层 ...

  9. Oracle导出DMP文件的两种方法

    本文转载自:http://www.cnblogs.com/o-andy-o/archive/2013/06/05/3118611.html   导出: 方法一:利用PL/SQL Developer工具 ...

  10. NHibernate 学习笔记(一)

    NHibernate 的简介: NHibernate是一个面向.NET环境的对象/关系数据库映射工具.对象/关系数据库映射(object/relational mapping (ORM))这个术语表示 ...