java基础

Java基础(10道题)。

、jdk、jre、jvm有什么区别?

  1. JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。
  2. JRE(Java Runtime Environment)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。
  3. JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序。所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。

二、==和equals有什么区别?

Java语言提供了八种基本类型。六种数字类型byte、short、int、long、float、double(四个整数型,两个浮点型),一种字符类型char,还有一种布尔型boolean。

  1. 比较基本类型只能用==,比较结果你看到的字面值相等就会相等。基本类型不是对象所以不存在用equals比较
  2. 比较引用类型(对象),==比较的是两个引用是不是指向同一个内存地址,equals比较的是两个引用的字面值是不是相同,什么叫字面值?你能看到的值就是字面值,比如:String s=“abc”; abc就是字面值.
  3. 基本类型的包装类型是对象类型,所以除非两个相同字面值的引用指向同一内存地址,值才会相等

“==”操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用 双等号操作符。
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。
三、说说final在Java中的作用?

final关键字可以用来修饰引用、方法和类

用来修饰一个引用

  1. 如果引用为基本数据类型,则该引用为常量,该值无法修改;
  2. 如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。
  3. 如果引用时类的成员变量,则必须当场赋值,否则编译会报错。

用来修饰一个方法
当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。

用来修饰类
当用final修改类时,该类成为最终类,无法被继承。简称为“断子绝孙类”。比如常用的String类就是最终类。
四、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:去字符串首尾空格

五、Java中操作字符的类有哪些?他们有什么区别?

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

这三个类都是以char[]的形式保存的字符串
但是String类型的字符串是不可变的,对String类型的字符床做修改操作都是相当于重新创建对象。
而对StringBuffer和StringBuilder进行增删操作都是对同一个对象做操作。StringBuffer中的方法大部分都使用synchronized关键字修饰,所以StringBuffer是线程安全的。
StringBuilder中的方法则没有,线程不安全,但是StringBuilder因为没有使用使用synchronized关键字修饰,所以性能更高,在单线程环境下会选择使用StringBuilder,多线程环境下使用StringBuffer。
如果生命的这个字符串几乎不做修改操作,那么就直接使用String,因为不调用new关键字声明String类型的变量的话它不会在堆内存中创建对象,直接指向String的常量池,并且可以复用.效率更高。

六、如何将字符串反转?
使用 StringBuilder 或 StringBuffer 的 reverse 方法,本质都调用了它们的父类 AbstractStringBuilder 的 reverse 方法实现。(JDK1.8)
不考虑字符串中的字符是否是 Unicode 编码,自己实现。
递归
七、普通类和抽象类有什么区别?

  1. 抽象类必须用public、procted 修饰(如果为private修饰,那么子类则无法继承,也就无法实现其抽象方法)。默认缺省为 public
  2. 抽象类无法创建对象
  3. 如果一个子类继承抽象类,那么必须实现其所有的抽象方法。如果有未实现的抽象方法,那么必须定义为 abstract

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

在Java中,被关键字abstract修饰的类称为抽象类;被abstract修饰的方法称为抽象方法,抽象方法只有方法声明没有方法体。

抽象类有以下几个特点:
1)、抽象类不能被实例化,只能被继承。
2)、包含抽象方法的类一定是抽象类,但抽象类不一定包含抽象方法(抽象类可以包含普通方法)。
3)、抽象方法的权限修饰符只能为public或者protected,默认情况下为public。
4)、一个类继承于一个抽象类,则子类必须实现抽象类的抽象方法,如果子类没有实现父类的抽象方法,那子类必须定义为抽象类。
5)、抽象类可以包含属性、方法、构造方法,但构造方法不能用来实例化对象,只能被子类调用。

接口可以看成是一种特殊的类,只能用interface关键字修饰。接口是提供给别人调用的。Java中的接口具有以下几个特点:
1)、接口中可以包含变量和方法,变量被隐式指定为public static final,方法被隐式指定为public abstract(JDK 1.8之前);
2)、接口支持多继承,即一个接口可以继承(extends)多个接口,间接解决了Java中类不能多继承的问题;
3)、一个类可以同时实现多个接口,一个类实现某个接口则必须实现该接口中的抽象方法,否则该类必须被定义为抽象类;
4)、JDK 1.8中对接口新增了两个特性:
(1)默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法。
(2)静态方法(static method):JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。
5)、在JDK 1.9中,再次对接口进行了增强,可以实现private method和private static method。因为JDK 1.8中可以对接口中的方法进行实现,那么当我们不希望实现的方法暴露给外部时,则可以将方法定义为private。

两者之间的区别:
1、抽象类中可以包含普通方法,但接口中只能包含public abstract方法(JDK 1.8之前);
2、抽象类中的成员变量没有访问权限的限制,但接口中的变量只能被public static final修饰;
3、一个接口可以继承多个接口,但一个类只能有一个父类,类可以实现多个接口;
4、抽象类是对一类事物的抽象,接口则是对行为的抽象。一个类继承一个抽象类代表“是不是”的关系,而一个类实现一个接口则表示“有没有”的关系。

九、Java中的io流分几种?
按照流的流向分,可以分为输入流和输出流;
按照操作单元划分,可以划分为字节流和字符流;
按照流的角色划分为节点流和处理流。
InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

十、list、set、map之间有什么区别?
数组的大小是固定的,并且同一个数组只能是相同的数据类型
集合的大小是不固定的,在不知道会有多少数据的情况下可使用集合。
集合的三种类型:list(列表)、set(集)、map(映射)

List接口和Set接口属于Collection接口,Map接口和Collection接口并列存在(同级)。

  1. List(元素可重复性,有序性)
    1)可以允许重复的对象。
    2)可以插入多个null元素。
    3)是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
    4)常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。
  2. Set(具有唯一性,无序性)
    1)不允许重复对象
    2)无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序。
    3)只允许一个 null 元素
    4)Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序容器。
  3. Map(采用键值对<key,value>存储元素,key键唯一)
    1)Map不是collection的子接口或者实现类。Map是一个接口。
    2)Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。
    3)TreeMap 也通过 Comparator 或者 Comparable 维护了一个排序顺序。
    4)Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。
    5)Map 接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值