27-Java|异常处理
异常的概念什么是异常? 指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止。 异常的抛出机制 Java 中把不同的异常用不同的类表示,一旦发生某种异常,就创建该异常类型的对象,并且抛出(throw)。然后程序员可以捕获(catch)到这个异常对象,并处理;如果没有捕获(catch)这个异常对象,那么这个异常对象将会导致程序终止。 如何对待异常 对于程序出现的异常,一般有两种解决方法:一是遇到错误就终止程序的运行。另一种方法是程序员在编写程序时,就充分考虑到各种可能发生的异常和错误,极力预防和避免。实在无法避免的,要编写相应的代码进行异常的检测、以及异常的处理,保证代码的健壮性。 异常的体系 在 Java 中,异常是通过类来表示的,所有异常类都是java.lang.Throwable类的子类。Throwable类有两个直接子类: Error: 表示系统级的错误,通常是由 JVM 抛出的,程序一般不应捕获此类异常。例如:OutOfMemoryError。 Exception: 表示程序中可以捕获和处理的异常。 Exception类又分为两类: ...
26-Java|包装类
包装类介绍 Java 语言是一个面向对象的编程语言,但是 Java 中的基本数据类型却不是面向对象的,但是我们在实际使用中经常需要将基本数据类型转换成对象,便于操作,比如,集合的操作中,这时,我们就需要将基本类型数据转化成对象,所以就出现了包装类。基本数据类型有 8 个,对应的包装类也是 8 个,如果下图所示 基本数据类型 包装类 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean 包装类的继承关系 包装类的基本操作 8 个包装类都带有自己对应的构造方法,java 中的包装类提供了将原始数据类型转换为对象,以及将对象转换为原始数据类型的机制。这里举例说明下这个过程 基本数据类型 —> 包装类12345678910111213141516171819202122232425262728293031323334353637import org.jun ...
25-Java|枚举类
枚举类概述枚举是 Java1.5 引入的新特性,通过关键字 enum 来定义枚举类。枚举类是一种特殊类,它和普通类一样可以使用构造器、定义成员变量和方法,也能实现一个或多个接口,但枚举类不能继承其他类。 定义枚举类枚举类的实现: 在JDK5.0 之前,需要程序员自定义枚举类型。 在JDK5.0 之后,Java支持enum关键字来快速定义枚举类型 JDK5.0 之前 在JDK5.0 之前如何声明枚举类呢? 私有化类的构造器,保证不能在类的外部创建其对象 在类的内部创建枚举类的实例。声明为:public static final对外暴露这些常量对象 对象如果有实例变量,应该声明为private final(建议,不是必须),并在构造器中初始化 1234567891011121314151617181920212223242526class Season{ private final String SEASONNAME; // 季节的名称 private final String SEASONDESC; // 季节的描述 private Seas ...
24-Java|内部类
定义在 Java 中,内部类是一种特殊的类,它定义在另一个类的内部 内部类的分类:成员内部类(静态、非静态)vs 局部内部类(方法内、代码块内、构造器内) 成员内部类成员内部类可以是静态的或非静态的。静态内部类不能访问外部类的非静态成员,但可以访问外部类的静态成员。非静态内部类可以访问外部类的所有成员。 下面是一个示例 123456789101112131415161718192021package com.base.learn;public class OuterClass { private int x = 10; static int y = 20; // 静态内部类 static class StaticInnerClass { public void print() { // 不能访问外部类的非静态成员 System.out.println("Static Inner Class: y = " + y); } ...
21-Java|interface接口
概述接口(Interface) 是 Java 中用于定义行为契约的一种机制。它定义了一组方法,而这些方法不包含实现(除非是 default 方法或 static 方法)。接口允许类实现这些方法并提供具体的功能,实现了代码的灵活性和模块化。 接口的特点和作用: 抽象行为:接口定义了一组抽象方法,这些方法没有实现,由实现接口的类负责具体实现。接口可以看作是一组行为的约定。 多实现支持:类只能继承一个父类,但可以实现多个接口。接口为 Java 提供了类多重行为继承的机制,弥补了类不支持多继承的限制。 实现解耦:接口可以将方法的定义和实现分开,增强了代码的解耦性。通过接口,类可以在不依赖具体实现的情况下使用其他类提供的功能。 设计灵活性:接口可以定义多个类都应该遵循的行为。不同的类可以实现同一个接口,但实现细节可以不同,这提高了设计的灵活性。 多态性支持:接口为 Java 的多态性提供了支持,可以通过接口类型引用对象,使代码更加通用。 接口的组成: 抽象方法:接口中的方法默认是 public abstract,即这些方法必须在实现类中实现。 默认方法(default 方法):接口可以包含 ...
20-Java|模版模式
介绍模板模式(Template )是一种设计模式,它定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现。这样,子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。在 Java 中,模板模式通常使用抽象类和抽象方法来实现。抽象类中定义了一系列抽象方法,这些方法将在子类中实现。抽象类还可以定义一些非抽象方法,这些方法可以直接在抽象类中实现,也可以留给子类实现。抽象类中定义的方法组成了算法的骨架 结构模式中的角色: 抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。 具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法 通用代码如下抽象模板类1234567891011public abstract class AbstractClass { // 基本方法 protected abstract void doSomething(); // 基本方法 protected abstract void doAnything(); // 模版方法,完成相关逻辑 public void t ...
19-Java|abstract关键字
概述抽象类和抽象方法 Java 语言提供了两种类,分别为具体类和抽象类。前面学习接触的类都是具体类。这一节介绍一下抽象类。 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,那么这样的类称为抽象类,抽象类、抽象方法使用 abstract 修饰。 格式在 Java 中抽象类的语法格式如下: 123<abstract>class<class_name> { <abstract><type><method_name>(parameter-iist); } 其中,abstract 表示该类或该方法是抽象的;class_name 表示抽象类的名称;method_name 表示抽象方法名称,parameter-list 表示方法参数列表。 如果一个方法使用 abstract 来修饰,则说明该方法是抽象方法,抽象方法只有声明没有实现。需要注意的是 abstract 关键字只能用于普通方法,不能用于 stat ...
18-Java|final关键字
概念及总结final 在 Java 中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作 final,你将不能改变这个引用了,编译器会检查代码,如果试图将变量再次初始化的话,编译器会报编译错误 定义:Java 中,final 表示最终的,final 可以用来修饰的结构:类、方法、变量 final 用来修饰类:此类不能被其他类所继承。比如:String 类、System 类、StringBuffer 类 final 修饰方法:表明此方法不能被子类重写。比如:Object 类中的 getClass() final 修饰变量:既可以修饰成员变量,也可以修饰局部变量,此时的”变量”其实就变成了”常量”,意味着一旦赋值,就不可更改 final 修饰成员变量 可以考虑赋值的位置有:显式初始化、代码块中初始化、构造器中初始化 final 修饰局部变量:一旦赋值就不能修改 方法内声明的局部变量:在调用局部变量前,一定需要赋值。而且一旦赋值,就不可更改 方法的形参:在调用此方法时,给形参进行赋值。而且一旦赋值,就不可更改 static final 用来修饰属性: ...
17-Java|代码块
作用用来初始化类或对象信息。代码块只能使用 static 修饰 分类 静态代码块:使用static修饰 非静态代码块:没有使用static修饰 静态代码块 随着类的加载而执行 由于类的加载只会执行一次,进而静态代码块的执行,也只会执行一次 作用:用来初始化类的信息 内部可以声明变量、调用属性或方法、编写输出语句等操作 静态代码块的执行要先于非静态代码块的执行 如果声明有多个静态代码块,则按照声明的先后顺序执行 静态代码块内部只能调用静态的结构(即静态的属性、方法),不能调用非静态的结构(即非静态的属性、方法) 非静态代码块 随着对象的创建而执行 每创建当前类的一个实例,就会执行一次非静态代码块 作用:用来初始化对象的信息 内部可以声明变量、调用属性或方法、编写输出语句等操作 如果声明有多个非静态代码块,则按照声明的先后顺序执行 非静态代码块内部可以调用静态的结构(即静态的属性、方法),也可以调用非静态的结构(即非静态的属性、方法) 代码块示例1234567891011121314151617181920212223242526272829303132333435363738394 ...
16-Java|main方法
由于 Java 虚拟机需要调用类的 main()方法,所以该方法的访问权限必须是 public,又因为 Java 虚拟机在执行 main() 方法时不必创建对象,所以该方法必须是 static 的,该方法接收一个 String 类型的数组参数,该数组中保存执行 Java 命令时传递给所运行的类的参数。 IDEA 参数用法123456789101112public class MainTest { public static void main(String[] args) { for (String arg : args) { System.out.println(arg); } }}/*北京上海杭州*/ 命令行参数用法12345❯ javac MainTest.java❯ java MainTest ab cd efabcdef