数组
局部变量是没有默认值的,但是数组是有默认值的,因为数组本身其实是对象。
如下可以看出各类型的数组的默认值:
冒泡排序
外层for循环控制比较多少趟数,
内存for循环控制每趟的排序。
二维数组
空指针异常:
方法
主方法
访问修饰符可以不写,除了public static,还有protected和private.
数组作为方法参数
、
方法重载
如下,方法
基本数据类型作为方法参数传值的时候,是不会影响主方法中的值的。而如上,数组对象作为方法参数进行传值,是会影响主方法中的值的。
可变参数列表
因为如下两种定义是等价的关系,所以报错了。
可变参数列表作为方法参数的重载问题
以上是如何生成文档注释的内容。
方法的调试
F6是一步一步往下执行。
总结
数组移位与统计
1.从键盘接收数据
我们必须要有东西去接收字符串,不然会如上报错。
所以我们改动如下;
2.数组元素的显示
数组元素的显示:
在指定位置处插入数据
能被3整除的方法
提示信息方法的实现
第三章:
JAVA基础进阶-面向对象之封装与继承
创建类
一般来说,如果一个变量没有被赋值,没有被初始化,它是不能被输出的。
而类里面的属性,是会给默认值的,所以即便没有被初始化,也是可以被输出的,输出的结果就是默认值。
单一职责原则
CatTest是如何找到Cat的?
主方法运行时,先在它所在的类中找,如果找不到,就向上找同一个包里的。如下,就是找同一个 com.imooc.animal包中的。
一个类中,承担的功能越多,那么它的交融和耦合性越高,复用性越差。
new关键字
声明对象是在栈里,而实例化对象是在堆里。
JAVA面向对象–构造方法介绍
无参构造方法
构造方法-带参构造方法
this关键字:
总结面向对象
如果希望在一个类的多个重载的构造函数中相互进行调用,那么就只能通过this的方式进行调用。
如下,可以在单参的构造方法中,通过this(),调用其同一个类当中的无参的构造方法。
JAVA封装
封装的实现
封装的代码的实现
标题
封装的代码实现
使用包进行类管理-创建包
使用包进行类管理-导入包
如果多个类有名称相同,如上的cat,那么我们同时引入这些类,调用Cat类,那么到底我们调用的是哪个类呢?
static关键字
我们将price改成static的:
结果发现价格都是150
因为无论实例化多少类,静态数据,它们都是共用同一块存储空间的。
静态成员,一直到这个类不再有任何对象使用,才会被销毁,静态成员才会被释放。
static关键字
我们可以有静态的属性,静态的方法,但是静态的类不存在。
静态成员,包括类中的静态方法和静态属性。
static关键字(下)
代码块中的变量应用
每个花括号,形成一个存储空间,所以如下run方法,内部有两个存储空间。
我们知道在一个作用域范围内,是不允许出现两个重名变量的。而花括号,创建了独立的存储空间,独立的作用域,就可以在各个代码块内定义重名变量了。
当代码块的大括号结束后,它里面的变量就被回收了。所以我们在两个代码块中间使用的变量,是无法被访问的。
run方法中定义的整型变量,它的作用范围就是从定义的位置开始,到整个方法结束。
而在这整个范围内,我们是不允许存在同名变量的,所以代码块里定义的同名变量都报错了。
总结
综合案例-学生信息管理
Java基础进阶
继承(上)
继承的实现
继承-方法的重写
父类有eat方法,但是子类也想有自己的eat方法,且和父类的eat方法不一样。
我们可以用方法的重写。
我们回顾下方法的重载:
那么关于方法的重写,规则如下:
鼠标悬浮,可以看出来,被调用的是父类还是子类中的方法。
- 方法重写
- 1、有继承关系的子类中
- 2、方法名相同,参数列表相同(参数顺序、个数、类型),方法返回值相同
- 3、访问修饰符,访问范围需要大于等于父类的访问范围
- 4、与方法的参数名无关
- 5、当方法返回值是void或基本数据类型时,必须相同;当返回值是引用类型时,可以是父类或其子类
继承-访问修饰符
/*
* private:只允许在本类中进行访问
* public:允许在任意位置访问
* protected:允许在当前类、同包子类/非子类、跨包子类调用;跨包非子类不允许
* 默认:允许在当前类、同包子类/非子类调用;跨包子类/非子类不允许调用
*/
如下cat是animal的跨包子类:
如下test是animal的跨包非子类:
如下,species品种,就是默认的类型
继承-访问修饰符对方法重写的影响
如下,子类中重写的方法是protected,那么范围比父类小,就会有问题。
super关键字的使用
如果父类Animal和子类有同样的方法,那么在子类dog中调用的这个方法,实际上调用的是子类的方法。
如果我们希望子类中调用的是父类中的eat方法的话,我们可以使用super来调用父类中的eat方法。但是父类的构造方法不允许被继承,不允许被重写。
java基础36问
如果是父类允许子类派生的属性,那么我们也可以用super来调用。
继承的初始化顺序
如下,构造对象就包括属性,构造方法和构造代码块。
super关键字(下)
作为子类对象在构造的时候,它是否有权力去选择调用什么形式的父类构造对象呢?也就是说,我去实例化子类对象的时候,能否自行的决定调用父类的哪个构造方法呢?
super&this
this()会优先执行同一个类当中的无参构造。
this()和super()都必须放在第一行。
java继承(上)总结
Java继承(下)
Object类
jdk1.8对应的是Java SE 8
Java里object类是存放在java.lang这个包里的
如下,因为String是有重写了父类中object的equals方法,所以它实际上比较的是字符串的内容。
Object类介绍(中)
将参数obj强转为animal类型。
Object类介绍(下)
如上,我们重写toString方法,调用One的toString方法,实际上是调用的子类的重写的toString方法。
final关键字
final关键字的使用(上)
当一个类不希望有子类继承,不希望方法被重写,不希望变量值被修改的时候,我们就可以使用final关键字。
父类里的方法添加了final,子类就不能重写父类里的这个方法了。
final关键字的使用(下)
如下,final修饰的变量,是不允许重新赋值的,所以如下 animal处报错。
不允许进行引用地址的修订。但是这个对象里的属性值,是可以根据我们的需要随时进行修改的。
static和final同时修饰的变量,是一个静态的不允许被修订的成员。
注解
重写方法的快捷键:
@Override是注解
注解的种类:
@Override就是源码注解:
元注解:是注解的注解,也就是对注解进行标注。
比如@target就是元注解,用于限定这个注解可以用于什么地方。
标题
注解(下)
如上,父类中有个静态方法,Animal create()
如下,子类中也有个同名的静态方法,Dog create()
编译器会认为,子类将父类中同名的静态方法进行了隐藏,而不是重写。
如果创建的是Dog对象,那么调用的是Dog中的create方法。如果创建的是Animal对象,那么调用的是Animal中的create方法。
总结
设计模式
单例模式概述
饿汉式代码实现
不管你是否使用,实例先给你创建出来。
如下,发现获取的实例引用是完全相同的。
懒汉式代码实现
饿汉式pk懒汉式
懒汉式:在该类创建后,如果一直不去取它的对象实例,也不会造成内存空间的浪费。所以它是一种用时间换空间的操作方式。
单例模式以及其应用场景
JAVA多态
多种形态
按F1快捷键,在不同的环境下,弹出不同的帮助文档。
多态的实现
案例场景描述以及实体类编写
多态-向上转型
如下,虽然都是吃的行为,也同样都是Animal类型的引用,但是因为具体程序运行时,实例化的对象类型不同,那么它的执行的具体行为能力是不一样的。这就是JAVA中的多态。
把子类对象转型成父类对象,这就叫向上转型。
如下Animal父类的引用,指向一个具体的子类Cat类型的实例,这种我们称之为向上转型。
多态-向下转型
instanceOf
判断左边的对象是否是右边类型的实例
类型转换
类型总结
抽象类
总结
多态(下)
如下,手机和相机,都可以拍照,那么我们可以定义一个具有照相能力的接口。让手机和相机分别去实现这个接口。
由此,我们通过接口,来描述不同的类型有相似的行为特征。
接口成员: 默认方法&静态方法
如下,INet接口中,有两个抽象方法:network和connection
Smartwatch去实现INet,其实用不上connection方法,但是不得不去Override定义connection方法。要不然就让Smartwatch成为抽象类,那么在实现INet的时候,就不用去定义connection方法了。
在JDK1.8之后,我们可以在接口中定义默认方法,这样实现这个接口的类中,就不用去定义有默认方法的方法了。
如下,我们在接口中定义默认方法和静态方法:
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/3716.html