Java基础知识概述3

一、final和static关键字:

1.final关键字:

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是面向对象语言,但是其中基本数据类型 并不是面向对象的,有的时候我们需要把基本数据类型转换成对象,便于操作。如在集合中要存入基本数据类型

包装类和基本数据类型的对应

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

除了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(未找到类定义错误) :

出现原因:当虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值