JavaSE基础学习笔记
前言
在有一定Java知识的基础上对知识点进行查缺补漏,仅记录部分要点。
面对对象:以类的方式组织代码,以对象的方式封装数据。
一、变量
- 类变量
- 实例变量
- 局部变量

二、Scanner对象
next()和nextLine()的区别:

scanner.close();
用完就关
scanner.hasNextInt();//判断是否有整数
scanner 是属性
scanner.hasNextInt();//判断是否输入整数
scanner.hasNextFloat();//判断是否输入小数
三、for循环
增强for循环
for(声明语句 :表达式){
//代码句子
}
//遍历数组元素
for ( int x : numbers ){
System.out.println(x);
}
四、可变参数
方法传递的参数可以有多个值


输出结果:

五、静态方法和非静态方法
- 静态方法可以用类名调用
- 非静态方法用实例对象调用
被static修饰的内容会跟随类的加载而加载,所以静态化内容可以不用实例化就可以调用,同时,静态方法之间可以互相调用;非静态方法类实例化后才存在。
六、构造器
注意:定义了有参构造之后,想使用无参构造,需要显示地定义一个无参的构造。 默认类是有无参构造器的,如果定义了有参构造器,无参构造器就不存在了,所以需要重新定义。
七、Java内存分配
- 方法区:字节码文件加载时进入内存
- 栈内存:方法运行时所进入的内存,变量也在这里
- 堆内存:new出来的东西会在这块内存中开辟空间并产生地址
栈里存放地址值,指向堆中的地址,堆里存具体的值(比如属性值)

八、方法重写
非静态方法才能重写,子类不能继承父类的静态方法,只是共享(只有一份),可以直接使用。
1、子类继承父类静态方法:

输出结果:

2、子类继承父类非静态方法重写:

输出结果:和静态方法结果相反

九、多态
同一个方法可以根据发送对像的不同而采用多种不同的行为方法。
- 多态是方法的多态,属性没有多态
- 多态存在条件:继承关系,方法需要重写,父类引用指向子类
( person是student的父类)
//父类引用指向子类
Student s1 = new Student();
Person s2 = new Student();
//对象能执行哪些方法,主要看对象左边类型,和右边关系不大
s2.run(); //子类重写了父类的方法,执行了子类 的方法
s2.eat(); //eat()是子类的方法,父类没有,所以报错
注意:
1. static方法不能重写
2. final 常量不能重写
3. private 方法不能重写
十、instanceof 和类型转换
X instanceof Y 是否true取决于X和Y存不存在父子关系;

类型转换:
子类转父类,可能丢失一些自己的方法;
父类转子类,需要强制转换;

十一、抽象类
1. 不能new抽象类,只能靠子类去实现它:约束!
2. 抽象类中可以写普通的方法
3. 抽象方法必须在抽象类中
4. 抽象类不能创造对象,抽象方法没有方法体
十二、内部类
1、成员内部类

2、静态内部类
报错:因为内部类比属性先实例化(内部类比属性先出生,所以获取不到属性)

3、匿名内部类
格式:
new 类|抽象类名|接口名(){
重写方法;
};
十三、异常

Error异常:


捕获异常关键字:try、catch、finally、throws、throw
捕获多个异常,从小到大
e.printStackTrace(); //打印错误信息
public class Error {
public static void main(String[] args) {
int a = 1;
int b = 0;
try{ //try监控区域,监控此区域的代码是否出现异常
System.out.println(a/b);
}catch (ArithmeticException e){ //捕获异常
System.out.println("出现异常,变量b不能为0");
}finally { //处理善后工作,无论是否有异常都执行
System.out.println("finally");
}
}
}
if (b==0){
throw new ArithmeticException(); //主动抛出异常,一般在方法中使用
}
浙公网安备 33010602011771号