final的三个作用:
a.被final关键字修饰的类:
表示该类不可被继承
public final class A {}//修饰符final修饰的A类无法被继承,这里会报错public class B extends A{}
如在java中的String类就是被final修饰的类,任何类都不能继承String类
b.被final关键字修饰的方法:
表示该方法不能被重写
public class A { public final void test(){//父类final方法 }}public class B extends A{ public void test(){//此方法无法被重写会报错 }}
当父类中的某些方法不想被子类重写时就可以用final方法修饰
c.被final关键字修饰的属性:
使局部变量变成常量,局部变量只能赋值一次,一但赋值就不能改变
final int x = 10;x = 20;//这里是错误的写法final int a;a = 20;//这里是正确的写法System.out.println(a);
使全局变量变成常量,必须在初始定义时就赋值,否则会报错
public final int a=0;//所有对象的值都一样
2.static关键字:a.修饰方法或属性:
将属性和方法从对象级元素变成类级元素,用类名.属性或方法使用
public class Test { public static int age; //普通方法 对象级别的 public static void myStatic(){ } public static void main(String[] args) { Test.age = 10; Test.age = 30; Test.age = 50; Test.myStatic(); }}
类级元素被多个对象所共享,对象级元素时被单个对象共享
在静态方法中只能使用静态元素(属性或方法),而普通方法可以使用普通元素和静态元素
b.修饰类:
变成内部类
c.静态的使用场景:
二、包装类:(1).需要进行共享的属性元素
(2).静态方法-都是为了操作静态属性使用-用着方便
(3).综合考虑内存占用问题
我们知道java是面向对象语言,但是其中基本数据类型 并不是面向对象的,有的时候我们需要把基本数据类型转换成对象,便于操作。如在集合中要存入基本数据类型
包装类和基本数据类型的对应
基本数据类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean除了Character和Boolean外其他的都为数字型包装类而且可以相互转换
自动装箱和自动拆箱:
在jdk1.5之后有了自动装箱和自动拆箱的概念
自动装箱:把一个基本数据类型赋值给一个引用变量时会自动"装载"成其对应的包装类。这样就可以当成对象来使用
自动拆箱:当我们只有包装类对象,但是想变成基本数据类型,会自动把包装类对象"拆解"成对应的基本类型
public class Main { public static void main(String[] args) { Integer i = 20; int n = i; }}
三、hashCode()和equals():这两个方法都是Object类的非final方法,可以让所有类进行重写,而重写equals方法的时候就必须重写hashCode方法
1.hashCode():hashCode()方法的作用是获取对象的哈希值,也叫散列值,返回的是int类型,是该对象在哈希表中对应的位置
2.equals():equals()方法的作用是比较两个对象是否相等,如果没有重写则是比较两个对象的地址是否相等,但是在String类里重写了equals方法,能判断两个字符串的值是否相等。
3.hashCode()和equals()联系:值得注意的是如果重写了equals()方法那么必须重写hashCode方法,不然该类不能用于散列集合类里应用。
如果a.equals(b)为true,那么a和b的hashCode()必须相等
如果a.equals(b)为false,那么a和b的hashCode()可能相等
如果a.hashCode()!=b.hashC0de,那么a.equals(b)一定为false
如果a.hashCode()==b.hashC0de,那么a.equals(b)不一定为true
四、异常: 1.异常的分类:所有异常直接或间接来自java.lang.Throwable类
Throwable类下还有java.lang.Error和java.lang.Exception两个类
Error类是表明合理的应用程序不应该试图抓住一类严重的问题,大多数这样的错误都是异常情况
Exception类是表明合理的应用程序应该试图抓住一类问题,下面还有以下两个异常
a.编译时异常(除RuntimeException):在写代码期间必须解决的问题使用throws抛出异常,try...catch捕获异常来解决
b.运行时异常(RuntimeException):在运行代码期间出现,只有运行完才能看见
2.常见异常:a.NullPointerException(空指针异常):
出现原因:对象为空还要调用这个对象,就会出现该异常
b.ClassCastException(类型转换异常):
出现原因:出现在java多态中,编译时不知道类型转换是否正确,如果不正确在运行期时就会出现该异常
c.ArrayIndexOutOfBoundsException(数组下标越界异常):
出现原因:在使用数组时,遍历或者调用数组元素时超过索引位置时聚会出现该异常
d.SQLException(操作数据库异常):
出现原因:大多是sql语句错误
e.NumberFormatException(字符串转换数字异常):
出现原因:当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时
3.常见错误:a.java.lang.OutOfMemoryError(内存不足错误):
出现原因:当可用内存不足以让虚拟机分配给一个对象时抛出该错误
b.java.lang.StackOverflowError(堆栈溢出错误):
出现原因:当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误,递归无出口时也会抛出
c.java.lang.NoClassDefFoundError(未找到类定义错误) :
出现原因:当虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误