JAVA基础

== 和 equals 的区别是什么?

  • ==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同。
  • ==是指对内存地址进行比较 , equals()是对字符串的内容进行比较
  • ==指引用是否相同, equals()指的是值是否相同
    用一张图可以简要的表现他们之间的关系:

两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

  • hashCode()返回该对象的哈希码值;equals()返回两个对象是否相等。
  • HashCode 用于在散列的存储结构中确定对象的存储地址。
  • 如果两个对象equals()相等,那么两个对象的hashCode()方法返回的结果也必然相等。
  • 如果两个对象的 hashCode()相同,则 equals()却不一定相等。
  • 如果重写equals()方法,必须重写hashCode()方法,以保证equals方法相等时两个对象hashcode返回相同的值。

接口和抽象类有什么区别?

  • 接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
  • 抽象类是什么:

抽象类不能创建实例,它只能作为父类被继承。抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类的随意性。

(1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法

(2) 抽象类不能被实例化

(3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类

(4) 具体派生类必须覆盖基类的抽象方法

(5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们

  • 接口是什么:

(1) 接口不能被实例化

(2) 接口只能包含方法声明

(3) 接口的成员包括方法、属性、索引器、事件

(4) 接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员

  • 接口和抽象类的区别:

(1)抽象类可以有构造方法,接口中不能有构造方法。

(2)抽象类中可以有普通成员变量,接口中没有普通成员变量

(3)抽象类中可以包含静态方法,接口中不能包含静态方法

(4)一个类可以实现多个接口,但只能继承一个抽象类。

(5)接口可以被多重实现,抽象类只能被单一继承

(6)如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法

JDK和JRE有什么区别?

  • JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。
  • JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。
    具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。

String类的常用方法有哪些?

  • equals:字符串是否相同
  • equalsIgnoreCase:忽略大小写后字符串是否相同
  • compareTo:根据字符串中每个字符的Unicode编码进行比较
  • compareToIgnoreCase:根据字符串中每个字符的Unicode编码进行忽略大小写比较
  • indexOf:目标字符或字符串在源字符串中位置下标
  • lastIndexOf:目标字符或字符串在源字符串中最后一次出现的位置下标
  • valueOf:其他类型转字符串
  • charAt:获取指定下标位置的字符
  • codePointAt:指定下标的字符的Unicode编码
  • concat:追加字符串到当前字符串
  • isEmpty:字符串长度是否为0
  • contains:是否包含目标字符串
  • startsWith:是否以目标字符串开头
  • endsWith:是否以目标字符串结束
  • format:格式化字符串
  • getBytes:获取字符串的字节数组
  • getChars:获取字符串的指定长度字符数组
  • toCharArray:获取字符串的字符数组
  • join:以某字符串,连接某字符串数组
  • length:字符串字符数
  • matches:字符串是否匹配正则表达式
  • replace:字符串替换
  • replaceAll:带正则字符串替换
  • replaceFirst:替换第一个出现的目标字符串
  • split:以某正则表达式分割字符串
  • substring:截取字符串
  • toLowerCase:字符串转小写
  • toUpperCase:字符串转大写
  • trim:去字符串首尾空格

&和&&的区别?

&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,

例如,对于if(str != null && !str.equals(""))表达式,

  当str为null时,后面的表达式不会执行,所以不会出现NullPointerException。

  如果将&&改为&,则会抛出NullPointerException异常。

If(x == 33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长。

抽象类必须要有抽象方法吗?

  • 抽象类必须有关键字abstract来修饰。
  • 抽象类可以不含有抽象方法。
  • 如果一个类包含抽象方法,则该类必须是抽象类。

普通类和抽象类有哪些区别?

  • 抽象类不能被实例化。
  • 抽象类可以有抽象方法,抽象方法只需申明,无需实现
  • 含有抽象方法的类必须申明为抽象类。
  • 抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类。
  • 抽象方法不能被声明为静态。
  • 抽象方法不能用private修饰。
  • 抽象方法不能用final修饰。

String str="i"与 String str=new String(“i”)一样吗?

  • 如果内存中没有“i”字符串,二者没有区别,都是在内存中为“i”字符串分配空间,str指向“i”的内存地址。
  • 区别在于,如果内存中存在“i”字符串,第一种方式不会创建新的对象,直接指向之前的那个对象;而第二种方式会在再为“i”字符串分配空间,str指向新的“i”的内存地址,这样内存中就有两个“i”字符串了。

Exception和Error的区别

Exception和Error都继承自Throwable,在Java中只有Throwable类型的实例才可以被抛出或捕获。
Error指正常情况下不太可能出现的情况,绝大部分的Error会导致程序奔溃,处于非正常的不可恢复的状态,如OutOfMemoryError、StackOverflowError。是程序中不应该试图捕获的严重问题。
Exception是程序正常运行中可以预料的意外情况,可以捕获并处理。

运行时异常和一般异常的区别

  • 不受检查异常:不受检查异常通常是在编码中可以避免的逻辑错误,根据需求来判断如何处理,不需要再编译期强制要求。

  • 受检查异常:在编译时被强制检查的异常。在方法的声明中声明的异常。(举例:ClassNotFoundException、IOException)

写出几种常见的运行时异常

运行时异常RuntimeException时所有不受检查异常的基类。
NullPointerException、ClassCastException、NumberFormatException、IndexOutOfBoundsException。

原文地址:https://www.cnblogs.com/gkgkgk/p/13565891.html