一.内容简介
1.初始化与清理
2.访问权限
3.继承概要
4.final,static
5.练习一

二.内容梳理
1.初始化与清理

1.1构造函数
构造函数:用来初始化成员变量的函数,没有返回值,函数名与类名一致。
默认构造器:没有参数的构造函数。类中如果没有构造器,编译器会自动创建默认构造器。
构造函数的嵌套:可以在构造器中调用被重载的其他构造器,用this(parameter)调用。且只可以调用一个并放在起始处。
继承中的构造函数:构造函数不会被继承,子类的构造函数自动调用父类的默认构造函数,如果父类没有默认构造函数,则手动调用父类的构造函数。super(parameter).


1.2重载
重载:方法名相同,参数列表不同。与返回值无关,返回值无法区分,如果返回值不同,方法名相同,参数列表相同,编译出错。
重载的参数匹配:对应类型对应匹配。如果匹配不到:(常数与char)当做int用来匹配,其他的数据类型逐渐提升数据类型来匹配。
重写的返回类型必须一样或协变,否则编译错误。


1.3初始化
局部变量不初始化会报错,成员变量有默认的初始化。
初始化顺序:静态优于非静态,父类优先子类,变量优先于代码块优先于构造器。


静态数据的初始化:静态数据属于类,只占用一份存储区域,有标准的初值。静态数据的初始化时间是(静态数据被访问或对象被创建时)


1.4清理
垃圾回收机制只释放new的内存
类内定义finalize()方法,当垃圾回收发生时,finalize()被调用


(5)可变参数列表
例子:

点击(此处)折叠或打开

static void printArray(Object[] args){


}

printArray(1, 2, 3);

printArray((Object[])new integer[](1, 2, 3));


——构造函数使用可变参数列表会与默认构造函数弄混


2.访问权限

1.1

类内

包内(子类与非子类)

包外子类

包外非子类

Public

Protected

×

默认

×

×

private

×

×

×

1.2修饰类只有public和默认
3.继承概要
extends指明继承关系,未说明隐式继承Object.
向上转型:子类可以作为实参传入父类作为形参的方法。
this.value先找自己的成员,找不到去父类找的.
构造方法不会被继承

4.final,static
1.1final强调不变。static强调跟随类。
1.2final
类不希望被继承
方法不希望被重写
变量不希望被改变
final修饰的值不一定是常量还是变量,DJ反编译看。

1.3static
静态变量
静态方法:不能访问非静态成员方法和非静态成员变量
静态代码块
static不允许修饰局部变量;



5.练习一
(1)需求
——汽车销售人员销售汽车,款式有凯越,君威
——汽车与款式和编号,款式编号不可修改
——汽车销售人员有姓名
——销售人员按车型及数量销售

(2)代码
AutoType.java

点击(此处)折叠或打开

packagebiz;


publicclassAutoType{

publicstaticfinalStringKAI_YUE="凯越";

publicstaticfinalStringJUB_WEI="君威";

}



Auto.java

点击(此处)折叠或打开

packagebiz;


publicclassAuto{

privateStringautoType;// 款式

privateStringautoNumber;// 编号

privatebooleanisSelled;

Auto(StringautoType,StringautoNumber){

this.autoType=autoType;

this.autoNumber=autoNumber;

this.isSelled=false;// 默认未销售

}

publicStringgetAutoType(){

returnautoType;

}

publicStringgetAutoNumber(){

returnautoNumber;

}

publicbooleanisSelled(){

returnisSelled;

}

publicvoidsetSelled(booleanisSelled){

this.isSelled=isSelled;

}



}



seller.java

点击(此处)折叠或打开

packagebiz;


publicclassSeller{

privateStringname;


Seller(Stringname){

this.name=name;

}

/**

*

* @param autos 所用的车

* @param autoType 要销售的类型

* @param num 要销售的数量

*/

publicvoidsell(Auto[]autos,StringautoType,intnum){

//if(auto == null || autoType == null || num < 0) {

//

//}

intselledNum=0;

for(Auto curAuto:autos){

inti=0;

i++;

if(!curAuto.isSelled()&&curAuto.getAutoType().equals(autoType)

&&selledNum<num){

curAuto.setSelled(true);

System.out.println("准备售出-"+curAuto.getAutoType()+"-"

+curAuto.getAutoNumber());

selledNum++;

}

}

if(selledNum<num){

System.out.println("库存不够。"+"只可售出"+selledNum+"辆"+autoType);

}


}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicstaticvoidmain(String[]args){

Seller s1=newSeller("小明");

Auto auto1=newAuto(AutoType.JUB_WEI,"001");

Auto auto2=newAuto(AutoType.JUB_WEI,"002");

Auto[]autos=newAuto[2];

autos[]=auto1;

autos[1]=auto2;

s1.sell(autos,AutoType.JUB_WEI,3);

}


}



三.总结与随笔
(1)entity层:只有属性没有方法,主要用于数据跨层传输
(2)同一块作用域,局部变量优先于成员变量。
(3)char 类型可以' + ', ' - '
(4)方法传参:基本类型传值,函数内改变参数值对函数外无影响。引用类型传引用,函数内改变参数值对函数外有影响。
(5)删掉set方法,private修饰的成员变量只读