我是靠谱客的博主 负责飞鸟,最近开发中收集的这篇文章主要介绍1.Java基础Java基础考核点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java基础考核点

1.JDK、JRE、JVM三者之间的关系?

JDK(java development kit):java开发工具包
作用:开发,运行java程序,里面包括java运行环境JRE、java工具(编译工具(javac.exe)、打包工具(jar.exe)等)和java基础类库(java开发者使用的
功能性类库)。
JRE(java runtime environment):java运行环境
作用:运行java程序,里面包括java虚拟机JVM的实现和java核心类库(JVM工作所需的类)。
JVM(java virtual machine):java虚拟机
作用:运行java程序,不包含类库和命令,是java跨平台特性的核心,通过JVM屏蔽了底层系统(windows、linux、Max等等)的差异,实现一次编译,到处
运行。JVM可以理解为在操作系统上模拟安装了一个CPU来处理java程序相关的东西,它主要负责将java程序生成的字节码文件解释成具体系统平台上的
机器指令。
JDK包含了JRE,JRE中包含了JVM

2.&和&&的区别

Java中&和&&都是逻辑与,需要左右两边同时满足条件才可以得到true的结果。但是,它们之间也有区别:
1、&&也叫短路与,当&&左边的条件不满足时,就不会判定右边的条件。而&不一样,无论&左边的条件是否满足,它都会判定右边的条件。
2、&可用于位运算,当左右两边的条件不是布尔型,而是数字时,它会进行位运算。
&和|是位运算;&&和||表示逻辑关系。&&和||表达式最终的值只可能是真(1)或者假(0),而&和|位运算表达式的值不限于0和1。

3.对于整数i,i++和++i有什么区别?

赋值顺序不同:
++i是先加后赋值;i++是先赋值后加;++i和i++都是分两步完成的。
因为++i是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i=a=b,即++i是一个左值;i++的后面一步是自增,不是左值。

4.简述Java语言的数据类型?对基本数据类型,分别占几个字节?

Java数据类型包括基本数据类型和引用数据类型两大类。
基本数据类型有8个,可以分为4个小类,分别是整数类型(byte/short/int/long)、浮点类型(float/double)、字符类型(char)、
布尔类型(boolean)。其中,4个整数类型中,int类型最为常用。2个浮点类型中,double最为常用。另外,在这8个基本类型当中,
除了布尔类型之外的其他7个类型,都可以看做是数字类型,它们相互之间可以进行类型转换。
引用类型就是对一个对象的引用,根据引用对象类型的不同,可以将引用类型分为3类,即数组、类、接口类型。引用类型本质上就是通过指针,
指向堆中对象所持有的内存空间,只是Java语言不再沿用指针这个说法而已。
对于基本数据类型,每种类型所占据的内存空间如下:
byte:1字节(8位),数据范围是 -2^7 ~ 2^7-1。
short:2字节(16位),数据范围是 -2^15 ~ 2^15-1。
int:4字节(32位),数据范围是 -2^31 ~ 2^31-1。
long:8字节(64位),数据范围是 -2^63 ~ 2^63-1。
float:4字节(32位),数据范围大约是 -3.4*10^38 ~ 3.4*10^38。
double:8字节(64位),数据范围大约是 -1.8*10^308 ~ 1.8*10^308。
char:2字节(16位),数据范围是 u0000 ~ uffff。
boolean:Java规范没有明确的规定,不同的JVM有不同的实现机制。

5.整数的默认类型为?浮点数默认类型?

整数的默认类型为int,浮点数的默认类型为double

6.String与StringBuffer区别?

String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,
而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。
总结:
运行速度快慢为:StringBuilder > StringBuffer > String
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

7.String s=new String(“xyz”);创建了几个String对象?

1.在String常量池中,如果已经存在"xyz"对象,则不会再创建"xyz"对象,仅创建new String("xyz")对象;
2.在String常量池中,如果不存在"xyz"对象,则会创建"xyz"对象和new String("xyz")对象。
常量池和new的String对象都存在于堆中。

8.什么是字符串常量池?

 字符串常量池位于堆内存中,专门用来存储字符串常量,可以提高内存的使用率,避免开辟多块空间存储相同的字符串。
在创建字符串时JVM会首先检查字符串常量池,如果该字符串已经存在池中,则返回它的引用。如果不存在,则实例化一个字符串放到池中,并返回其引用。
实现的基础:
1.实现该优化的基础是因为字符串是不可变的,可以不用担心数据冲突进行共享;
2.运行时实例创建的全局字符串常量池中有一个表,总是为池中每个唯一的字符串对象维护一个引用,这就意味着它们一直引用着字符串常量池中的对象,
所以,在常量池中的这些字符串不会被垃圾收集器回收

9.StringBuffer和StringBuilder区别?

StringBuffer:线程安全,性能低;
StringBuilder:线程不安全,性能高。
原因:StringBuffer的所有公开方法都是synchronized修饰的,所以所有公开方法都是同步的;而StringBuilder并没有synchronized修饰,
没有对方法加锁同步;所以StringBuilder的性能要远大于StringBuffer。

10.==和equals的区别?

一、对象类型不同
1、equals():是超类Object中的方法。
2、==:是操作符。
二、比较的对象不同
1、equals():equals方法不能用于基本数据类型的变量,只能用于比较引用类型,默认比较的是两个对象的地址;(在没有重写的前提下)
2、==:用于比较引用和比较基本数据类型时具有不同的功能,具体如下:
(1)基础数据类型:比较的是他们的值是否相等,比如两个int类型的变量,比较的是变量的值是否一样。
(2)引用数据类型:比较的是引用的地址是否相同,比如说新建了两个User对象,比较的是两个User的地址是否一样。
扩展资料:
equals()和==的源码定义:
public boolean equals(Object obj) {
return (this == obj);
}
由equals的源码可以看出这里定义的equals与==是等效的,不同的原因就在于有些类(像String、Integer等类)对equals进行了重写,
比较的是值是否相等。
但是没有对equals进行重写的类就只能从Object类中继承equals方法,其equals方法与==就也是等效的,除非在此类中重写equals。

11.final关键字作用

final关键字的特性:final只可以赋值一次,一旦赋值就无法改变其值
1.final关键字修饰变量:被final修饰的变量必须要初始化,赋值后不能再重新赋值
1)如果修饰的变量是基本数据类型,值不能改变
2)如果修饰的成员变量是引用数据类型,表示引用地址不能改变,但是引用所指向的对象的里面的内容还是可以改变的
2.final关键字修饰方法:被final修饰的方法不能重写
3.final关键字修饰类:用final修饰一个类的时候,表示这个类不能被继承 ,要注意的是被final修饰的类,它的成员方法也都会被隐式的指定为final方法

12.String能被继承吗?

不可以,因为String类有final修饰符,而final修饰的类是不能被继承的。
因为String类的不可变性,才能使得JVM可以实现字符串常量池;字符串常量池可以在程序运行时节约很多内存空间,因为不同的字符串变量指向相同的
字面量时,都是指向字符串常量池中的同一个对象。这样一方面能够节约内存,另一方面也提升了性能。
因为String类的不可变性,从而保证了字符串对象在多线程环境下是线程安全的。

13.String类有哪些常用方法?【字符串是否熟】

int length():返回字符串的长度
int indexOf(int ch):返回某个字符第一次出现的位置的下标,若无,返回-1
int lastIndexOf(String str):查找最后一个指定字符串的位置
boolean isEmpty():判断某个字符串是否为空
boolean startsWith(String str):是否以某个字符串开头
boolean endsWith(String str):是否以某个字符串结尾
String toUpperCase():转成大写
String toLowerCase():转成小写
String trim():返回一个去掉前后空格的新串
String[] spilt(String regex):拆分字符串
String substring(int beginIndex,int endIndex):截取一段字符串(不包括endIndex)
char charAt(int index):返回index处的字符
String repalce(CharSequence target,CharSequence replacement):用replacement替换字符串中所有的target
boolean contains(CharSequence s):字符串中含有子串s时,返回true

14.Java程序执行流程|类加载过程

1.源码(*.java)编译后得到字节码文件(*.class)
2.类加载器加载字节码文件、字节码校验器对字节码进行校验
3.字节码解释器将字节码翻译为目标机器码在系统运行
类加载器?三种类型的类加载器:引导类加载器,扩展类加载器,系统类加载器,自定义类加载器

15.什么是递归?用递归求:1,1,2,3,5,…数列的第30个数?

方法直接或间接的调用自身的行为称为递归。
递归的三要素:
1.明确递归终止条件
2.给出递归终止时的处理办法
3.提取重复的逻辑,缩小问题规模
public int F(int n){
if(n==1){
return 1;
}else if(n==2){
return 1;
}else{
return F(n-1)+F(n-2);
}
}

16.结束循环的常用方式有哪些?

break语句用来结束循环,即不再执行后边的所有循环。
continue语句用来结束当前循环,并进入下一次循环。
return结束循环,return只能写在函数当中,因为它是直接结束整个函数,相当于循环也结束了。

17.switch语句判断表达式支持的数据类型有哪些?

switch⽀持的10种数据类型:
基本数据类型:byte、short、char、int
包装类:Byte、Short、Character、Integer
枚举类型:Enum
字符串类型:String(JDK1.7以后开始⽀持)

18.用冒泡法实现对数组排序【快速排序】

//冒泡排序:
public static void bubbleSort(int arr[]) {
for(int i = 0; i < arr.length-1; i++) {//控制比较轮次,一共 n-1 趟
for(int j = 0; j < arr.length-1-i; j++) {//控制两个挨着的元素进行比较
if(arr[j]>arr[j+1]) {
int temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
//快速排序:
public class hom9 {
public static void main(String[] args) {
int[] nums={7,6,8,9,4,0,2,3,1};
quickSort(nums,0,nums.length-1);
System.out.println(Arrays.toString(nums));
}
public static void quickSort(int[] nums,int start, int end) {
if (start < end) {
int index = getIndex(nums, start, end);
quickSort(nums, start, index - 1);
quickSort(nums, index + 1, end);
}
}
private static int getIndex(int[] nums, int start, int end) {
int tmp = nums[start];
while (start < end) {
while (start < end && nums[end] >= tmp) {
end--;
}
nums[start] = nums[end];
while (start < end && nums[start] <= tmp) {
start++;
}
nums[end] = nums[start];
}
nums[start] = tmp;
return start;
}
}

最后

以上就是负责飞鸟为你收集整理的1.Java基础Java基础考核点的全部内容,希望文章能够帮你解决1.Java基础Java基础考核点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部