Java-基础

Java基础

继承

访问权限修饰符

  • 不加修饰符,表示包级可见

  • private

  • protected

    • 用于修饰成员,表示在继承体系中成员对于子类可见,这个访问修饰符修饰类没有意义
  • public

抽象类与接口

抽象类

  • 抽象类与抽象方法都使用abstract关键字进行声明,抽象类一般会包含抽象方法,抽象方法一定位于抽象类中
  • 抽象类不能被实例化,需要继承抽象类才能实例化其子类

接口

  • 接口是抽象类的延伸,在Java8之前,可以看成一个完全抽象的类,也就是没有任何方法的实现
  • 从Java8开始,接口也可以拥有默认的方法实现
  • 接口的字段和方法默认都是public的,并且不允许定义为private或者protected
  • 接口的字段默认都是static和final的

两者的比较

  • 抽象类提供了IS-A关系,即子类对象必须能够替换掉所有父亲对象
    接口更像是一种LIKE-A关系,提供一种方法实现契约,而不要求接口的实现类完全拥有父亲对象
  • 抽象类只能单继承,接口可以实现多继承
  • 抽象类的字段可以有多种类型,而接口的字段只能是static和final类型的
  • 抽象类的的成员可以有多种访问权限,接口的成员只能是public的

重写与重载

重写

  • 子类方法的访问权限必须大于等于父类方法
  • 子类方法的返回类型必须是父类方法返回类型或其子类型

重载

  • 存在同一个类中,方法名相同,但参数类型、个数、顺序至少有一个不同(例子构造方法)

关键字

final

  • 修饰数据,声明数据为常量,在运行时被初始化后不能被改变的常量
    对于基本类型,final使数值不变;
    对于引用类型,final使引用不变,也就不能引用其他对象,但是被引用的对象本身是可以修改的
  • 修饰方法,声明的方法不能被子类重写,private方法隐式地指定为final,如果子类中定义的方法和基类中的一个private方法签名相同,此时子类的方法不是重写基类的方法,而是子类中定义了一个新的方法
  • 修饰类,声明类不允许被继承

static

  • 修饰变量,静态变量,又称为类变量,也就是这个变量是属于类的,类的所有实例都共享静态变量,可以直接通过类名来访问它,静态变量在内存中只存在一份
  • 修饰方法,静态方法,在类加载的时候就存在了,不依赖于任何实例,所有静态方法必须有实现,也就是不能是抽象方法
  • 修饰代码块,静态语句在类初始化时运行一次

反射

每一个类都有一个class对象,包含了与类有关的信息,当编译一个新类时,会产生一个同名的.class文件,该文件内容保存着class对象

类加载相当于class对象的加载,类在第一次使用时才动态的加载到jvm中,可以使用class.forName()方法来控制类的加载,该方法会返回一个class对象

反射可以提供运行时的类信息,并且这个类可以在运行时才加载进来,甚至在编译时期该类的.class不存在也可以加载进来

class和Java.lang.reflect一起为反射提供了支持,reflect类库主要包含以下三个类

  • Field:可以使用get()和set()方法读取和修改Field对象关联的字段
  • Method:可以使用invoke()方法调用与Method对象关联的方法
  • Constructor:可以用Constructor创建新的对象

异常

Throwable可以用来表示任何可以作为异常抛出的累,分为Error和Exception

  • Error

    • Error用来表示jvm无法处理的错误

    • 常见Error

      • OutOfMemoryError
      • StackOverflowError
  • Exception

    • 受检异常

      • 需要try…catch…语句捕获并处理,并且可以从异常中恢复
    • RuntimeException

      • IIIegalArgumentException
        非法参数异常

        • NumberFormatException
      • IndexOutOfBoundsException
        数组越界异常

        • ArrayIndexOutBoundsException
      • ArithmeticException
        算术条件异常,如整数除零

      • NullPointerException
        空指针异常

      • ClassNotFoundException
        找不到类异常

      • ArrayStoreException
        数据存储不兼容值异常

      • SecurityException
        安全性异常

    • IOException

      • FileNotFoundException
        文件未找到异常
      • SocketException
      • EOFException
        文件已结束异常

基础常见问题

Java中应该使用什么数据类型来代表价格?

  • 不关心内存和性能的话,使用BigDecimal,否则使用double类型

怎么讲byte转换为String?

  • 使用String接收byte[]参数的构造器来进行转换

Java中怎么样将bytes转换成long类型?

  • String接收bytes的构造器转换成String,在long.parseLong

a=a+b与a+=b的区别

  • +=隐式的将加操作的结果类型强制转换为持有结果的类型,如果两个整型相加,如byte,short或者int,首先会将他们提升到int类型,在执行加法操作

反射

类加载

  • 类加载机制流程

    • 加载

    • 连接

      • 验证
      • 准备
      • 解析
    • 初始化

    • 使用

    • 卸载

class对象的获取

  • 根据类名:类名.class
  • 根据对象:对象.getClass()
  • 根据全限定类名:Class.forName(全限定类名)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值