Java学习随笔 Java基础知识 2020-1-8
预览和回顾
- 可变参数的作用和特点
- 方法重载和方法重写
- ==和equals
- static关键字
可变参数
-
可变参数的作用和特点
1.可变参数的形式 ...
2.可变参数只能是方法的形参
3.可变参数对应的实参可以0,1,2.....个,也可以是一个数组
4.在可变参数的方法中,将可变参数当做数组来处理
5.可变参数最多有一个,只能是最后一个
6.可变参数好处:方便 简单 减少重载方法的数量
7.如果定义了可变参数的方法,不允许同时定义相同类型数组参数的方法 -
数组做形参和可变参数做形参联系和区别
联系:
1.实参都可以是数组;
2.方法体中,可变参数当做数组来处理
区别:
1.个数不同 可变参数只能有一个 数组参数可以多个
2.位置不同 可变参数只能是最后一个 数组参数位置任意
3.实参不同 可变参数实参可以0,1,2.....个,也可以是一个数组,数组的实参只能是数组
方法重载和方法重写(覆盖)的区别
| 英文 | 位置不同 | 作用不同 | |
|---|---|---|---|
| 重载 | overload | 同一个类中 | 在一个类里面为一种行为提供多种实现方式并提高可读性 |
| 重写 | override | 子类和父类间 | 父类方法无法满足子类的要求,子类通过方法重写满足要求 |
| 修饰符 | 返回值 | 方法名 | 参数 | |
|---|---|---|---|---|
| 重载 | 无关 | 无关 | 相同 | 不同 |
| 重写 | 大于等于 | 小于等于 | 相同 | 相同 |
==和equals
==和equals的区别和联系
==:
a) 基本类型,比较的是值
b) 引用类型,比较的是地址
c) 不能比较没有父子关系的两个对象
equals()
a) 系统类一般已经覆盖了equals(),比较的是内容。
b) 用户自定义类如果没有覆盖equals(),将调用父类的equals(比如是Object),而Object的equals的比较是地址(return (this == obj);)
c) 用户自定义类需要覆盖父类的equals()
注意:Object的==和equals比较的都是地址,作用相同
Integer类比较的问题
在java中,用【Integer a = 数字】来赋值的时候Integer这个类调用的是public static Integer valueOf(int i)这个方法。
而valueOf()函数的源码为:
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high) return IntegerCache.cache[i + 128]; else return new Integer(i); }
可以发现对传入参数i做了一个判断。在-128<=i<=127的时候是直接用的int原始数据类型,而超出了这个范围则是new了一个对象。Byte Short Long 等有同样现象,使用.equals()来比较。
static关键字
static关键字的作用(修饰变量、方法、代码块)
static可以修饰变量、方法、代码块和内部类
static属性属于这个类所有,即由该类创建的所有对象共享同一个static属性。可以对象创建后通过对象名.属性名和类名.属性名两种方式来访问。也可以在没有创建任何对象之前通过类名.属性名的方式来访问。
static变量和非static变量的区别
1.在内存中份数不同
不管有多少个对象,static变量只有1份。对于每个对象,实例变量都会有单独的一份
static变量是属于整个类的,也称为类变量。而非静态变量是属于对象的,也称为实例变量
2.在内存中存放的位置不同
静态变量存在方法区中
实例变量存在堆内存中
3.访问的方式不同
实例变量: 对象名.变量名 stu1.name="a";
静态变量:对象名.变量名 stu1.name="b"; 不推荐如此使用
类名.变量名 Student.name="c"; 推荐使用
4.在内存中分配空间的时间不同
实例变量:创建对象的时候才分配了空间。
静态变量:第一次使用类的时候
static方法
静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
static代码块
当类被第一次使用时(可能是调用static属性和方法,或者创建其对象)执行静态代码块,且只被执行一次,主要作用是实现static属性的初始化。
static内部类
属于整个外部类,而不是属于外部类的每个对象。不能访问外部类的非静态成员(变量或者方法),.可以访问外部类的静态成员

浙公网安备 33010602011771号