成员变量与局部变量:
1.在类中的不同位置:成员变量在类中方法的外面,局部变量在方法或者代码块中,或者方法的声明上
2.在内存中的位置不同:成员变量在堆中(方法区中的静态区),局部变量在栈中
3.生命周期不同:随着对象的创建而存在,随着对象的消失而消失;局部变量随着方法的调用或者代码块的执行而存在,随着方法的调用完毕或者代码块的执行完毕而消失
4.初始值:成员变量有默认初始值;局部变量:没有默认初始值,使用前需要赋值
在使用变量时遵循就近原则,访问成员变量使用this关键字(调用对象本身)
一个类可以创建 N 个对象,成员变量只属于当前的对象(只属于对象,不属于类),只有通
过对象才可以访问成员变量,通过类不能直接访问成员变量
在JVM中,内存分为堆内存跟栈内存。他们二者的区别是: 当我们创建一个对象(new Object)时,就会调用对象的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用。还需注意的一点,基本数据类型是存储在栈内存中。
构造函数(构造方法,构造器):构造方法主要用来创建类的实例化对象,可以完成创建实例化对象的初始化工作,类的构造方法和普通方法一样可以进行重载
构造方法不具有任何返回值类型,既没有返回值,关键字void不能加入,加入后就不是构造方法了而是普通方法
`
this关键字指的是当前调用的对象,使用在:当局部变量和成员变量重名的时候使用this调用成员变量
通过this调用另一个构造方法
this 只能用在构造函数和成员方法内部,static 标识的方法里是不能使用 this 的
基本类型转换:在Java中基本类型可以相互转换,boolean类型比较特殊不可以转换成其他类型
转换分为默认转换和强制转换:
默认(隐式)转换:容量小的类型会转换为容量大的类型
byte-->short-->char-->int-->long-->float-->double
byte short char 之间计算不会互相转换,首先转换成int
强制转换:
将大容量转换成小容量的类型,需要强制转换
只要不超出范围可以将整形值直接赋给byte,short,char
循环三大要素:循环条件 循环操作 避免死循环
for循环通常用于循环次数确定
取余% 一个表达式的值除以另一个表达式的值 返回余数。
/取模
`
局部变量使用时必须赋值,成员变量会默认初始化,属于某一个对象,不属于类
类:类是相同事物的统称,也可以看做一个模板
对象:对象是实实在在的存在,是由类生成出来的,一个类可以生成无数个对象,对象也称为实例
堆区:存放new出来的对象,此对象有垃圾收集器收集
方法的返回值 方法的参数 方法中定义的变量都是局部变量
方法的重载(overload):条件:方法名称相同
方法参数类型,个数,顺序至少一个不同
方法的返回类型可以不同,因为方法重载和返回类型没有任何关系
方法重载只能出现在同一个类
方法覆盖(override)的条件:必须要有继承的关系
覆盖只能出现在子类
在子类被覆盖的方法中,必须和父类中的方法完全一样,也就是方法名, 返回值,参数列表完全一样
子类方法的访问权限不能小于父类的访问权限
子类方法不能抛出比父类更多的异常
父类的静态方法不能被子类覆盖
父类的私有方法不能覆盖
构造方法不存在覆盖的概念,构造方法可以重载
多态三要素:1.继承2.复写3.父类的引用指向子类对象
== 比较基本类型和引用类型 基本类型比较的是值,引用类型比较的是内存地址
equals 比较对象是否相等
java体系抛出异常就是一个对象
在方法定义处采用throws声明异常,可以声明非受控异常和受控异常,如果声明的异常为受控异常,那么调用方法必须处理此异常
java体系抛出异常就是一个对象
在方法定义处采用throws声明异常,可以声明非受控异常和受控异常,如果声明的异常为受控异常,那么调用方法必须处理此异常
finally 关键字中的代码块在任何情况下都会执行,通常在finally里面关闭一些打开的资源
final
用于修饰类、成员变量和成员方法。final修饰的类,不能被继承(String、StrngBuilder、StringBuffer、Math,不可变类),其中所有的方法都不能被重写,所有不能同时用abstract和final修饰(abstract修饰的是抽象类,抽象类是用于被子类继承的,和final起相反的作用);final修饰的方法不能被重写,但是子类可以用父类中final修饰的方法;final修饰的成员变量是不可变的,如果成员变量是基本数据类型,初始化之后成员变量的值不能被改变,如果成员变量是引用类型,那么它只能指向初始化时指向的那个对象,不能再指向别的对象,但是对象中的内容是允许改变的。
finally
finally是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获都会被执行。try块中的内容是在无异常时执行到结束。catch块中的内容,是在try块内容发生catch所声明的异常时,跳转到catch块中执行。finally块则是无论异常是否发生都会执行finally块的内容,所以在代码逻辑中有需要无论发生什么都必须执行的代码,可以放在finally块中。
finalize
finalize是方法名,java技术允许使用finalize()方法在垃圾收集器将对象从内存中清楚出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的,它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
try:中包含可能产生异常的代码块,当try中的代码出现异常,异常下面的代码不会执行,跳转到catch中,如果没有异常不会跳转到catch中
throws与throw的区别:
throw是语句抛出一个异常,throws是方法抛出一个异常;
throw不能单独使用,不是和try-catch-finally配套使用,就是与throws配套使用,但throws可以单独使用,然后再由异常处理的方法捕获。