Java基础

一、Java异常分类以及处理

概念:Java程序方法不能按照正常途径完成任务,就可以通过另一条途径跳出方法。此时通常会抛出一个异常对象。这时候方法不能执行方向下面的语句了,异常处理通常会交给异常处理器。

Java异常的分类:分为Error和Exception

简单来说一下error是什么:error是由Java虚拟机内部产生错误而导致的,比如说Java虚拟机内除不足,资源耗尽等

Exception:又分为:一 个 是 运 行 时 异 常 RuntimeException , 一 个 是 CheckedException。

RuntimeException:比如说npe 空指针异常等等 ;CheckedException:RuntimeException

Java异常的处理方式:

一种是遇到问题不具体解决而是抛给调用者如throw、throws、二是主动捕获异常进行处理 三、还有一种是系统自动抛出异常

Throw和Throws的区别:

一、用的位置不同,throw用于方法中,throws用于方法名后面

二、作用不同 throw是抛出一个异常对象,throws是用于声明可能产生的异常

三、效果不一样:throw 它后面的语句都不会执行了,说明此时一定有了异常;throws表示出现异常的一种可能性,并不一定会发生异常。

二、Java反射

概念:在Java程序运行的过程中,对于任意一个类都能知道其对应的方法属性,对于任意一个对象我们都能够知道该对象的方法,这种动态的获取类的信息的机制就是Java反射

Java反射的应用场景

1.比如        Person p=new Student();

其中编译时类型为 Person,运行时类型为 Student。

2.在程序运行的过程中,可能需要从外部接入信息,其对象编译是object ,但是程序需要调用该对象的运行时的方法,此时就要通过反射来解决该问题

Java 反射 API 反射 API 用来生成 JVM 中的类、接口或则对象的信息。

1. Class 类:反射的核心类,可以获取类的属性,方法等信息。

2. Field 类:Java.lang.reflec 包中的类,表示类的成员变量,可以用来获取和设置类之中的属性 值。

3. Method 类: Java.lang.reflec 包中的类,表示类的方法,它可以用来获取类中的方法信息或 者执行方法。

4. Constructor 类: Java.lang.reflec 包中的类,表示类的构造方法。

反射使用步骤(获取 Class 对象、调用对象方法)

1. 获取想要操作的类的 Class 对象,他是反射的核心,通过 Class 对象我们可以任意调用类的方 法。

2. 调用 Class 类中的方法,既就是反射的使用阶段。

3. 使用反射 API 来操作这些信息。

首先获取class对象 有几种方式:

拿到class对象后,我们想要创建对应类的对象该怎么办呢?

三、Java内部类

首先java的内部类有四种:静态内部类、成员内部类、局部内部类、匿名内部类

内部类简单来说就是写在一个类里面的类

静态内部类就是,用static修饰的内部类

1. 静态内部类可以访问外部类所有的静态变量和方法,即使是 private 的也一样。

2. 静态内部类和一般类一致,可以定义静态变量、方法,构造方法等。

3. 其它类使用静态内部类需要使用“外部类.静态内部类”方式,如下所示:Out.Inner inner = new Out.Inner();inner.print();

4. Java集合类HashMap内部就有一个静态内部类Entry。Entry是HashMap存放元素的抽象, HashMap 内部维护 Entry 数组用了存放元素,但是 Entry 对使用者是透明的。像这种和外部 类关系密切的,且不依赖外部类实例的,都可以使用静态内部类。

成员内部类,是写在内部中的普通类 

局部内部类:是写在外部类中方法里面的类

匿名内部类:必须实现一个接口或者继承一个父类,直接使用是用new一个对象来引用

记录匿名内部类的编译类型是实现接口或者父类的类型,运行类型是系统内部实现的一个匿名类的类型!

四、Java泛型

泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本 质是参数化类型,也就是说所操作的数据类型被指定为一个参数。比如我们要写一个排序方法, 能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,我们就可以使用 Java 泛型。

类型通配符?

类型通配符一般是使用 ? 代 替 具 体 的 类 型 参 数 。 例 如 List 在逻辑上是 List,List 等所有 List的父类。

五、Java的序列化

简单来说就是创建可复用的Java对象

使用 Java 对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装 成对象。必须注意地是,对象序列化保存的是对象的”状态”,即它的成员变量。由此可知,对 象序列化不会关注类中的静态变量。

Serializable 实现序列化 在 Java 中,只要一个类实现了 java.io.Serializable 接口,那么它就可以被序列化。

六、Java复制

将一个对象的引用复制给另外一个对象,一共有三种方式。第一种方式是直接赋值,第二种方式 是浅拷贝,第三种是深拷贝。所以大家知道了哈,这三种概念实际上都是为了拷贝对象。

直接赋值。在 Java 中,A a1 = a2,我们需要理解的是这实际上复制的是引用,也就是 说 a1 和 a2 指向的是同一个对象。因此,当 a1 变化的时候,a2 里面的成员变量也会跟 着变化。

浅复制(复制引用但不复制引用的对象):浅复制和直接复制的区别是需要创建一个新对象,对于基本类型,会直接赋相同的值,对于引用类型,是指向同一个引用对象的,当对象修改时原本和副本都会改变

深复制 和浅复制的区别就是 深拷贝不仅复制对象本身,而且复制对象包含的引用指向的所有对象。相当于是全部创建了一个新的引用!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值