Java基础知识一些

Java基础知识

转载出自大佬写hello world 也有bug ,并加上自己的一些理解

对一些基础知识的一个汇总

final关键字和static关键字

final关键字

final关键字一般用在三个地方:变量、方法、类

  1. 基本数据类型的变量,数值一旦在初始化之后便不能更改
  2. 引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
  3. final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法。
  4. final修饰方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率

static关键字

static 关键字主要有以下种使用场景:

修饰成员变量和成员方法:

被 static 修饰的成员属于类,不属于单个这个类的某个对象,被类中所有对象共享,可以并且建议通过类名调用。

被static 声明的成员变量属于静态成员变量,静态变量存放在 Java 内存区域的方法区

调用格式类名.静态变量名 类名.静态方法名()

静态代码块:

静态代码块定义在类中方法外, 静态代码块在非静态代码块之前执行

(静态代码块—>非静态代码块—>构造方法)。

该类不管创建多少对象,静态代码块只执行一次。

静态内部类(static修饰类的话只能修饰内部类)

静态内部类与非静态内部类之间存在一个最大的区别: 非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。

没有这个引用就意味着:

  1. 它的创建是不需要依赖外围类的创建。2. 它不能使用任何外围类的非static成员变量和方法。
*静态导包(用来导入类中的静态资源,1.5之后的新特性):

格式为:import static 这两个关键字连用可以指定导入某个类中的指定静态资源

不需要使用类名调用类中静态成员,可以直接使用类中静态成员变量和成员方法

String、StringBuffer、StringBuilder

String: 字符串常量(线程安全)
StringBuffer: 字符串变量(线程安全)
StringBuilder: 字符串变量(非线程安全)

首先,String是引用数据类型。基本数据类型只有 8 个:byte、short、int、long、float、double、char、boolean。

在这里插入图片描述

通过String的源码得知,String是final修饰的,所以不可以被继承。

接下来看看String类实现的接口:

  1. java.io.Serializable:这个序列化接口仅用于标识序列化的语意。
  2. Comparable:这个compareTo(T 0)接口用于对两个实例化对象比较大小。
  3. CharSequence:这个接口是一个只读的字符序列。包括length(), charAt(int index), subSequence(int start, int end)这几个API接口,值得一提的是,StringBuffer和StringBuild也是实现了改接口。

StringBufferStringBuilder

在这里插入图片描述

在这里插入图片描述

StringBuffer和StringBuilder都继承了AbstractStringBuilder。不同点是对于线程安全来说的。StringBuffer很多方法都有synchronized关键字修饰,所以它线程安全,而StringBuilder没有。由此也可得出,StringBuilder的运算效率比StringBuffer高。

在这里插入图片描述

int和Integer的区别

​ 提到int和Integer的关系,大多数人都知道,Integer是int的包装类。从 Java 5 开始引入了自动装箱/拆箱机制,使得二者可以相互转换。
当我们给一个 Integer 对象赋一个 int 值的时候,会调用 Integer 类的静态方法 valueOf

在这里插入图片描述

IntegerCache是Integer的内部类,源码太长就不贴出来了。大概意思就是,如果整型字面量的值在负128到 127之间,那么不会 new 新的 Integer对象,而是直接引用常量池中的 Integer 对象。

Exception和Error

Exception和Error的区别

  1. Exception 和Error 都是继承了Throwable类,在Java中只有Throwable类型的实例才可以被抛出或者捕获,它是异常处理机制的基本类型。

  2. Exception和Error体现了Java平台设计者对不同异常情况的分类。

    1. Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。

    2. Exception又分为可检查(checked)异常和不可检查(unchecked)异常。可检查异常在源代码里必须显式的进行捕获处理,这是编译期强制检查的一部分。不可检查时异常是指运行时异常,像NullPointerException、ArrayIndexOutOfBoundsException之类,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译期强制要求。

    3. Error是指正常情况下,不大可能出现的情况,绝大部分的Error都会导致程序处于非正常的、不可恢复的状态。既然是非正常情况,不便于也不需要捕获。常见的比如OutOfMemoryError之类都是Error的子类。

在这里插入图片描述

throw和throws的区别

位置不同
  1. throws 用在函数上,后面跟的是异常类,可以跟多个;而 throw 用在函数内,后面跟的是异常对象。
功能不同
  1. throws 用来声明异常,让调用者只知道该功能可能出现的问题,可以给出预先的处理方式;throw 抛出具体的问题对象,执行到 throw,功能就已经结束了,跳转到调用者,并将具体的问题对象抛给调用者。也就是说 throw 语句独立存在时,下面不要定义其他语句,因为执行不到。
  2. throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw 则是抛出了异常,执行 throw 则一定抛出了某种异常对象。
  3. 两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

声明异常(throws)

//不捕获,而是声明该异常,交给调用者处理
   public static void method() {                           public static void method2() throws Exception {
       /*try-catch块捕获异常*/                                     if(5 > 3) {            
       if(5 > 3) {                                                   throw new Exception(); //抛出异常        
           try {                                                   }        
               throw new Exception(); //抛出异常             }
           } catch (Exception e) {
               e.printStackTrace();//捕获异常后的处理
           }
       }
   }
                                
  //若声明多个异常,则使用逗号分割                              
public static void method() throws IOException, FileNotFoundException{
        //something statements
    }

抛出异常(throw)

如果代码可能会引发某种错误,可以创建一个合适的异常类实例并抛出它,这就是抛出异常。如下所示:

    public static double method(int value) {
        if(value == 0) {
            throw new ArithmeticException("参数不能为0"); //抛出一个运行时异常
        }
        return 5.0 / value;
    }

大部分情况下都不需要手动抛出异常,因为Java的大部分方法要么已经处理异常,要么已声明异常。所以一般都是捕获异常或者再往上抛。

&和&&的区别

&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true 整个表达式的值才是 true。&&之所以称为短路运算是因为,如果**&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值