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的文档吧.
随机推荐
- Swift3.0语法变化
写在前面 首先和大家分享一下学习新语法的技巧:用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Syntax- 让Xcod ...
- sql优化-隐形转换危害
level 整形字段 a:select * form t_user where level =2; b:select * form t_user where level ='2'; b里面的隐形字段 ...
- windows快捷操作
命令行启动或关闭VMWare服务: net start VMwareHostdVMAuthdServiceVMUSBArbService"VMware NAT Service"VM ...
- 实例源码--Android时钟源码
下载源码 技术要点: 1.Android自定义时钟控件 2.源码带有非常详细的中文注释 ...... 详细介绍: 1.Android自定义时钟控件 通过继承视图继承类View进行自定义控制,实 ...
- HDU 4279 - Number
2012年天津赛区网赛的题目,想了好久,也没能想出来 还是小杰思路敏捷,给我讲解了一番,才让我把这个题做出来 f(x)=x-phi(x)(1——x与x互素个数)-g(x)(x的因子个数)+1 其中g( ...
- mysql权限及用户
一:Flush table tables_name MySQL的FLUSH句法(清除或者重新加载内部缓存) FLUSH flush_option [,flush_option],如果你想要清除一些My ...
- Helpers\Sessions
Helpers\Sessions The session is a static class, this means it can be used in any controller without ...
- iOS-实现验证码倒计时功能(1)
验证码倒计时按钮的应用是非常普遍的,该Blog就和你一起来写一个IDCountDownButton来实现验证码倒计时的效果.你可以想使用普通的UIButton类型按钮一样,只需要设置其倒计时时长(若未 ...
- SQL_server 数据库备份信息查看
select distinct s.database_name, s.first_lsn,s.last_lsn,s.database_backup_lsn,s.backup_finish_date,s ...
- CF Tavas and Nafas
Tavas and Nafas time limit per test 1 second memory limit per test 256 megabytes input standard inp ...