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)

来自为知笔记(Wiz)

时间: 2024-07-30 03:31:19

JAVA_SE复习(OOP1)的相关文章

JAVA_SE复习(basic)

一.数据类型 1.基本数据类型 Ps:有效标识符:_.字母.$开头  之后可有数字 整型:byte 1 short 2 int 4 long 8  (字节) 取值范围:其范围是从负2 的该数据类型位数减1次幂到2 的该数据类型位数减1 次幂– 1. 2.浮点型 float 4            double 8   (字节) 取值范围:6~7 位有效数字             15 位有效数字 注意:float 类型的数值必须加一个后缀F 例:如果不加后缀F,这个数据就会被Java 理解成

C++基础复习

一. C++与C的比较: C语言是一个结构化语言,它的重点在于算法和数据结构,C语言的设计首先要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到的输出(或实现过程(事物)控制). C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制. 所以C语言和C++的最大区别在于它们解决问题的思想不同,一个面向过程一个面向对象. C++对C的"增强",表现在六个方面: 1.类型检测更为严格. 2.

大量逻辑判断优化的思路——责任链模式复习总结及其和状态模式对比

俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的总结知识点如下: 责任链模式概念和例子 使用的条件 和状态模式的比较分析 责任链的优缺点 纯的责任链和不纯的责任链 javax.servlet.Filter#doFilter()方法源码分析 基于AOP思想,模拟一个拦截器 前面说了一个状态模式,总结过程中发现和这个责任链的使用场景很类似,都是为了解耦大量复杂业务逻辑判断的,那么他们有什么不同呢?回忆状态模式——状态模式允许通过改变对象的内部状态而改变对象自身的行为,这个对象

算法分析与设计复习

算法分析与设计复习 2016年初,研一上学期期末考试前,复习并总结算法分析与设计科目的内容.复习过程参照<算法导论>中文第2版,同时参照PPT,章节划分根据PPT内容 概要: 第一章 概述 第二章 插入排序&分治策略 第三章 复杂度分析 第四章 堆与堆排序 第五章 快速排序 第六章 线性时间排序 第一章 概述 算法的应用范围 算法在诸如生物等诸多领域有其应用 算法的意义 算法在很多情况下让不可能完成的事情变成了可能,让处理的很慢的过程变快. 一个铺垫 一串不全为0的数,怎么取能拿到一段

复习PHP-语言参考-预定义接口

1.Traversable 他是一个遍历接口规范 注意:发现一个有用的函数get_declared_classes,可以以数组形式显示当前脚本下所有已经定义的类名 2.Iterator Iterator迭代器继承自Traversable,是一种遍历对象内容的对象. 你可以自己写一个子类继承自它,并写上具体遍历的方法. Iterator包含:current(返回当前元素),key(当前键),next(下一个元素),rewind(返回至初始元素),valid(检测当前元素是否存在)五种方法. 3.I

underscore 复习 对象函数 篇章

_.partial = function(func) { var boundArgs = slice.call(arguments, 1); var bound = function() { var position = 0, length = boundArgs.length; var args = Array(length); for (var i = 0; i < length; i++) { args[i] = boundArgs[i] === _ ? arguments[positio

数据结构复习之C语言指针与结构体

数据结构指针复习: #include <stdio.h> void main() { int a[5] = {8, 2, 3, 4, 5}; // a[3] == *(3+a) printf("%d\n", *(3+a)); // a[3] 4 printf("*a其实就是a[0]: %d\n", *a); // 8 // 地址是连续的 printf("%p\n", a+1); printf("%p\n", a+2

jsp servlet基础复习 Part1

jsp和servlet的一些基础知识整理,用于备忘. 一.jsp与servlet的基本关系 1.jsp-->web容器-->servlet-->加载进容器的虚拟机执行-->输出执行结果给浏览器端 在这个过程,所有位于<%%>之外的值,都被认为是out.println()中的内容进行直接输出.详细理解看代码 <html> <% //例子说明:servlet和jsp的关系 boolean b = false; if(b){ %> 这里是内容一 <

shell脚本复习

最近公司工作量很小,就复习复习,看起了马哥的视频,感觉马哥讲课讲得特别细.这才是深入到系统的讲解,补充了很多我之前只是了解到皮毛的东西. shell编程:弱类型编程语言 强:变量在使用前,必须事先声明,甚至还需要初始化 NULL: 弱:变量用时声明,甚至不区分类型: 变量赋值:VAR_NAME=VALUE 编译器,解释器 编程语言:机器语言.汇编语言.高级语言 静态语言:编译型语言 强类型(变量) 关键字: 事先转换成可执行格式 C.  C++.JAVA.C# 动态语言:解释型语言 on the