基础语法

基础语法

JRE与JDK的区别

  • JRE(Java Runtime Environment):Java运行环境,包含JVM+基础类库
  • JDK(Java Development Kit):Java 开发工具包,包含JRE+Java源码的编译器javac + 监控工具jconsole + 分析工具 + jvisualvm

== 与 equals的区别

  • ==
    • 当比较基本数据类型时,比较其值是否相等
    • 当比较引用数据类型时,比较其引用是否相同,即比较地址值是否相同
    • 不能比较没有父子关系的两个类
  • equals
    • JDK中的类一般已经重写了equals(), 比较的是内容
    • 自定义类如果没有重写equals(),将调用父类的equals()方法, Object的equals方法比较使用了 this == obj
    • 可以按照逻辑要求,重写对象的equals方法,(重写equals方法,一般需重写hashCode方法)

什么是装箱?什么是拆箱?装箱拆箱的执行过程

  • 装箱:基本数据类型转化为包装器类型的过程
  • 拆箱:包装器类型转化为基本数据类型的过程
  • 装箱是通过包装器类的ValueOf方法实现的
  • 拆箱是通过包装器类的xxxValue方法实现的

final在Java中的作用

  • final修饰变量:表示为常量,须在定义的时候初始化,不能改变
  • final修饰方法:不能被重写
  • final修饰类:不能被继承,表示最终类

final,finally,finalize()的区别

  • final 表示最终的,不可改变的。用于修饰类、方法和变量
  • finally异常处理的一部分,他只能用在try - catch中
  • finalize():对象被回收的时候,会被调用

final 与 static 的区别

  • static
    • 表示静态或全局,被修饰的属性和方法属于类,可以直接使用类名.静态属性/方法名访问
    • 修饰的代码块表示静态代码块,当Java虚拟机加载类时,就会执行该代码块,只会被执行一次
    • 修饰的属性,也就是类变量,是在类加载时被创建并进行初始化,只会被创建一次
    • 修饰的变量可以重新赋值
    • static方法中不能使用this和super关键字
    • static方法必须被实现,而不能是抽象的abstract
    • static 方法只能被static方法覆盖
  • final
    • final修饰表示常量,一旦创建不可改变
    • final标记的成员变量必须在声明的同时赋值,或在该类的构造方法中赋值,不可重新赋值
    • final修饰的方法不能被重写
    • final类不能被继承,没有子类,final类中的方法默认是final的

对于try和finally至少一个语句块包含return语句的情况

  • finally语句块会执行
  • finally没有return, finally对return变量的重新赋值修改无效
  • try 和 finally都包含return ,return 值会以finally语句块return值为准

String对象中的replace和replaceAll的区别

  • replace 方法:支持字符和字符串
  • replaceAll方法:基于正则表达式的字符串替换

Java中操作字符串都有哪些类?

  • String: final修饰,String类的方法都是返回new String。即对String对象的任何变化都不影响原对象,对字符串的修改操作都会生成新的对象
  • StringBuffer:对字符串的操作的方法都加了synchronized,保证了线程安全
  • StringBuilder:不保证线程安全,在方法体内需要进行字符串的修改操作,可以new StringBuilder对象,调用StringBuilder对象的append(), replace(), delete()等方法修改字符串

如何实现字符串的反转

  • 利用字符数组
  • 利用StringBuilder
  • 利用递归

String类的常用的方法

  • equals()
  • equalsIgnoreCase()
  • compareTo(): 根据字符串中每个字符的Unicode编码进行比较
  • compareToIgnoreCase():
  • indexOf():
  • lastIndexOf()
  • valueOf()
  • charAt()
  • concat()
  • isEmpty()
  • contains()
  • startsWith()
  • endsWidth()
  • format(): 格式化字符串
  • getBytes()
  • getChars()
  • toCharsArray()
  • replace
  • length
  • join
  • trim

普通类与抽象类的区别

  • 抽象类不能被实例化
  • 含有抽象方法的一定为抽象类
  • 抽象方法不能被声明为静态
  • 抽象方法不能用private
  • 抽象方法不能用final修饰

接口与抽象类有什么区别

  • 接口中不能含有构造方法,而抽象类中可以有
  • 接口中没有普通成员变量,而抽象类中可以有
  • 接口中的方法必须都是抽象的,而抽象类中可以含有非抽象方法
  • 接口中的抽象方法只能是public类型的
  • 抽象类和接口都可以包含静态成员变量,抽象类中的静态成员变量可以是任意访问权限,接口中变量默认是public static final类型
  • 一个类可以实现多个接口,用逗号隔开,但只能继承一个抽象类
  • 接口不可以实现接口,但可以继承接口并且可以继承多个接口,用逗号隔开

javap的作用是什么?

  • javap是Java class文件分解器,可以反编译,也可以查看Java编译器生成的字节码等

常见的异常类

  • Throwable是异常的根类
  • Throwable包含子类 错误Error和异常Exception
  • Exception又分为一般异常和运行时异常

什么是反射?有什么作用

  • Java反射,就是运行状态中
    • 获取任意类的名称,package信息,所有属性,方法,注解。类型。类加载器,modifiers, 父类,现实接口等
    • 获取任意对象的属性,并且能改变对象的属性
    • 调用任意对象的方法
    • 判断任意一个对象所属的类
    • 实例化任意一个类的对象
  • Java的动态就体现在反射。通过反射我们可以实现动态装配,降低代码的耦合度,动态代理等。反射的过度使用会严重消耗系统资源
  • JDK中java.lang.Class类,就是为了实现反射提供的核心类之一

动态代理是什么?应用场景

  • 动态代理:在运行时,创建目标类,可以调用和扩展目标类的方法
  • Java中实现动态的方式:
    • JDK中的动态代理
    • Java类库CGLib
  • 应用场景
    • 统计每个api的请求耗时
    • 统一的日志输出
    • 校验被调用的api是否已经登录和权限鉴定
    • Spring的AOP功能模块就是采用动态代理的机制来实现切面编程

怎样实现动态代理

  • JDK动态代理
  • CGLib动态代理
  • 使用Spring aop模块完成动态代理功能

什么是Java序列化?什么情况下需要序列化

  • 序列化:将Java对象转化成字节流的过程
  • 反序列化:将字节流转化成Java对象的过程
  • 当Java对象需要在网络上传输或者持久化存储到文件中时,就需要对Java对象进行序列化处理
  • 序列化的实现:类实现Serializable接口,这个接口没有需要实现的方法。

Java跨平台运行的原理

  • .java源文件要先编译成与操作系统无关的.class字节码文件,然后字节码文件通过Java虚拟机解释成机器码运行
  • .class字节码文件面向虚拟机,不面向任何具体操作系统
  • 不同平台的虚拟机是不同的,但它们给JDK提供了相同的接口
  • Java跨平台依赖于不同系统的Java虚拟机

Java的安全性体现在哪里

  • 使用了引用取代了指针,指针的功能强大,但也容易造成错误
  • 拥有一套异常处理机制,使用关键字throw, throws, try, catch, finally
  • 强制类型转化需要符合一定规则
  • 字节码传输使用了加密机制
  • 运行环境提供保障机制:字节码校验器->类装载器->运行时内存布局->文件访问限制
  • 不用程序员显示控制内存释放,JVM有垃圾回收机制

类与对象的关系

  • 类是对象的抽象;对象是类的具体实例
  • 类是抽象的,不占用内存;对象是具体的,占用存储空间
  • 类是一个定义包括在一类对象中的方法和变量的模板
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值