this
在Java基础中,this关键字是一个重要的概念,使用this关键字可以完成以下的操作:
·调用类中的属性
·调用类中的方法或构造方法
- 在一个构造方法中,调用另一个构造方法时,调用的代码 必须编写在构造方法的第一行。
·表示当前对象
static
概述:
static表示“静态”的意思,可以用来修饰乘员变量和成员方法(后续还会学习 静态代码块 和 静态内部类)
static的主要作用在于创建独立于具体对象的域变量或者方法
简单理解:
被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问,
并且不会因为对象的多次创建 而在内存中建立多份数据
重点:
1. 静态成员 在类加载时加载并初始化
2. 无论一个类存在多少个对象,静态的属性,永远在内存中只有一份(可以理解为所有对象公用)
3. 在访问时:静态不能访问非静态,非静态可以访问静态!
代码块
普通代码块:
在执行的流程中 出现的 代码块, 我们称其为普通代码块。
构造代码块:
在类中的成员代码块, 我们称其为构造代码块,在每次对象创建时执行,执行在构造方法之前。
静态代码块:
在类中使用static修饰的成员代码块,我们称其为静态代码块,在类加载时执行。每次程序启动到关闭,只会执行一次的代码块。
同步代码块:
在后续多线程技术中学习
面试题: 构造方法 与 构造代码块 以及静态代码块的执行顺序:
静态代码块 ---> 构造代码块 ---> 构造方法
* 继承:
* 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
* 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为
* @author 22529
* 格式:
* class 父类{
* }
*
* class 子类 extends 父类{
* }
* super:
* 通过super , 可以访问父类构造方法
调用super构造方法的代码,必须要写在子类构造方法的第一行
* 通过super , 可以访问父类的属性
* 通过super , 可以访问父类的方法
* 面试题:
* Java中重载(overload) 与重写(override)的区别
* 1.发生的位置
* 重载:一个类中
* 重写:子父类中
* 2.参数列表限制
* 重载:必须不同的
* 重写:必须相同的
* 3.返回值类型
* 重载:与返回值类型无关
* 重写:返回值类型必须一致
* 4.访问权限
* 重载:与访问权限无关
* 重写:子类的方法权限 必须不能小于 父类的方法权限
* 5.异常处理、
* 重载:与异常无关
* 重写:子类异常范围可以更小,但是不能抛出新的异常
* final关键字
* final用于修饰属性、变量
* 变量成为了常量,无法对其再次进行赋值
* final修饰的局部变量,只能赋值一次(可以先声明后赋值)
* final修饰的是成员属性,必须在声明时赋值。
* 全局常量(public static final)
*
* 常量的命名规范:
* 由1或多个单词组成,单词与单词之间必须用下划线隔开,单词中所有字母大写
* 例如:SQL_INSERT
*
* final用于修饰类:
* final修饰的类,不可以被继承
* final用于修饰方法
* final修饰的方法,不能被子类重写
在抽象类的使用中有几个原则:
· 抽象类本身是不能直接进行实例化操作的,即:不能直接使用关键字new完成。
· 一个抽象类必须被子类所继承,被继承的子类(如果不是抽象类)则必须覆写(重写)抽象类中的全 部抽象方法。
抽象类和普通类的区别:
1、抽象类必须用public或procted 修饰(如果为private修饰,那么子类则无法继承,也就无法实现其 抽象方法)。默认缺省为 public
2、抽象类不可以使用new关键字创建对象, 但是在子类创建对象时, 抽象父类也会被JVM实例化。
3、如果一个子类继承抽象类,那么必须实现其所有的抽象方法。如果有未实现的抽象方法,那么子类也必 须定义为 abstract类
接口和抽象类的区别:
1、抽象类要被子类继承,接口要被类实现。
2、接口只能声明抽象方法,抽象类中可以声明抽象方法,也可以写非抽象方法。
3、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
4、抽象类使用继承来使用, 无法多继承。 接口使用实现来使用, 可以多实现
5、抽象类中可以包含static方法 ,但是接口中不允许(静态方法不能被子类重写,因此接口中不能声明 静态方法)
6、接口不能有构造方法,但是抽象类可以有
instance of
作用: 判断某个对象是否是指定类的实例,则可以使用instanceof关键字
格式: 实例化对象 instanceof 类 //此操作返回boolean类型的数据
注意:
在使用匿名内部类的过程中,我们需要注意如下几点:
1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能 继承一个类或者实现一个接口。
2、匿名内部类中是不能定义构造函数的。
3、匿名内部类中不能存在任何的静态成员变量和静态方法。
4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。 6、只能访问final型的局部变量
异常是否抛出去,应该站在哪个角度思考?
如果是因为传参导致异常,应该通过throws将异常抛出去
唯一不执行finally的代码:System
public class Demo {
public static void main(String[] args) {
haha();
}
public static void haha(){
try {
int x = 10;
int y = 0;
System.out.println(x/y);
}catch(Exception e){
//退出JVM
System.out.println("出现了异常");
System.exit(0);
}finally{
System.out.println("你好");
}
}
}