广州市萝岗区做网站设计服务,淘宝怎么推广自己的产品,与未成年女生开一间房犯法吗,网页qq登陆保护#x1f469;#x1f3fb; 作者#xff1a;一只IT攻城狮 #xff0c;关注我不迷路 ❤️《java面试核心知识》突击系列#xff0c;持续更新… #x1f490; 面试必知必会学习路线#xff1a;Java技术栈面试系列SpringCloud项目实战学习路线 #x1f4dd;再小的收获x365天… 作者一只IT攻城狮 关注我不迷路 ❤️《java面试核心知识》突击系列持续更新… 面试必知必会学习路线Java技术栈面试系列SpringCloud项目实战学习路线 再小的收获x365天都会成就不一样的自己一起学习一起进步。 文章目录 一、JDK 和 JRE 有什么区别二、Java为什么能跨平台三、Java基本数据类型1、Java中数据类型2、八大基本数据类型1数据类型转换2类型提升3基本数据内存中分配4值的初始化 四、java中的异常分类及处理1、异常分类2、异常的处理方式1遇到问题不进行具体处理而是继续抛给调用者 throw,throws2try catch 捕获异常针对性处理方式 3、Throw 和 throws 的区别1位置不同2功能不同 五、 和 equals 的区别是什么1、String的比较2、Integer的比较3、两个对象的 hashCode() 相同则 equals() 也一定为 true对吗 六、创建对象的几种方法1、new关键字2、Class 对象的 newInstance()3、调用 Constructor 对象的 newInstance()4、Clone5、反序列化 七、重载和重写1、重写(Override)2、重载Overload 八、权限修饰符九、String、String StringBuffffer 和 StringBuilder 的区别是什么?十、Collection与Collections的区别1、Collection接口2、Collections集合类 一、JDK 和 JRE 有什么区别
JDKjava development kit (java开发工具)JDK 是用于开发 Java 程序的最小环境。 JREjava runtime environment (java运行时环境)是提供给 Java 程序运行的最小环境。
JRE是java运行时环境而JDK是java开发工具包。运行java程序只需安装JRE。如果需要编写java程序需要安装JDK。但是JRE可以独立安装。
JDK包含JRE同时还包含了编译 Java 源码的编译器 Javac还包含了很多 Java 程序调试和分析的工具。 JRE包含了java虚拟机、java基础类库。是使用java语言编写的程序运行所需要的软件环境是提供给想运行java程序的用户使用的。 Tip:mac怎么查看jdk目录呢 终端输入/usr/libexec/java_home -V会显示jdk版本和所在目录 command shift G前往要去的路径 二、Java为什么能跨平台
Java是跨平台的原因是因为Java代码是运行在JVM上的而不是直接运行在操作系统上。
这意味着Java程序的代码不会直接与操作系统交互而是通过JVM来间接交互。java是半编译语言java源程序在经过java编译器编译后成为java字节码文件再由运行在不同平台上的虚拟机例如windows、Linnux将相同的字节码解释运行转换成具体平台上的机器指令。从而实现了一次编写到处运行。
三、Java基本数据类型
1、Java中数据类型 2、八大基本数据类型
整型的byte、short、int、long字符型的char浮点型的float、double布尔型的boolean。 将6种数据类型按取值范围的大小顺序排列一下 double float long int short byte
1数据类型转换
取值范围从小转换到大是可以直接转换的 在自动类型转化中、int– float、long– float、long– double、float -- double 可能精度损失外自动转换不会出现任何运行时异常。而从大转成小则必须使用强制转换。
2类型提升
在表达式计算过程中会发生类型转换这些类型转换就是类型提升类型提升规则如下 所有 byte/short/char 的表达式都会被提升为 int 除以上类型其他类型在表达式中都会被提升为取值范围大的那个类型例如有一个操作数为double整个表达式都会被提升为double
3基本数据内存中分配
基本数据类型它存放于“栈”中而不是存放于“堆”中。
4值的初始化
当基本数据类型作为类成员变量时java 会对其进行初始化。且初始化的值分别为 而局部变量 在没有被显示初始化情况下jdk 同样也会自动赋予他默认值可不同之处就在于你无法引用他因为编译器会在你要引用的位置报错。
四、java中的异常分类及处理
1、异常分类
异常执行中发生的不正常情况。 Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Error 和 Exception
Error:JVM系统内部错误、资源耗尽等严重情况。比如Stack OverflowError和 Out Of Memory。 Exception:空指针访问、试图读取不存在的文件、网络连接中断、数组下标越界等。
程序执行过程是先编译后执行。所以从程序执行的过程可以将异常进一步分为 编译时异常执行javac.exe命名时可能出现的异常 运行时异常执行java.exe命名时出现的异常
2、异常的处理方式
1遇到问题不进行具体处理而是继续抛给调用者 throw,throws
抛出异常有三种形式一是 throw,一个 throws还有一种系统自动抛异常。
public static void main(String[] args) {
String s abc;
if(s.equals(abc)) {
throw new NumberFormatException();
} else {
System.out.println(s);
}
}
int div(int a,int b) throws Exception{
return a/b;} 2try catch 捕获异常针对性处理方式
3、Throw 和 throws 的区别
1位置不同
throws 用在函数上后面跟的是异常类可以跟多个而 throw 用在函数内后面跟的 是异常对象。
2功能不同
throws 用来声明异常让调用者只知道该功能可能出现的问题可以给出预先的处理方式throw 抛出具体的问题对象执行到 throw功能就已经结束了跳转到调用者并将具体的问题对象抛给调用者。也就是说 throw 语句独立存在时下面不要定义其他语句因为执行不到。
throws 表示出现异常的一种可能性并不一定会发生这些异常throw 则是抛出了异常执行 throw 则一定抛出了某种异常对象。
两者都是消极处理异常的方式只是抛出或者可能抛出异常但是不会由函数去处理异常真正的处理异常由函数的上层调用处理。
五、 和 equals 的区别是什么 对于基本类型比较的是值是否相同 对于引用类型比较的是引用是否相同
关联知识点
1、String的比较
String x string;
String y string;
String z new String(string);
System.out.println(x y); // true
System.out.println(x z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true原因String 、Integer 等重写了 Object 的 equals 方法把引用比较改成了值比较。所以一般情况下 equals 比较的是值是否相等。
2、Integer的比较
Integer a1 1;
Integer a2 1;
Integer b1 128;
Integer b2 128;
System.out.println(al a2); //true
System.out.println(b1 b2); //false原因Integer类内部通过静态内部类提供了一个缓存池范围在-128~127之间如果超过这个范围 Integer值都是new出来的新对象。
Integer的valueOf方法的具体实现
public static Integer valueOf(int i) {if(i -128 i IntegerCache.high)return IntegerCache.cache[i 128];elsereturn new Integer(i);}其中IntegerCache类的实现为
private static class IntegerCache {static final int high;static final Integer cache[];static {final int low -128;// high value may be configured by propertyint h 127;if (integerCacheHighPropValue ! null) {// Use Long.decode here to avoid invoking methods that// require Integers autoboxing cache to be initializedint i Long.decode(integerCacheHighPropValue).intValue();i Math.max(i, 127);// Maximum array size is Integer.MAX_VALUEh Math.min(i, Integer.MAX_VALUE - -low);}high h;cache new Integer[(high - low) 1];int j low;for(int k 0; k cache.length; k)cache[k] new Integer(j);}private IntegerCache() {}}从这2段代码可以看出在通过valueOf方法创建Integer对象的时候如果数值在[-128,127]之间 便返回指向IntegerCache.cache中已经存在的对象的引用否则创建一个新的Integer对象。
3、两个对象的 hashCode() 相同则 equals() 也一定为 true对吗
不对。我们两个字符串的哈希值很可能一样但是反过来不一定成立。
String str1 通话;
String str2 重地;
System. out. println(String. format(str1%d | str2%d, str1. hashCode(),str2. hashCode()));
System. out. println(str1. equals(str2));执行的结果
str11179395 | str21179395
false六、创建对象的几种方法
1、new关键字
使用new关键字创建对象是最常见也是最简单的创建对象的方式。
2、Class 对象的 newInstance()
使用Class对象的newInstance()方法来创建该 Class 对象对应类的实例但是这种方法要求该Class对象对应的类有默认的空构造器。
3、调用 Constructor 对象的 newInstance()
先使用 Class 对象获取指定的 Constructor 对象再调用 Constructor 对象的newInstance()方法来创建 Class 对象对应类的实例,通过这种方法可以选定构造方法创建实例。
//获取 Person 类的 Class 对象
Class clazzClass.forName(reflection.Person);
//使用.newInstane 方法创建对象
Person p(Person) clazz.newInstance();
//获取构造方法并创建对象
Constructor cclazz.getDeclaredConstructor(String.class,String.class,int.class);
//创建对象并设置属性
Person p1(Person) c.newInstance(测试,男,10);4、Clone
无论何时我们调用一个对象的clone方法JVM就会创建一个新的对象将前面的对象的内容全部拷贝进去用clone方法创建对象并不会调用任何构造函数。
5、反序列化
当我们序列化和反序列化一个对象JVM会给我们创建一个单独的对象。在反序列化时JVM创建对象并不会调用任何构造函数。
七、重载和重写
1、重写(Override)
从字面上看重写就是重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法但有时子类并不想原封不动的继承父类中的某个方法所以在方法名 参数列表返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下 对方法体进行修改或重写这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。
public class Father {
public static void main(String[] args) {
// TODO Auto-generated method stub
Son s new Son();
s.sayHello();
}
public void sayHello() {
System.out.println(Hello);
}
}
class Son extends Father{
Override
public void sayHello() {
// TODO Auto-generated method stub
System.out.println(hello by );
}
}重写总结 1.发生在父类与子类之间 2.方法名参数列表返回类型除过子类中方法的返回类型是父类中返回类型的子类必须相同 3.访问修饰符的限制一定要大于被重写方法的访问修饰符publicprotecteddefaultprivate) 4.重写方法一定不能抛出新的检查异常或者比被重写方法明更加宽泛的检查型异常 2、重载Overload
在一个类中同名的方法如果有不同的参数列表参数类型不同、参数个数不同甚至是参数顺序不同则视为重载。同时重载对返回类型没有要求可以相同也可以不同但不能通过返回类型是否相同来判断重载。
public class Father {
public static void main(String[] args) {
// TODO Auto-generated method stub
Father s new Father();
s.sayHello();
s.sayHello(wintershii);
}
public void sayHello() {
System.out.println(Hello);
}
public void sayHello(String name) {
System.out.println(Hello name);
}
}重载总结 1.重载Overload是一个类中多态性的一种表现 2.重载要求同名方法的参数列表不同(参数类型参数个数甚至是参数顺序) 3.重载的时候返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准 八、权限修饰符
Java规定的4种权限 (从小到大排列) : private、缺省(default)、protected、 public Java权限修饰符public、protected、default、private置于类的成员定义前用来限定对象对该类成员的访问权限。 对于class的权限修饰只可以用public和default(缺省)。 public类可以在任意地方被访问。 default类只可以被同一个包内部的类访问。 4种权限可以用来修饰类及类的内部结构: 属性、方法、构造器、内部类
具体的4种权限都可以用来修饰类的内部结构属性、方法、构造器、内部类修饰类的话只能使用default、 public。 总结封装性:Java提供了4种权限修饰符来修饰类及类的内部结构体现类及类的内部结构在被调用时的可见性 九、String、String StringBuffffer 和 StringBuilder 的区别是什么?
String和StringBuffer和StringBuilder的区别 因为String是不可变的,StringBuffer 和 StringBuilder 它们都是可变的字符串。
String是只读字符串它并不是基本数据类型而是一个对象。从底层源码来看是一个fifinal类型的字符数组所引用的字符串不能被改变一经定义无法再增删改。每次对String的操作都会生新的String对象。
private final char value[];StringBuffffer和StringBuilder他们两都继承了AbstractStringBuilder抽象类他们的底层都是可变的字符数组
/**
* The value is used for character storage.
*/
char[] value; 所以在进行频繁的字符串操作时建议使用StringBuffffer和StringBuilder来进行操作。
StringBuffffer 对方法加了同步锁或者对调用的方法加了同步锁所以是线程安全 StringBuilder 并没有对方法进行加同步锁所以是非线程安全的。
十、Collection与Collections的区别
1、Collection接口
Collection是集合类的上级接口子接口有 Set、List、LinkedList、ArrayList、Vector、Stack、 Set 2、Collections集合类
Collections是集合类的一个帮助类 它包含有各种有关集合操作的静态多态方法用于实现对各种集合的搜索、排序、线程安全化等操作。此类不能实例化(因为Collections的构造方法被私有化处理了)就像一个工具类服务于Java的Collection框架, Collections类中的方法都是被static修饰了可以直接用类名调用。
Collections类常用方法
public static void shuffle(List)。混乱排序public static boolean addAll(Collection c, T… elements)。添加一些元素public static void sort(List listComparator? super T 。 排序将集合中元素按照指定规则排序public static T extends Comparable? super T void sort(List list)。 排序将集合中元素按照默认规则排序public static int binarySearch(List list, Object key)。查找使用二分搜索法搜索指定的 List 集合以获得指定对象在 List 集合中的索引。如果要使该方法可以正常工作则必须保证 List 中的元素已经处于有序状态。public static void copy(List ? super T dest,List? extends T src) 复制 用于将指定集合中的所有元素复制到另一个集合中。public static void replaceAll()。替换替换集合中所有的旧元素为新元素。