JAVA_SE复习(OOP1)
面向对象编程(一)
一、继承
1. 在类图表示中,使用一个分为三块的矩形表示一个类。矩形的第一块表示类名,第二块描述这个类的属性及属性的数据类型,第三块描述这个类的操作,也就是方法以及返回类型。 
2. 访问控制
修饰符 类自身 同包内 子类 所有其他类
private Yes
default Yes Yes
protected Yes Yes Yes
public Yes Yes Yes Yes
3. 覆盖方法的注意点:
方法覆盖必须保证方法名、返回类型、参数列表都必须相同。另外,子类中的覆盖方法的可访问范围不能比其在父类中被覆盖的方法的访问范围小
4. 方法的重载必须注意:
Ø 方法名必须相同
如果方法名都不同,重载方法就根本无从谈起。
Ø 参数列表必须不同(参数的类型或者个数不同即可)
调用语句的参数列表之间的差别必须足够清晰。例如println(inti) println(int k)就完全不是重载,而是重复了,虽然参数名称不同,但参数列表的类型是相同的。
返回类型可以不同,也可以相同
5. 可变参数的方法:
public double avg(int... nums){}
6. 调用父类构造器:
注意:a.super()或this()调用必须放在构造器的第一行。然而,super 和this 调用不能同时显式存在在同一个构造器内,如果显式调用了super,就不能再写this 调用;同样有了this 调用就不能显示调用super。
b.不能继承构造器。尽管子类从父类集成了所有方法和变量,但它不能继承构造器。一个类只有两种方法获得构造器:编写构造器或者由于没有编写任何构造器而获得一个默认构造器。子类只能调用父类构造器。
7. 构造和初始化对象的完整过程:
对象初始化是一个相当复杂的过程。首先,为整个对象分配内存和为属性赋默认初始值。(静态变量优先于普通变量)然后,调用顶层构造器,并且按照如下步骤递归继承树:
1、绑定构造器参数
2、如果显式调用this(),递归调用,然后跳至第5 步
3、递归调用隐式或显式的super(…)(Object 除外,因为Object 没有父类,Object 是所有类的父类,将在下一节作详细介绍)。
4、执行显式的实例变量初始化。
5、执行当前构造器的构造体。
例:构造new Manager(1, “Burns”, 10000, 8000)的步骤
1. 基本初始化
1.1为整个Manager对象分配内存
1.2将所有属性初始化为默认初始值
2. 调用构造器:Manager(int id, String name, double salary, double bonus)
2.1绑定构造器参数 id=1, name=“Burns”, salary=10000, bonus=8000
2.2没有显式的this()调用
2.3调用 Employee(int id, String name, double salary)的super(id, name, salary)
2.3.1 绑定构造器参数 id=1, name=“Burns”, salary=10000
2.3.2 没有显式的this()调用
2.3.3 隐式调用Object的super()
2.3.3.1 不需要参数绑定
2.3.3.2 没有this()调用
2.3.3.3 没有super()调用(Object是根)
2.3.3.4 没有Object的显式变量初始化
2.3.3.5 没有要调用的方法体
2.3.4 显式初始化Employee属性(如果没有则继续使用默认初始值)
2.4显式初始化Manager的属性
2.5执行构造体this.bonus = 8000;
8. Object 类
Java 中,只有基本数据类型不是对象,其他每个类、数组等都是由Object 类扩展而来的
9. 强烈建议给每个自定义类增加一个toString方法。这样在调试过程中可以随时输出对象的状态信息,而且对团队开发的所有使用到该类的程序员有利。
二、 多态
1.多态的声明:
Employee m = new Manager(); //也是合法的
但是这个时候使用变量m,只能访问Employee 中的属性和调用Employee 类中声明的方法,而Manager部分的属性和方法被隐藏。例如:
m.setBonus(8000); //错误
2.虚方法调用:
如果出现如下情况:
Employee e = new Manager();
e.getDetails();
事实上虽然声明的e 是Employee 类型,但实际上实例化出来的是Manager 对象。也就是说,获得的是运行时与变量引用的对象相关的行为而不是编译时的变量类型决定的。这一行为通常称为虚拟方法调用。上面的示例中,执行的e.getDetails()源于对象的真实类型Manager,它将执行Manager 的getDetails()方法。
3.多态参数
多态参数是一个可以接受普通对象的方法参数,这种参数除了可以接收某个类的对象外还能接收该类任意子类的对象。
4.异类集合
Employee[] emp = new Employee[3];
emp[0] = new Employee(1, “Homer”, 6000);
emp[1] = new Manager(2, “Jam”, 8000);
emp[2] = new Programmer(3, “Fred”, 6000);
5. Wrapper 类,装箱和拆箱
a.各基本数据类型对应的Wrapper 类:
基本 Wrapper 默认值
byte Byte 0
short Short 0
int integer 0
long Long 0L
double Double 0.0D
float Float 0.0F
char character ‘\u0000’
Boolean Boolean false
拆包、装包:
int myInt = 100;
Integer wInt = new Integer(myInt);
int p2 = wInt.intValue();
//把基本数据转换成字符串引用类型
String s = String.valueOf(100);
int x = Integer.valueOf(s).intValue();
或者
//取得字符串引用数据类型的数值
int x = Integer.parseInt(s);
三、 枚举
public enum Season
{
SPRING("Spring"),
SUMMER("Summer"),
FALL("Fall"),
WINTER("Winter");
private String name;
private Season(String name) //必须标记为private,只在枚举类内部使用
{
this.name = name;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
PS:
1. * 正则表达式语法
*
* 字符
x 字符 x
字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
边界匹配器
^ 行的开头
$ 行的结尾
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
Logical 运算符
XY X 后跟 Y
X|Y X 或 Y
(X) X,作为捕获组
*/
2. Integer num4 = 128;//autoBoxing 自动打包
Integer num5 = 128;
System.out.println(num4 == num5); //false
因为//-128~127 cache赋值 之外的为new XXX(value)
JAVA_SE复习(OOP1)的更多相关文章
- 7.JAVA_SE复习(文件)
文件和流 1.什么是节点流和处理流 InputStream & OutputStream Reader & Writer 乃节点流, 前面加File之类的名词 的节点流 其余加动词的均 ...
- 6.JAVA_SE复习(集合)
集合 结构图: 总结: 1.集合中的元素都是对象(注意不是基本数据类型),基本数据类型要放入集合需要装箱. 2.set与list的主要区别在于set中不允许重复,而list(序列)中可以有重复对象. ...
- JAVA_SE复习(多线程)
线程 1.两种创建线程的方式都有自身的优点. 实现 Runnable 接口的优点: 从面向对象的设计观点看,Thread 类严格来讲是一个虚拟CPU 的封装,因此只有要改变或扩展该CPU 模型 ...
- JAVA_SE复习(异常)
异常.调试和断言 一. 异常的分类 1. 可查异常 例: 2. 不可查异常 例:Runtime Exception 3. 异常的分类结构: 1. 不执行finally 子句的唯一情况是虚拟机关 ...
- JAVA_SE复习(OOP2)
面向对象编程(二) 一.static 关键字 静态属性 1.不能覆盖静态方法.要被覆盖的方法必须是非静态的.在继承链中具有相同方法名的两个静态方法是两个互相独立的类方法.调用子类的静态方法只是将父类的 ...
- JAVA_SE复习(Class)
一.面向对象程序设计(OOP) 1.面向对象的程序设计是程序开发的一种方法.它将对象作为程序的基本单元,将程序和 数据封装其中,以提高软件的重用性.灵活性和扩展性 2.三个特征: 封装:隐藏信息 继承 ...
- JAVA_SE复习(basic)
一.数据类型 1.基本数据类型 Ps:有效标识符:_.字母.$开头 之后可有数字 整型:byte 1 short 2 int 4 long 8 (字节) 取值范围:其范围是从负2 的该数据类型位数 ...
- iOS总结_UI层自我复习总结
UI层复习笔记 在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是 ...
- vuex复习方案
这次复习vuex,发现官方vuex2.0的文档写得太简略了,有些看不懂了.然后看了看1.0的文档,感觉很不错.那以后需要复习的话,还是先看1.0的文档吧.
随机推荐
- 取消掉Transfer-Encoding:chunked
先说解决方法:::不让服务器返回Transfer-Encoding:chunked,在客户端请求的时候可以使用http 1.0的协议. 有时候,Web服务器生成HTTP Response是无法在Hea ...
- cuda-convnet 卷积神经网络 一般性结构卷积核个数 和 输入输出的关系以及输入输出的个数的说明:
卷积神经网络 一般性结构卷积核个数和 输入输出的关系以及输入输出的个数的说明: 以cifar-10为例: Initialized data layer 'data', producing3072 ou ...
- android147 360 程序锁
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- LXNetwork – 基于AF3.0封装的iOS网络请求库
本框架实现思路与YTKNetwork和RTNetworking类似,相当于一个简单版,把每一个网络请求封装成对象.使用LXNetwork,你的每一个请求都需要继承LXBaseRequest类,通过覆盖 ...
- jQuery中利用JSONP解决AJAX跨域问题
写在前面 跨域的解决方案有多种,其中最常见的是使用同一服务器下的代理来获取远端数据,再通过ajax进行读取,而在这期间经过了两次请求过程,使得获取数据的效率大大降低,这篇文章蓝飞就为大家介绍一下解决跨 ...
- JMS笔记(一)
1.jms概念 Java Message Service为 Java程序提供一种访问企业消息系统的方法,JMS应用由JMS生产者.JMS Provider.JMS消费者构成 1.1. 一条Messag ...
- CentOS7.0 重置Root的密码
首先进入开启菜单,按下e键进入编辑现有的内核,如下图所示 然后滚动列表,找到ro,将它替换成rw,并加上init=/sysroot/bin/sh,最终变为如下图 然后按CTRL+X进入到单用户模式,在 ...
- [改善Java代码]建议采用的顺序是 List<T>、List<?>、List<Object>
建议98:建议采用的顺序是 List<T>.List<?>.List<Object> List<T>.List<?>.List<Obj ...
- 【杨氏矩阵+勾长公式】POJ 2279 Mr. Young's Picture Permutations
Description Mr. Young wishes to take a picture of his class. The students will stand in rows with ea ...
- 初识Less(2015年05月23日)
因为最近在研究Bootstrap,然后才了解到Less,听说Less很强大,又听说Bootstrap+Less会更搭,所以就决定也顺带了解下Less的相关知识. come on...... 一.简介 ...