JAVA的构造体设空白值_JAVA_SE复习(OOP1)

面向对象编程(一)

一、继承

1.在类图表示中,使用一个分为三块的矩形表示一个类。矩形的第一块表示类名,第二块描述这个类的属性及属性的数据类型,第三块描述这个类的操作,也就是方法以及返回类型。

dca909add175dfb8a100e3906ece448d.png

2.访问控制

修饰符类自身同包内子类所有其他类

privateYes

defaultYesYes

protectedYesYesYes

publicYesYesYesYes

3.覆盖方法的注意点:

方法覆盖必须保证方法名、返回类型、参数列表都必须相同。另外,子类中的覆盖方法的可访问范围不能比其在父类中被覆盖的方法的访问范围小

4.方法的重载必须注意:

Ø方法名必须相同

如果方法名都不同,重载方法就根本无从谈起。

Ø参数列表必须不同(参数的类型或者个数不同即可)

调用语句的参数列表之间的差别必须足够清晰。例如println(inti)println(int k)就完全不是重载,而是重复了,虽然参数名称不同,但参数列表的类型是相同的。

返回类型可以不同,也可以相同

5.可变参数的方法:

public doubleavg(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(intid, String name,doublesalary,doublebonus)

2.1绑定构造器参数id=1, name=“Burns”, salary=10000, bonus=8000

2.2没有显式的this()调用

2.3调用Employee(intid, String name,doublesalary)的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 =newManager(); //也是合法的

但是这个时候使用变量m,只能访问Employee中的属性和调用Employee类中声明的方法,而Manager部分的属性和方法被隐藏。例如:

m.setBonus(8000); //错误

2.虚方法调用:

如果出现如下情况:

Employee e =newManager();

e.getDetails();

事实上虽然声明的e是Employee类型,但实际上实例化出来的是Manager对象。也就是说,获得的是运行时与变量引用的对象相关的行为而不是编译时的变量类型决定的。这一行为通常称为虚拟方法调用。上面的示例中,执行的e.getDetails()源于对象的真实类型Manager,它将执行Manager的getDetails()方法。

3.多态参数

多态参数是一个可以接受普通对象的方法参数,这种参数除了可以接收某个类的对象外还能接收该类任意子类的对象。

4.异类集合

Employee[] emp =newEmployee[3];

emp[0] =newEmployee(1, “Homer”, 6000);

emp[1] =newManager(2, “Jam”, 8000);

emp[2] =newProgrammer(3, “Fred”, 6000);

5.Wrapper类,装箱和拆箱

a.各基本数据类型对应的Wrapper类:

基本Wrapper默认值

byte     Byte0

short    Short0

int      integer     0

long     Long        0L

double   Double      0.0D

float    Float       0.0F

char     character‘\u0000’

BooleanBoolean     false

拆包、装包:

intmyInt = 100;

Integer wInt =newInteger(myInt);

intp2 = wInt.intValue();

//把基本数据转换成字符串引用类型

String s = String.valueOf(100);

intx = Integer.valueOf(s).intValue();

或者

//取得字符串引用数据类型的数值

intx = Integer.parseInt(s);

三、枚举

public enumSeason

{

SPRING("Spring"),

SUMMER("Summer"),

FALL("Fall"),

WINTER("Winter");

privateStringname;

privateSeason(String name)//必须标记为private,只在枚举类内部使用

{

this.name= name;

}

publicString getName()

{

returnname;

}

public voidsetName(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 运算符

XYX 后跟Y

X|YX 或Y

(X)X,作为捕获组

*/

2.Integernum4= 128;//autoBoxing 自动打包

Integernum5= 128;

System.out.println(num4==num5);//false

因为//-128~127 cache赋值     之外的为newXXX(value)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值