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. 关于innodb_thread_concurrency参数 并发控制

    http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar_innodb_thread_concurrency Comma ...

  2. linux 标准I/O (二)

    <Uinx 环境高级编程笔记>   以前经常遇到两种I/O操作 一类是f打头的fopen, fread, fwrite 一类是没有f打头的open, read, fwrite 原来一个是U ...

  3. linux 信号处理 六(全)

    一.信号及信号来源 信号本质 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实 ...

  4. 关于 ake sure class name exists, is public, and has an empty constructor that is public

    解决方法:自定义的fragment最好有一个Public的参数为空的构造函数,若需要传入一个参数,可以使用下面的方法 public FileViewFragment(){ } public stati ...

  5. Hadoop通过路径和和链接访问HDFS

    如果既想在Hadoop服务器本地可以通过绝对路径如"/user/hadoop"方式访问hdfs,也想通过"hdfs://local host:9000/user/hado ...

  6. bzoj1034 泡泡堂

    Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛前,对阵 ...

  7. 初次从eclipse转到intellij idea上的一些经验

    如果出现:mvn 请使用 -source 7 或更高版本以启用 diamond 运算符 这种问题 pom.xml里 <build>标签里面 需要加入这么一段 <plugins> ...

  8. CentOS 6.6下安装配置Tomcat环境

    本文转载至:http://www.linuxidc.com/Linux/2015-08/122234.htm 实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验 ...

  9. 3D Render

    记录最近遇到的问题: 1:崩溃问题 由于高频率获取DC异常导致. void D3D11Texture2D::Copy2Window(void* srcdc, uint32_t left, uint32 ...

  10. 并发工具类(二)同步屏障CyclicBarrier

    前言   JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch.CyclicBarrier.Semphore.Exchanger.Ph ...