常用类&异常体系&代码块&枚举类&设计模式

代码块

基本介绍

代码化块又称为初始化块,属于类中的成员(即类的一部分),类似于方法,将逻辑语句封装在方法体中,通过{}包围起来。但与方法名不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显式调用,而是加载类时,或创建对象时隐式调用。

基本语法

[修饰符]{代码};

说明注意

修饰符可选,要写的话,也只能写static

代码块分两类,静态代码块和普通代码块(非静态代码块)

逻辑语句也可以为任何逻辑语句(输入,输出,方法调用,循环,判断等)

;号可以写上,也可以省略

代码块的好处

相当于另一个形式的构造器(对构造器的补充机制),可以做初始化操作

应用场景:如果多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重用性

代码块的注意事项与细节

static代码块 也叫静态代码块,作用就是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次。普通代码块,每创建一个对象,就执行。

***类什么时候被加载***

创建对象实例时(new)

创建子类对象实例,父类也会加载,而且父类先被加载,子类后被加载

使用类的静态成员时(静态属性,静态方法)

普通的代码块,在创建对象实例时,会被隐式的调用。被创建一次,就会调用一次。如果只是使用类的静态成员时,普通代码块并不会执行

创建一个对象时,在一个类中的调用顺序

1.调用静态代码块和静态属性初始化(两者优先级一样,同时存在,按定义顺序决定)

2.调用普通代码块和普通属性初始化(两者优先级一样,同时存在,按定义顺序决定)

3.调用构造器

构造器的最前面其实隐含了super()和调用本类普通代码块

创建一个子类对象时(继承关系),静态代码块,静态属性初始化,普通代码块,普通属性初始化,构造方法的调用顺序

1.父类的静态代码块和和静态属性(优先级一样,按执行顺序执行)

2.子类的静态代码块和和静态属性(优先级一样,按执行顺序执行)

3.父类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)

4.父类的构造方法

5.子类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)

6.子类的构造方法

静态代码块只能直接调用静态成员(静态属性和静态方法),普通代码块可以调用任意成员

设计模式

设计模式概念

静态方法和静态属性的经典使用,在经过大量实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式

单例模式

概念

类的单例设计模式,就是采用一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法

单例模式的两种方式

饿汉式

(对象随着类的加载而加载,即使还没有使用,但是已经存在了,可能造成创建了对象但是没有使用,造成资源浪费)

步骤:1.构造器私有化(防止直接new)2.类的内部创建对象(静态)3.向外暴露一个静态的公共方法。(getInstance())4.代码实现

懒汉式

(对象在使用时才会创建)(只有当用户使用getInstance时,才返回对象,后面再次调用时,会返回上次创建的对象,从而保证了单例)

步骤:1.构造器私有化(防止直接new)2.定义一个static静态属性对象(不赋值,构造器不会调用,在类加载时不会创建一个对象)3.提供一个public的static方法,可以返回一个对象4.代码实现

两种方式比较

1.创建时机不同:饿汉式在类加载的时候就创建了对象实例,而懒汉式是在使用时才创建。2.饿汉式不存在线程安全问题,懒汉式存在线程安全问题。3.饿汉式存在浪费资源的问题,懒汉式使用时才创建,不存在这个问题。4.java.lang.Runtime就是单例模式(饿汉式)

枚举类

枚举概念

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

枚举的实现方式

自定义

1.将构造器私有化,防止直接new

2.去掉setXxx方法,防止属性被修改

3.在类的内部,直接创建固定对象(static修饰)

4.优化,可以加入final修饰

枚举对象名通常全部大写,常量命名规范

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

enum关键字实现枚举

1.使用关键字替代class

2.创建对象直接用 对象名(实参列表);表示

3.如果有多个常量对象,直接用,间隔

4.如果用enum来实现枚举,要求将定义常量对象,写在最前面

注意事项

1.当我们使用enum关键字开发一个枚举类时,默认会继承Enum类,而且是一个final类(用javap工具证明,反编译)

2.根据实参判断调用的哪个构造器

3.如果使用的是无参构造器,则实参列表和小括号都可以省略

4.枚举对象必须放在枚举类的行首

Enum的一些方法

name() 输出枚举对象名字

ordinal()输出的是该枚举对象的次序/编号,从0开始

values() 从反编译可以看出values方法,含有定义的所以枚举对象

valueOf() 将字符串转变为枚举对象,要求字符串必须为已有的常量名,否则报异常

campareTo()比较两个枚举常量,比较的是编号

enum实现接口

使用enum关键字之后,就不能在继承其他类,因为enum会隐式继承Enum,而java是单继承机制

枚举类和普通类一样,可以实现接口。

常用类

常用API

Math

概述

Math 包含执行基本数字运算的方法

调用方式

Math类中无构造方法,但内部的方法都是静态的,则可以通过 **类名.进行调用**

常用方法

| public static int abs(int a) | 返回参数的绝对值 |

| public static double ceil(double a) | 返回大于或等于参数的最小double值,等于一个整数 |

| public static double floor(double a) | 返回小于或等于参数的最大double值,等于一个整数 |

| public static int round(float a) | 按照四舍五入返回最接近参数的int |

| public static int max(int a,int b) | 返回两个int值中的较大值 |

| public static int min(int a,int b) | 返回两个int值中的较小值 |

| public static double pow (double a,double b) | 返回a的b次幂的值 |

| public static double random() | 返回值为double的正值,[0.0,1.0) |

System

常用方法

| public static void exit(int status) | 终止当前运行的 Java 虚拟机,非零表示异常终止 |

| public static long currentTimeMillis() | 返回当前时间(以毫秒为单位) |

Object

概述

Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类,换句话说,该类所具备的方法,所有类都会有一份

toString方法
重写toString方法的方式

1.Alt + Insert 选择toString

2.在类的空白区域,右键 -> Generate -> 选择toString

toString方法的作用

以良好的格式,更方便的展示对象中的属性值

equals方法
equals方法的作用

* 用于对象之间的比较,返回true和false的结果

* 举例:s1.equals(s2); s1和s2是两个对象

重写equals方法的场景

不希望比较对象的地址值,想要结合对象属性进行比较的时候。

重写equals方法的方式

alt + insert 选择equals() and hashCode(),IntelliJ Default,一路next,finish即可

在类的空白区域,右键 -> Generate -> 选择equals() and hashCode(),后面的同上。

冒泡排序

概述

一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序

如果有n个数据进行排序,总共需要比较n-1次

每一次比较完毕,下一次的比较就会少一个数据参与

Arrays

常用方法

| public static String toString(int[] a) | 返回指定数组的内容的字符串表示形式 |

| public static void sort(int[] a) | 按照数字顺序排列指定的数组 |

工具类设计思想

1、构造方法用 private 修饰

2、成员用 public static 修饰

日期类

Date类

概述

Date 代表了一个特定的时间,精确到毫秒

构造方法

| public Date() | 分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒 |

| public Date(long date) | 分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数 |

常用方法

| public long getTime() | 获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值 |

| public void setTime(long time) | 设置时间,给的是毫秒值 |

SimpleDateFormat类

概述

SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。

构造方法

| public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认模式和日期格式 |

| public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat使用给定的模式和默认的日期格式 |

常用方法
格式化(从Date到String)

public final String format(Date date):将日期格式化成日期/时间字符串

解析(从String到Date)

public Date parse(String source):从给定字符串的开始解析文本以生成日期

Calendar类

概述

Calendar 为特定瞬间与一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法

Calendar 提供了一个类方法 getInstance 用于获取这种类型的一般有用的对象。

该方法返回一个Calendar 对象。

其日历字段已使用当前日期和时间初始化:Calendar rightNow = Calendar.getInstance();

常用方法

| public int get(int field) | 返回给定日历字段的值 |

| public abstract void add(int field, int amount) | 根据日历的规则,将指定的时间量添加或减去给定的日历字段 |

| public final void set(int year,int month,int date) | 设置当前日历的年月日 |

异常体系

异常体系结构

Throwable 类

Throwable成员方法

| public String getMessage() | 返回此 throwable 的详细消息字符串 |

| public String toString() | 返回此可抛出的简短描述 |

| public void printStackTrace() | 把异常的错误信息输出在控制台 |

编译时异常和运行时异常的区别

编译时异常

都是Exception类及其子类

必须显示处理,否则程序就会发生错误,无法通过编译

运行时异常

都是RuntimeException类及其子类

无需显示处理,也可以和编译时异常一样处理

JVM默认处理异常的方式

把异常的名称,错误原因及异常出现的位置等信息输出在了控制台

程序停止执行

try-catch方式处理异常

定义格式

try {

可能出现异常的代码;

} catch(异常类名 变量名) {

异常的处理代码;

}

执行流程

程序从 try 里面的代码开始执行

出现异常,就会跳转到对应的 catch 里面去执行

执行完毕之后,程序还可以继续往下执行

try-with-resources

JDK7 之前所有被打开的系统资源,比如流、文件或者 Socket 连接等,都需要被开发者手动关闭,否则将会造成资源泄露。JDK7 之后,Java 新增的 try-with-resource 语法糖来打开资源,并且可以在语句执行完毕后确保每个资源都被自动关闭 。

定义格式

try (resource declaration) {

// 使用的资源

} catch (ExceptionType e1) {

// 异常块

}

以上的语法中 try 用于声明和实例化资源,catch 用于处理关闭资源时可能引发的所有异常。

注意:try-with-resources 语句关闭所有实现 AutoCloseable 接口的资源。

throws方式处理异常

定义格式

public void 方法() throws 异常类名 {

}//没有做实际处理

throws和throw的区别

自定义异常

好处

如果 Java 提供的内置异常类型不能满足程序设计的需求,这时我们可以自己设计 Java 类库或框架,其中包括异常类型。实现自定义异常类需要继承 Exception 类或其子类,如果自定义运行时异常类需继承 RuntimeException 类或其子类。

定义格式

class 自定义异常名 extends Exception{ 语句体}

在编码规范上,一般将自定义异常类的类名命名为 XXXException,其中 XXX 用来代表该异常的作用。

自定义异常类一般包含两个构造方法:一个是无参的默认构造方法,另一个构造方法以字符串的形式接收一个定制的异常消息,并将该消息传递给超类的构造方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值