一、数组
将数组友好输出
import java.util.Arrays;
public class DemoPrintArrays{
public static void main(String[] args){
int[] a = new int[]{10, 20, 30};
System.out.println(Arrays.toString(a));
}
}
其中体现了面向对象的编程思想:找到JDK提供的Arrays类,该类中提供了将数组转换为指定格式字符串的
toString()方法
二、局部变量与成员变量
- 定义位置不同
- 作用范围不同
- 默认值不一样,如
public class DemoParam{
//成员变量
String name;
public void methodA(){
System.out.println(name); //输出null
}
public void methodB(){
//局部变量
int age;
System.out.println(age); //报错,age不会自动赋默认值
}
//方法的参数属于局部变量
public void methodC(int param){
//因为方法的参数在调用方法的时候,必然会被赋值的
System.out.println(param); //不会报错
}
}
- 内存位置不一样
局部变量:位于栈内存 成员变量:位于堆内存
- 生命周期不一样
局部变量:随着方法进栈而诞生,随着方法出栈而消失 成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失
- 当方法的局部变量和类的成员变量重名时,根据**“就近原则”,优先使用局部变量**
三、封装性
- 成员方法属于封装
- private修饰成员属性,提供
getXxx()及setXxx()方法属于封装
四、private修饰布尔属性的getXxx()方法
private修饰的布尔属性值的getXxx()方法为isXxx()
private boolean male;
public void setMale(boolean male){
this.male = male;
}
public boolean isMale(){
return male;
}
五、赋值问题
=赋值符号,如果右侧是引用类型,则是将对象地址赋值给左侧set()函数,如果右侧是引用类型,同样是将对象地址赋值给左侧
以上两种情况,如果右侧对象发生改变,则左侧对象同样发生改变
List的addAll()方法,是直接调用右侧对象中的元素
此种情况,如果右侧对象再次发生改变,左侧对象元素不会改变
六、关于相等判断
一)、==
1. 基本数据类型:
比较两个变量值是否相等
2. 引用数据类型:
1). String
比较两个变量物理地址是否相等
注意:
a. 用" "创建的字符串,只要顺序、大小写一致,均视为同一个对象,即共用同一个地址。
b. 用substring()等方法处理后的字符串,地址都会改变
c.直接打印对象显示的是hashCode(模拟地址),即使hashCode相等,并不代表物理地址相同
2). 其他引用类型
比较两个变量物理地址是否相等,hashCode()方法返回的不是物理地址
二)、equals()
1. 基本数据类型
比较两个变量值是否相等
注意:
只有基本数据类型的封装类才有此方法
2. 引用数据类型
1). String
比较两个变量值是否相等
注意:
String类重写了equals()方法,用于比较两个变量值是否相等
2). 其他引用类型
比较两个变量物理地址是否相等,hashCode()方法返回的不是物理地址
七、IDEA项目结构
Project包含Module
Module包含package
八、ArrayList
ArrayList<E>其中的代表泛型
注意: 泛型只能是引用类型,不能是基本类型,但可以是其封装类
- 对于
ArrayList集合来说,直接打印得到的不是地址值,而是内容,如果内容为空,得到的是空的中括号:[]
注意:直接打印数组得到的是地址值
九、静态代码块
1. 特点:
- 当第一次用到含静态代码块的类时,静态代码块执行唯一一次
- 静态代码块比构造方法先执行
2. 典型用途:
用来一次性对静态成员变量进行赋值
3. 代码:
public class Student{
static{
System.out.println("静态代码块执行了!);
}
public Student(){
System.out.println("构造方法执行了!");
}
}
public class DemoStatic{
public static void main(String[] args){
Student stu1 = new Student();
Student stu2 = new Student();
}
}
执行结果:
静态代码块执行了!
构造方法执行了!
构造方法执行了!
十、 接口
1. 如果是java7,接口中可定义:
1). 常量
2). 抽象方法
2.如果是java8,接口中可定义:
3). 默认方法
4). 静态方法
3.如果是java9,接口中可定义:
5).私有方法
1. 默认方法
默认方法可以有方法体:当接口升级时,如果没有默认方法这一功能,需要为每一个实现类重写接口方法,因此默认方法出现了,只需在接口中实现一次,其所有实现类都可以实现默认方法。
- 接口的默认方法,可以通过接口实现类对象,直接调用,那么一个实现类同时实现多个接口,如果这些接口中的默认方法冲突,可以通过实现类覆盖接口默认方法解决
- 接口的默认方法, 也可以被接口实现类进行覆盖重写
2. 静态方法
java8开始,接口当中允许定义静态方法
格式:
就是将abstract或者default替换成static,且有方法体
注意:
1. 不能通过接口实现类的对象来调用接口中的静态方法,因为实现的多个接口的静态方法,可能会产生冲突
2.通过接口名称,直接调用其中的静态方法
3. 私有方法
问题描述:
我们需要抽取一个共有方法,用来解决两个默认方法之间重复代码问题,但这个共有方法不应该让实现类使用,应该是私有化的。
解决方案:
java9开始,接口当中允许定义私有方法。
包含:1. 普通私有方法:解决多个默认方法之间重复代码问题及2. 静态私有方法:解决多个静态方法之间重复代码问题
4. 成员变量
接口当中也可以定义“成员变量”,但是必须是public static final从效果上看,这其实就是接口的【常量】
public:公有
static:与对象无关
final:不可变
注意事项:
- 接口当中的常量,可以省略
public static final,不写也是此种修饰符- 接口当中的常量必须进行赋值
5.优先级问题
当一个类如果直接父类当中的方法,和接口当中的默认方法产生冲突,优先使用父类的方法