Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。

枚举类

枚举是一类常量的集合。枚举属于一种特殊的类,里面只包含一组有限的特定对象。

自定义枚举

将构造器私有化,防止直接new->去掉setXxx方法,防止属性被修改->在类内部直接创建固定对象。

自定义枚举使用

1.不需要提供setXxx方法,因为枚举对象值通常为只读。

2.对枚举对象/属性使用 final+static 共同修饰,实现底层优化。

3.枚举对象名通常使用全部大写,常量的命名规范。

4.枚举对象根据需要,也可以有多个属性。 

enum关键字实现枚举类 

 enum替代class -> 直接使用 常量名(实参列表) -> 如果有多个常量,使用”,“间隔即可。

如果使用enum 来实现枚举类,要求将常量对象写在最前面

enum关键字实现枚举类注意事项

1. 当我们使用enum 关键字开发一个枚举类时,默认继承 Enum类。并且是final类。

2.如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略。

3.当有多个枚举对象时,使用,间隔。最后有一个分号结尾

4.枚举对象啊你给i必须放在枚举类的行首

enum枚举类的常用方法 

 Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第1张图片

values                     返回枚举类的数组,含有定义的所有枚举对象。   

enum使用细节 

1.使用enum关键字后,就不再继承其他类了,因为enum会隐式继承Enum,而java是单继承机制。

2.enum实现的枚举类,仍然是一个类,所以还是可以实现接口的。

注解 

使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素。

三个基本的注解(1)@Override:限定某个方法,是重写父类方法,该注解只能用于方法。(2)@ Deprecated:用于表示某个程序元素(类,方法等)已过时。(3)@SuppressWarnings:抑制编译器警告。

注:@interface不是注解,代表一个注解类。

 Override注解

1.如果没有写@Override方法代表仍重写了父类的方法

2.如果写了@Override的注解,编译器就会去检查该方法是否真的重写了父类的方法。如果重写则编译通过如果没有构成重写,则编译错误。

3.@Override只能修饰方法,不能修饰其他类,包,属性等。

4.@Target是修饰注解的注解,称为元注解

@Deprecated注解 

1.@Deprecated修饰某个元素,代表该元素已经过时

 2.@Deprecated修饰的不推荐使用,但是仍然可以使用

3.可以修饰类,方法,包,参数等。

4.@Deprecated的作用可以做到新旧版本的兼容和过渡。

@SuppressWarnings注解

1.当不希望看到一些警告时,可以使用@SuppressWarnings注解来抑制警告信息

2.用法:@SuppressWarnings({" "})。“ ”里面可以添加警告类型。

警告类型:

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第2张图片

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第3张图片Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第4张图片

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第5张图片

4.关于@SuppressWarnings作用范围和放置的位置有关。

元注解(了解)

 用于修饰其他注解。

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第6张图片

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第7张图片

 Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第8张图片

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第9张图片

 异常

java中,将程序执行中发生的不正常情况称为“异常”。 (开发过程中的语法错误和逻辑错误不是异常。)

如果认为一段代码可能出现异常,可以使用try-catch异常处理机制来处理。处理之后即使出现异常,程序也可以继续执行。

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第10张图片

 异常事件分类

 1.Error(错误):java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError【栈溢出】和OOM(out of memory),Error是严重错误,程序会崩溃。

2.Exception(异常):其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如:空指针访问,试图读取不存在的文件,网络连接中断等,Exception分为两大类:运行时异常[程序运行时发生的异常]和编译时异常[编译程序时,编译器检测出的异常]。(运行时异常可以不做处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响)(编译时异常是编译器要求必须处理的异常)

常见的运行时异常

1.NullPointerException 空指针异常:当应用程序试图在需要对象的地方使用null时,抛出该异常。

2.ArithmeticException 数学运算异常:当出现异常的运算条件时,抛出异常。例如:一个整数“除以零”时。

3.ArrayIndexOutOfBoundsException 数组下标越界异常:用非法索引访问数组时抛出的异常。

4.ClassCastException 类型转换异常:当试图将对象强制转换为不是实例的子类时,抛出该异常。

5.NumberFormatException 数组格式不正确异常:当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时。

异常处理 

异常处理两种方式

1.try-catch-finally  :程序员在代码中捕获发生的异常,自行处理。

2.throws  :将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM。

 try-catch异常处理

try{

        可能有异常的代码;

}catch(Exception e){

        捕获到异常;//1.异常发生时系统将异常封装给Exception 对象e,传递给catch

                                // 得到异常处理后,程序员自己处理。

                                //如果没有发生异常catch代码块不执行

}finally{

        // 不管try代码块是否有异常发生,始终要执行finally。

        //所以通常将释放资源的代码,放在finally。

}

1.如果异常发生了,则异常后面发生的代码不会执行直接进入到catch块。

2.如果异常没有发生,则顺序执行try的代码块,不会进入到catch

3.如果希望不管是否发生异常都执行某段代码(比如关闭连接,释放资源等)则使用finally{}。

4.可以有多个catch异常捕获不同的异常类型。要求子类异常写在前面父类异常写在后面

5.可以进行try-finally配合使用,这种用法相当于没有捕获异常,因此程序会直接崩掉。(应用场景:执行一段代码,不管是否发生异常,都必须执行某个业务逻辑)

throws异常处理 

 Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第11张图片

1.对于运行时异常,程序中如果没有处理,默认是throws。 

2.父类重写子类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的子类型

3.在thorws过程中,如果有方法try-catch ,就相当于异常处理,就可以不必throws。

自定义异常 

当程序中出现了某些“错误”,但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息。

自定义异常步骤

定义类:自定义异常类名,继承Exception或RuntimeException。

        如果继承Exception,属于编译异常

        如果继承RuntimeException,属于运行异常。(一般来说继承RuntimeException)

//自定义AgeException异常,输入年龄不属于18-80时,抛出异常
public class Test {
    public static void main(String[] args) {
        int age = 90;
        if(!(age>=18 && age<=80)){
            throw new AgeException("年龄需要在18~80之间!");
                                    //这里可以通过构造器,设置信息
        }
        System.out.println("你的输入正确,年龄为:"+age);
    }
}
class AgeException extends RuntimeException{
    public AgeException(String message) {
        super(message);
    }
}
 throw和throws区别

 Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第12张图片

 八大包装(Wrapper)类

针对八种基本数据类型定义相应的引用类型--包装类。有了类的特点,就可以调用类中的方法。

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第13张图片

各种包装类的继承关系

虚线表示实现接口,实线代表继承。 

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第14张图片

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第15张图片

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第16张图片

装箱和拆箱

jdk5前的手动装箱和拆箱方式。装箱:基本类型->包装类型。拆箱:反之。 jdk5之后(含)自动装箱和拆箱。

//手动装箱 int -> Interget

int n1 = 100;

Integer integer = new Integer(n1);

//或者

Interger integer1 = Integer.valueOf(n1);

//手动拆箱 Integer -> int

int i = integer.intValue();

//自动装箱 

Integer integer2 = n1;  //底层使用的还是 Integer.valueOf(n2)

//自动拆箱

int n3 = integer2;  //底层仍然使用的是intValue()方法。

Interger类和Character类的常用方法
Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第17张图片 Integer类面试题

 Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第18张图片

 Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第19张图片

String类

String对象用于保存字符串,也就是一组字符序列。字符串常量对象是用双引号括起来的字符序列。字符串的字符只用Unicode字符编码一个字符(不区分字母还是汉字)占两个字节

String类的继承机制

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第20张图片

String实现了Serializable ,说明String可以串行化(可以在网络传输)。

String实现了Comparable接口,说明String对象可以比较。

String结构剖析

1.String类有很多构造器,构造器的重载。

2. String是final类,不能被其他的类继承。

3.String有属性 private final char value[]; 用于存放字符串内容

        一定要注意:value 是一个final类型,不可以修改。(指的是value不能指向新的地        址,但是单个字符内容可以变化

4.

创建String对象

方式一:直接赋值 String s = "aaa";

方式二:调用构造器 String s2 = new String("aaa"); 

1.方式一:先从常量池中查看是否有“aaa”数据空间,如果有,直接指向没有则创建,然后指向。s最终指向的是常量池的空间地址。

2.方式二:先在中创建空间,里面维护了value属性指向常量池的aaa空间。如果常量池没有“aaa",重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址。

例如:

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第21张图片

 字符串的特性

如果两个常量相加 (String c = "a" + "b";)看的是池。    (String c1 = a + b;)变量相加,是在堆中

 String常用方法

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第22张图片Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第23张图片

String name = "hello,world";    name.substring(0,5);//截取name0到4的元素"hell"。

 toUpperCase将字符串变成大写。toLowerCase将字符串变成小写。concat拼接字符串。

s11 = s.replace("a","b"):将s中a全部替换成b(这里只有返回值s11被替换,原来的s不变化)

conpareTo 如果前者大,则返回正数。后者大,返回负数。相等,返回0。

 Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第24张图片

StringBuffer类 

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第25张图片

 String和StringBuffer转换 

String -> StringBuffer 

方式一:使用构造器

String str = "hello,world";

SringBuffer stringBuffer = new StringBuffer(str);//注意对str本身没有影响。

方式二:使用append方法

StringBuffer stringBuffer = new StringBuffer();

stringBuffer = stringBuffer.append(str);

StringBuffer -> String

方式一:使用StringBuffer提供的toString方法

StringBuffer stringBuffer = new StringBuffer("hello,world");

String s = stringBuffer.toString();

方式二:使用构造器

String s = new String(stringBuffer);

StringBuffer常用方法

 Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第26张图片

 StringBuilder类

 一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步(StringBuilder不是线程安全)。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类。因为在大多数实现中,它比stringBuffer更快。

StringBuilder继承关系 

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第27张图片

String和StringBuffer和StringBuilder

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第28张图片

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第29张图片

 Math类

 Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第30张图片

random返回的是[0,1)之间的一个double数。所以(int)(a+Math.random()*(a-b+1))。返回的是a,b之间的。

Arrays类

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第31张图片

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第32张图片

binarySearch如果查找的数不存在,则返回 -(low+1)

Arrays.copy:如果拷贝的长度大于arr.length就在新数组的后面加null。如果arr.length<0抛出异常。

fill:表示用99去替换所有元素。

 System类

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第33张图片

 arraycopy复制数组的各个参数含义:Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第34张图片

BigInteger和BigDecimal类

BigInteger适合保存比较大的整型。

BigDecimal适合保存精度更高的浮点型(小数)。

BigInteger类 

在对 BigInteger类 进行加减乘除时,不能直接使用+-*/。要使用相对的方法。

add:加

subtract:减

multiply:乘

divide:除

BigDecimal类

对 BigDecimal类 进行进行加减乘除时,不能直接使用+-*/。要使用相对的方法。

add:加

subtract:减

multiply:乘

divide:除   //此方法可能会抛出异常,通过指定精度BigDecimal.ROUND_CEILING 。如果有无限循环小数,就会自动保留分子的精度。

Date类 

第一代日期类。精确到秒,代表特定的瞬间。

SimpleDateFormat:格式和解析日期的类。它允许进行格式化(日期->文本)解析(文本->日期)和规范化。

1.Date date = new Date();

System.out.println(date); // 可以输出当前日期,日期格式是国外方式。

2.这里的Date是在java.util包。

3.对格式进行转换换成国内格式)。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd   hh:mm:ss E");// 参数列表终的字母是固定的,不能随便写。

String format = sdf.format(date); // format:将日期转换成指定格式的字符串

System.out.println(format);  //可以按照当前国内格式日期输出

4.可以把一个格式化的String 转换成对应的Date。

String s = "相应格式的日期";

Date parse = sdf.parse(s);

System.out.println(sdf.format(parse));  // 这里的sdf格式需要和给的String格式一样

 Calendar类

 第二代日期类,主要就是Calendar类(日历)。

1.Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等,日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第35张图片

 第三代日期类
前两代日期类的不足 

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第36张图片

 第三代日期类常见方法

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第37张图片

1.使用now()来返回当前日期。

LocalDateTime ldt = LocalDateTime.now();  // 获取 年月日时分秒

LocalDate ld = LocalDate.now();   // 获取 年月日

LocalTime ld = LocalTime.now();  // 获取 时分秒

2.使用 DateTimeFormatter 格式日期类,类似于SimpleDateFormat

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(上面的格式);

String format = drf.format(ldt); // 可以输出格式化的日期

3.Instant时间戳

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第38张图片

更多第三代日期方法 

Java学习笔记(九)------枚举类、注解、异常、八大包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BI和BD类等。_第39张图片

你可能感兴趣的:(Java,java,jvm)