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的文档吧.
随机推荐
- 配置Log4j(非常具体)
来自: http://www.blogjava.net/zJun/archive/2006/06/28/55511.html Log4J的配置文件(Configuration File)就是用来设置记 ...
- Metadata Lock原理6
一 简介 上一篇文章 <MetaData Lock 之一> 简单的介绍了MySQL 引入MDL 的前因后果,本文深入了解MDL的实现原理和运行机制.二 MDL 的类型 meta ...
- 如何通过VIM把代码格式化后生成HTML网页代码
本文转自http://wangxiaoyu.blog.51cto.com/922065/203471 需求及思路:演示需要,需要网站上嵌入一些代码,我的建议做法是根据代码文件,生成相应的HTML代码, ...
- 进程间通信之FIFO
FIFO有时被称为命名管道.管道只能由相关进程使用,这些相关进程的共同祖先进程创建了管道.但是,通过FIFO,不相关的进程也能交换数据. FIFO是一种文件类型(参考http://www.cnblog ...
- cocos2d-x使用tinyxml2存储解析xml
我用的是2.1.4的cocos2d-x,里面自带有tinyxml2库. 导入头文件:#include "support/tinyxml2/tinyxml2.h" using nam ...
- Codec工具类
import java.math.BigInteger; import org.apache.commons.codec.DecoderException; import org.apache.com ...
- Java中jar命令详解
做项目的时候我们肯定接触过很多jar包,那么jar包是什么呢?笔者了解到jar是java archive file 的简写.从名字就可以知道,它的应用与Java息息相关.下面就详细介绍如何自己生成ja ...
- 创建FILE GEODATABASE 和栅格目录及向栅格目录中添加影像
using System;using System.IO;using ESRI.ArcGIS.DataSourcesGDB;using ESRI.ArcGIS.DataSourcesRaster;us ...
- 最短路径之Dijkstra算法及实例分析
Dijkstra算法迪科斯彻算法 Dijkstra算法描述为:假设用带权邻接矩阵来表示带权有向图.首先引进一个辅助向量D,它的每个分量D[i]表示当前所找到的从始点v到每个终点Vi的最短路径.它的初始 ...
- oracle--varchar2
1. varchar2列最多占用4000字节,但是能容纳多少字符就不一定了 使用sql查看字符集: select userenv('language') from dual;--select * fr ...