JAVA基础
第1章 JAVA语言概述
第2章 基本语法
第3章 数组
第4/5/6章 面向对象
- 类和类的成员:属性、方法、构造器、代码块和内部类
- 封装、继承和多态
- 关键字及其使用
Day 8 (P198-P218)
1、形参与实参
形参:方法定义时,声明的小括号内的参数
实参:方法调用时,实际传递给形参的数据
2、值传递机制
方法的形参传递机制:值传递
如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值
如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值
3、属性(成员变量)vs 局部变量
相同点:
1、定义变量的格式:数据类型 变量名=变量值
2、先声明后使用
3、变量都有其作用域
不同点:
1、在类中声明的位置不同,属性直接定义在类的{}内,局部变量声明在方法内,方法形参,代码块内,构造器 形参、构造器内部的变量
2、权限修饰符:
属性:可以在声明属性时,指明其权限,使用权限修饰符
常用的权限修饰符:private、public、缺省、protected
局部变量:不可以使用权限修饰符
3、默认初始化值
属性:类的属性,根据其类型都有默认初始化值
整型(byte、short、int、long):0
浮点型(float、double):0.0
字符型(char):0(或’’)
布尔型(boolean):false
引用数据类型(字符串、类、数组、接口):null
局部变量:没有默认初始化,在调用局部变量之前一定要显式化赋值
特别的,形参在调用时赋值即可
4、在内存中加载的位置
属性:加载到堆空间中
局部变量:加载到栈空间
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r1RExbh9-1639482821176)(C:Users86187DesktopMK笔记JAVA基础变量.png)]
Day 9 (P219-P241)
1、封装与隐藏
高内聚:类的内部数据操作细节自己完成,不允许外部干涉
低耦合:仅对外暴露少量的方法用于使用
2、权限修饰符
1、四种权限(从小到大):private,缺省(default),protected,public
修饰符
类内部
同一个包
不同包的子类
同一个工程
private
Yes
缺省
Yes
Yes
protected
Yes
Yes
Yes
public
Yes
Yes
Yes
Yes
2、4种权限可以用来修饰类及内部类的内部结构:属性、方法、构造器、内部类
修饰类只能用缺省、public
总结封装性:JAVA提供了4种权限修饰符来修饰类及类的内部结构,体现类及类的内部结构在被调用时的可见性的大小
3、构造器
1、构造器的作用:创建对象、初始化对象的属性
如果没有显式的定义类的构造器,则系统默认提供一个空参的构造器
一个类中定义的多个构造器彼此构成重载
2、属性赋值的选后顺序:①默认初始化 ②显式初始化 ③构造器中赋值 ④通过对象.方法或对象.属性赋值
3、只要造对象,就一定会使用构造器,这句话任何时候都是对的
4、UML类图
5、this关键字
1、方法的形参和类的属性同名时,必须显式使用this.变量的方式,表明此变量是属性,而非形参
2、this可以调用属性、方法和构造器
3、可以显式使用"this(形参列表)"方式,调用本类中指定的其他构造器
"this(形参列表)"必须声明在当前构造器的首行
构造器中不能使用 "this(形参列表)"的方式调用自己
构造器内部最多只能声明一个"this(形参列表)"调用其他构造器
6、package关键字的使用
1、使用package声明类或者接口所属的包,声明在源文件的首行
2、每“.”一次,就代表一层文件目录
3、同一个包下,不能命名同名的接口和类,不同包下可以声明同名的接口和类
7、MVC设计模式
将程序分成三个层次:视图模型层(view)、控制器层(controller)与数据模型层(model)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bcVUFlqt-1639482821181)(C:Users86187AppDataRoamingTypora ypora-user-imagesimage-20211112170536925.png)]
8、import关键字
1、在源文件中使用import导入指定包下的类和接口
2、如果使用的类或者接口时java.lang包下定义的,则可以省略import结构
如果使用的类或者接口是本包下定义的,则可以省略import结构
3、如果在源文件中使用了不同包下的同名类,则必须至少有一个类需要以全类名的方式显示
4、使用“xxx.*”的方式可以调用包中的所有结构,但如果是子包,仍需要显式调用(我的理解就是没有子包,都是并列的包)
5、import static:导入类或接口中的静态结构(意思就是导入属性或者方法),单import是导入类或接口
Day 10 (P242-P264)
1、项目2
1、动态数组,大小随时改变的写法
2、删除数组中的元素,后面的元素要覆盖前面的,不能直接指空
2、继承性
1、继承性的优点:
①减少代码冗余,提高代码复用性
②便于功能的扩展
2、继承的格式:classA extends classB{}
A:子类、派生类、subclass
B:父类、基类、超类、superclass
体现:一旦子类继承父类之后,子类就获取了父类中声明的属性和方法。
特别的,父类中声明为private的属性或者方法,仍然认为获取了父类中私有的结构,只是因为封装性的影响, 子类不能直接调用。子类继承父类之后,可以声明自己持有的属性或方法实现功能的扩展。
3、JAVA中关于继承的规定
①支持单继承和多层继承,不允许多重继承
一个子类只能有一个父类,一个父类可以派生多个子类
②直接父类和间接父类
③所有类都直接或间接继承于Object类
Day 11 (P265-P284)
1、方法重写(overwrite)
1、重写:子类继承父类以后,可以对父类中同名参数的方法进行覆盖操作
2、重写之后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,实际执行的是子类重写父类的方法
3、重写的规定:
方法的声明:权限修饰符 返回值类型 方法名(形参列表)throws 异常的类型{ 方法体 }
子类中叫重写的方法,父类中叫被重写的方法
①子类重写的方法的方法名和形参列表与父类被重写的方法名和形参列表相同
②子类重写的方法的权限修饰符不小于父类被重写方法的权限修饰符
特殊情况:子类不能重写父类中声明为private权限的方法
③返回值类型:
父类被重写的方法的返回值是void:子类重写的方法只能是void
父类被重写的方法的返回值是引用类型:子类重写的方法只能和父类相同或者为其子类
父类被重写的方法的返回值是基本类型:子类重写的方法只能是相同的基本类型
④子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型
⑤必须是非static
2、super关键字
1、super可以用来调用属性、方法和构造器。
2、当子类和父类中定义了同名的属性时,要想在子类中调用父类中声明的属性则必须显式使用super.属性。
当子类重写了父类中的方法之后,要在子类中调用父类中被重写的方法则必须显式使用super.属性。
3、super调用构造器
可以在子类中使用 super(形参列表)的方式调用父类中声明的指定的构造器,必须声明在首行
在类的构造器中 this( 形参列表 )和super(形参列表)只能二选一,在构造器没有显式声明时,默认调用父类中的空参构造器
3、多态性
1、父类的引用指向子类的对象——对象的多态性
2、多态的使用:虚拟方法的调用
有了对象的多态性之后,在编译期只能调用父类中声明的方法,编译期实际执行的是子类重写父类的方法
编译看左边,运行看右边
3、多态性使用前提:①有类的继承关系 ②要有方法的重写
4、对象的多态性只适用于方法不适用于属性(还是父类的属性)
5、多态性是一个运行时行为,要到运行的时候才知道具体是哪一个,而重载是编译时行为,编译的时候就知道具体是哪一个
Day 12 (P285-P311)
1、向下转型
1、有了对象的多态性之后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时只能使用父类中声明的属性和方法。使用强制类型转换符之后就可以使用子类的属性和方法,即向下转型。
2、自动类型提升和强制类型转化(有可能会转不成功
3、P289:向下转型的几个问题
(那几个练习还蛮重要的感觉)
2、instanceof关键字
1、a instanceof