九、数组
1、数组简化格式
数据类型 数组名称【】= {值,值,值。。。}
2、数组完整格式
数据类型 数组名称 【】= new 数据类型【长度】{值,值,值。。。}
or 数据类型【】 数组名称 = new 数据类型【长度】{值,值,值。。。}
3、
int data【】= new int 【3】
int temp [] = data 此时data表示的是地址
4、数组与方法参数的传递
主方法作为程序的起点存在,所以说主方法代码不能很多,所以用方法进行封装
.数组拷贝
system.arrycoppy(原数组名称,原数组开始索引,目标数组名称,目标数组拷贝开始索引,长度)
数组排序
Arrays.sort(数组名称)
5.对象数组
类名称 对象数组名称【】 = new 类名称【长度】
对象数组中的每个数据都就需要分别实例化
Book book [0] = new Book(属性)
或
Book books【】= new Book[]{
new Book(属性),
new Book(属性),
new Book(属性),
}
十、十一String类
1、两种实例化方法
String str = new String(“字符串”)不要使用这种
String str = “字符串”
2、String类的比较 如果用的是== 比较的是地址而不是字符串的数值
stra.equals(strb) 这个方法比较的字符串的数值
3、共享设计模式 对象池,同一个String 只需要一个堆内存空间
4.字符串内容不可变,如果更改,是利用了引用关系的变化,更改了指向的堆内存空间,从而产生垃圾空间。
5.String有很多方法,可以查文档,也可以百度哈哈 不愿看了以后补上
十二 this关键字(Demo1)
1.调用属性 加上this就可以表示的是类中的属性,而且必须要加
2.调用方法
this调用本类的普通方法 this可加可不加(最好加上)
this调用构造方法 this()调用无参的构造 this(参数)调用单参构造 而且this()必须要放在方法首行
至少保留一个构造没有使用this()调用的构造
this(1,临时工,财务部)
this(enumb ,临时工,财务部)
this (enumb,ecareer,edepartment)
这样取消了重复的代码
3.表示当前对象
this就是当前调用方法的对象
十三、引用传递
内存空间的指向问题。
十四、简单java类的实战
实战一:
一个雇员有一个部门(设置一个属性dept)
一个部门有多个雇员,(添加属性数组)
财务部,设置三个雇员
设置领导关系,mgr属性
设置雇员和部门的关系
设置部门和雇员关系new Emp【】{ea,eb,ec}
操作、
根据雇员找到领导信息和部门信息
根据部门找到所有雇员信息及其领导信息
实战二:一对多关系
第一题 省份和城市
从增删改查 找不足
增加 每次city【】数组每次都要修改
删除 随意删除再找到位置很麻烦
查询 需要遍历数组
第二题 商品类型 子类型
按照步骤设计表关系
第一步 设置基本字段 、(写出简单java类)
第二步 关系设计
第三部 数据设计和数据的取出
实战三 多对多关系 管理员和角色
十六 static 关键字
static定义属性
1.不同的对象的相同的属性占用不同的存储空间
在属性定义之前加入 static 则属性变成公共属性
此时公共属性存在 全局数据区
2.公共属性也可以直接用类名来调用
即static属性不需要实例化就可以调用
如果需要描述共享信息的时候才使用static
static定义方法
1.static方法无法调用非static属性和方法 ,无法使用this
2.非static方法可以访问static属性和方法
原因就是 非static必须要进行实例化,static不需要
3.这就是主方法必须调用的方法必须要加static 的原因 (注意不是类中的)
如果调用的话,我们就需要这样调用 class名称.非static方法
4.如果一个类中没有属性只有方法,那么可以将所有方法设置为static 这样就不需要进行实例化了
5.但是写类的时候优先考虑的是非static方法和属性
十七 代码块 (没看,说是了解即可)
十八 内部类 (没看)
十九 继承
1.继承的实现
继承性的最大特征是为了解决代码的重用问题
class 子类(派生类) extends 父类 (超类 基类){ }
子类可以继承父类的属性定义(直接不需要写了)
子类可以扩充属性(重新定义)
2.继承的限制
(1)java不允许多重继承 (A extends B,C 这是错误的)
但是允许多层继承(B extends C , A extends B 最好不要超过三层)
(2)子类在继承父类的时候,严格来说会继承所有操作,但是对于private 属性,子类不能在类中进行操作,但是可以在主方法中实例化的时候间接使用。
(3)子类会默认调用父类的无参构造,在实例化子类对象时,会先实例化父类对象,在实例化子类对象。
super(),如果父类没有无参方法。需要用super()来调用有参方法。而且需要放在子类方法中的首行。
而且 super不能和this()同时出现
二十 覆写 子类与父类方法或属性重名
1.方法的覆写
(1)当发生了覆写之后,此时会调用实例化子类中覆写的方法
(2)如果子类中和父类中的方法名字相同,那么返回值也要相同
(3)进行覆写的时候,子类的覆写的方法不能有比父类更严格(低)的访问控制权限 publi>default(啥都不写)>private
(4)当父类定义的方法无法满足子类的功能的时候,此时进行覆写
(5)如果父类的方法调用的是private,那么子类覆写此private方法的时候,执行的是父类中的private。
(6)super.方法,这样调用的是父类中被覆写的方法
而使用this,方法,首先调用本类的方法,如果本类中没有,则查找父类中的同名方法
重载和覆写的区别:
返回值 重载可以不同,但是一般都相同
发生范围 重载在一个类中 覆写在子类和父类之中
定义 方法名称,参数的类型和个数不同 方法名称,参数的类型、个数,返回值相同
权限 无权限限制 不能比父类更严格
2.属性的覆写
类中的属性必须封装必须用private修饰,所以这种覆写没有意义
二十三
final关键字:终结器
1.final 类不能有子类
2.final定义的方法不能被覆写
3.final定义的变量变成了常量
public final static 全局变量
多态性
依赖于方法的覆写
方法的多态性:包括方法的重载和方法的覆写
对象的多态性:发生在继承关系中 自雷和父类的转换关系
向上转型 自动完成 父类 父类对象 = new 子类 (看new 的是什么类,调用的就是哪个类里的) A a = new B()
向下转型 强制完成 子类 子类对象 = (子类)父类实例
向上转型只能保证父类调用子类覆写的方法,无法调用子类定义的特殊方法,只有使用向下转型才能调用子类的特殊方法。
通常使用向上转型 因为子类知道父类是谁而父类不知道子类,此时可以建立子类父类的联系,以统一参数类型
对象 instanceof 类 返回布尔型 判断是否是此类的实例
二十四 抽象类
1.定义
抽象类是指 在普通类的结构里面增加抽象方法的组成部分
所有普通方法上有方法体即大括号 而抽象类没有方法体而且需要abstract来修饰
又有抽象方法一定属于抽象类
2.抽象类的无法实例化