![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA基础
秋风清,秋月明。落日夕阳一片红
这个作者很懒,什么都没留下…
展开
-
ChatGPT回答:console.writeline 和 System.out.println区别
【代码】ChatGPT回答:console.writeline 和 System.out.println区别。原创 2023-04-19 04:44:13 · 266 阅读 · 0 评论 -
Dubbo 支持哪些协议,每种协议的应用场景,优缺点?
Dubbo 支持哪些协议,每种协议的应用场景,优缺点?dubbo: 单一长连接和 NIO 异步通讯,适合大并发小数据量的服务调用,以及消费者远大于提供者。传输协议 TCP,异步,Hessian 序列化;rmi: 采用 JDK 标准的 rmi 协议实现,传输参数和返回参数对象需要实现Serializable 接口,使用 java 标准序列化机制,使用阻塞式短连接,传输数据包大小混合,消费者和提供者个数差不多,可传文件,传输协议 TCP。多个短连接,TCP 协议传输,同步传输,适用常规的远程服务原创 2021-11-16 15:09:06 · 399 阅读 · 0 评论 -
异常常见问题
Error 和 Exception 区别是什么?Java中,所有的异常都有一个共同的祖先java.lang包中的Throwable类。Throwable类有两个重要的子类Exception(异常)和Error(错误)。Exception和Error二者都是Java异常处理的重要子类,各自都包含大量子类。Exception:程序本身可以处理的异常,可以通过catch来进行捕获,通常遇到这种错误,应对其进行处理,使应用程序可以继续正常运行。Exception又可以分...原创 2021-09-03 14:54:44 · 307 阅读 · 0 评论 -
序列化原理
Java序列化与反序列化是什么?Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: **序列化:**序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。核心作用是对象状态的保存与重建。我们都知道,Java对象是保存在JVM的堆内存中的,也就是说,如果JVM堆不存在了,那么对象也就跟着消失了。 而序列化提供了一种方案,可以让你在即使JVM停机的情况下也能把对象保存下来的方案。就像我们平时用的U盘一样。把Java对象序原创 2021-09-03 14:53:16 · 628 阅读 · 0 评论 -
浅谈泛型原理
Java中的泛型是什么 ?泛型是JDK1.5的一个新特性,**泛型就是将类型参数化,其在编译时才确定具体的参数。**这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。使用泛型的好处是什么?远在JDK 1.4版本的时候,那时候是没有泛型的概念的,如果使用Object来实现通用、不同类型的处理,有这么两个缺点:每次使用时都需要强制转换成想要的类型 在编译时编译器并不知道类型转换是否正常,运行时才知道,不安全。如这个例子:List list = ...原创 2021-09-03 14:51:57 · 775 阅读 · 0 评论 -
反射原理详谈
什么是反射?反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。反射机制的优缺点有哪些?优点:能够运行时动态获取类的实例,提高灵活性;可与动态编译结合Class.forName('com.mysql.jdbc.Driver.class');,加载[MySQL](https://www.wkcto.com/courses/mysql.html)的驱动类..原创 2021-09-03 14:50:24 · 3317 阅读 · 0 评论 -
int 和 Integer 有什么区别?
Integer是int的包装类;int是基本数据类型; Integer变量必须实例化后才能使用;int变量不需要; Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ; Integer的默认值是null;int的默认值是0。...原创 2021-09-03 14:47:09 · 177 阅读 · 0 评论 -
解释一下自动装箱和自动拆箱?
自动装箱:将基本数据类型重新转化为对象 public class Test { public static void main(String[] args) { // 声明一个Integer对象,用到了自动的装箱:解析为:Integer num = Integer.valueOf(9); Integer num = 9; } } 9是属于基本数据类型的,原则上它是不能直接赋值给一个对象Integ原创 2021-09-03 14:46:34 · 164 阅读 · 0 评论 -
包装类型是什么?基本类型和包装类型有什么区别?
Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,把基本类型转换成包装类型的过程叫做装箱(boxing);反之,把包装类型转换成基本类型的过程叫做拆箱(unboxing),使得二者可以相互转换。Java为每个原始类型提供了包装类型:原始类型:boolean,char,byte,short,int,long,float,double包装类型:Boolean,Character...原创 2021-09-03 14:45:39 · 2136 阅读 · 0 评论 -
String str=“aaa“与 String str=new String(“aaa“)一样吗?new String(“aaa”);创建了几个字符串对象?
使用String a = “aaa” ;,程序运行时会在常量池中查找”aaa”字符串,若没有,会将”aaa”字符串放进常量池,再将其地址赋给a;若有,将找到的”aaa”字符串的地址赋给a。 使用String b = new String("aaa");`,程序会在堆内存中开辟一片新空间存放新对象,同时会将”aaa”字符串放入常量池,相当于创建了两个对象,无论常量池中有没有”aaa”字符串,程序都会在堆内存中开辟一片新空间存放新对象。具体分析,见以下代码: @Test public void原创 2021-09-03 14:44:45 · 827 阅读 · 0 评论 -
什么是字符串常量池?
java中常量池的概念主要有三个:全局字符串常量池,class文件常量池,运行时常量池。我们现在所说的就是全局字符串常量池,对这个想弄明白的同学可以看这篇[Java中几种常量池的区分](http://tangxman.github.io/2015/07/27/the-difference-of-java-string-pool/)。jvm为了提升性能和减少内存开销,避免字符的重复创建,其维护了一块特殊的内存空间,即字符串池,当需要使用字符串时,先去字符串池中查看该字符串是否已经存在,如果存在,则可以直接原创 2021-09-03 14:41:02 · 128 阅读 · 0 评论 -
字符型常量和字符串常量的区别?
断的时候先根据hashcode进行的判断,相同的情况下再根据equals()方法进行判断。如果只重写了equals方法,而不重写hashcode的方法,会造成hashcode的值不同,而equals()方法判断出来的结果为true。在Java中的一些容器中,不允许有两个完全相同的对象,插入的时候,如果判断相同则会进行覆盖。这时候如果只重写了equals()的方法,而不重写hashcode的方法,Object中hashcode是根据对象的存储地址转换而形成的一个哈希值。这时候就有可能因为没有重写hashc原创 2021-09-03 14:40:01 · 2050 阅读 · 0 评论 -
String,StringBuffer, StringBuilder 的区别是什么?
1.可变与不可变。String类中使用字符数组保存字符串,因为有“final”修饰符,所以string对象是不可变的。对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.String类利用了final修饰的char类型数组存储字符,源码如下:private final char value[];StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存原创 2021-09-02 15:51:53 · 85 阅读 · 0 评论 -
hashCode(),equals()两种方法是什么关系?
要弄清楚这两种方法的关系,就需要对哈希表有一个基本的认识。其基本的结构如下:对于hashcode方法,会返回一个哈希值,哈希值对数组的长度取余后会确定一个存储的下标位置,如图中用数组括起来的第一列。不同的哈希值取余之后的结果可能是相同的,用equals方法判断是否为相同的对象,不同则在链表中插入。则有hashCode()与equals()的相关规定:如果两个对象相等,则hashcode一定也是相同的; 两个对象相等,对两个对象分别调用equals方法都返回true; 两个对象有相..原创 2021-09-01 23:28:06 · 164 阅读 · 0 评论 -
为什么要有 hashCode?
以“HashSet 如何检查重复”为例子来说明为什么要有 hashCode:当你把对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,同时也会与其他已经加入的对象的hashcode值作比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同hashcode值的对象,这时会调用equals()方法来检查hashcode相等的对象是否真的相同。如果两者相同,HashSet就不会让其加入操作成功。如果...原创 2021-09-01 23:27:17 · 199 阅读 · 0 评论 -
介绍下hashCode()?
hashCode()的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode()定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode()函数。散列表存储的是键值对(key-value),它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利用到了散列码!(可以快速找到所需要的对象)...原创 2021-09-01 23:26:42 · 129 阅读 · 0 评论 -
== 和 equals 区别是什么?
==常用于相同的基本数据类型之间的比较,也可用于相同类型的对象之间的比较;如果==比较的是基本数据类型,那么比较的是两个基本数据类型的值是否相等; 如果==是比较的两个对象,那么比较的是两个对象的引用,也就是判断两个对象是否指向了同一块内存区域;equals方法主要用于两个对象之间,检测一个对象是否等于另一个对象看一看Object类中equals方法的源码:public boolean equals(Object obj) { return (this == obj);原创 2021-09-01 23:26:13 · 92 阅读 · 0 评论 -
值传递和引用传递的区别的什么?为什么说Java中只有值传递?
值传递:指的是在方法调用时,传递的参数是按值的拷贝传递,传递的是值的拷贝,也就是说传递后就互不相关了。引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的是引用的地址,也就是变量所对应的内存空间的地址。传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。基本类型作为参数被传递时肯定是值传递;引用类型作为参数被传递时也是值传递,只不过“值”为对应的引用。想要深入了解,可以参考这篇文章:http://www.itwanger.com/java/2019.原创 2021-09-01 23:25:27 · 151 阅读 · 0 评论 -
能否创建一个包含可变对象的不可变对象?
当然可以,比如final Person[] persons = new Persion[]{}.persons是不可变对象的引用,但其数组中的Person实例却是可变的.这种情况下需要特别谨慎,不要共享可变对象的引用.这种情况下,如果数据需要变化时,就返回原对象的一个拷贝....原创 2021-09-01 23:24:54 · 369 阅读 · 0 评论 -
java 创建对象有哪几种方式?
java中提供了以下四种创建对象的方式:new创建新对象 通过反射机制 采用clone机制 通过序列化机制前两者都需要显式地调用构造方法。对于clone机制,需要注意浅拷贝和深拷贝的区别,对于序列化机制需要明确其实现原理,在java中序列化可以通过实现Externalizable或者Serializable来实现。...原创 2021-09-01 23:23:16 · 116 阅读 · 0 评论 -
抽象类能使用 final 修饰吗?
不能,定义抽象类就是让其他类继承的,如果定义为final该类就不能被继承,这样彼此就会产生矛盾,所以final不能修饰抽象类原创 2021-09-01 23:22:34 · 2130 阅读 · 0 评论 -
抽象类和接口的区别是什么?
语法层面上的区别:抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法; 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的; 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法; 一个类只能继承一个抽象类,而一个类却可以实现多个接口。设计层面上的区别:抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为原创 2021-09-01 23:21:44 · 134 阅读 · 0 评论 -
重载的方法能否根据返回值类型进行区分?
不能根据返回值类型来区分重载的方法。因为调用时不指定类型信息,编译器不知道你要调用哪个函数。float max(int a, int b);int max(int a, int b);当调用max(1,2);时无法确定调用的是哪个,单从这一点上来说,仅返回值类型不同的重载是不应该允许的。...原创 2021-08-29 17:15:27 · 2191 阅读 · 0 评论 -
重载(Overload)和重写(Override)的区别是什么?
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重写发生在子类与父类之间, 重写方法返回值和形参都不能改变,与方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分。即外壳不变,核心重写! 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。最常用的地方就是构造器的重载。...原创 2021-08-29 17:13:30 · 276 阅读 · 0 评论 -
Java语言是如何实现多态的?
本质上多态分两种:1、编译时多态(又称静态多态)2、运行时多态(又称动态多态)重载(overload)就是编译时多态的一个例子,编译时多态在编译时就已经确定,运行的时候调用的是确定的方法。**我们通常所说的多态指的都是运行时多态,也就是编译时不确定究竟调用哪个具体方法,一直延迟到运行时才能确定。**这也是为什么有时候多态方法又被称为延迟方法的原因。Java实现多态有3个必要条件:继承、重写和向上转型。只有满足这3个条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处...原创 2021-08-29 17:11:21 · 1132 阅读 · 0 评论 -
java静态变量、代码块、和静态方法的执行顺序是什么?
基本上代码块分为三种:Static静态代码块、构造代码块、普通代码块代码块执行顺序静态代码块——> 构造代码块 ——> 构造函数——> 普通代码块 继承中代码块执行顺序:父类静态块——>子类静态块——>父类代码块——>父类构造器——>子类代码块——>子类构造器...原创 2021-08-29 17:09:02 · 400 阅读 · 0 评论 -
是否可以在static环境中访问非static变量?static静态方法能不能引用非静态资源?
static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。...原创 2021-08-29 17:07:56 · 131 阅读 · 0 评论 -
”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。...原创 2021-08-29 17:07:00 · 170 阅读 · 0 评论 -
为什么要用static关键字?
通常来说,用new创建类的对象时,数据存储空间才被分配,方法才供外界调用。但有时我们只想为特定域分配单一存储空间,不考虑要创建多少对象或者说根本就不创建任何对象,再就是我们想在没有创建对象的情况下也想调用方法。在这两种情况下,static关键字,满足了我们的需求。...原创 2021-08-29 17:05:48 · 305 阅读 · 0 评论 -
关键字final、finally、finalize的区别?
final用于修饰变量、方法和类。final 变量:被修饰的变量不可变,不可变分为引用不可变和对象不可变,final 指的是引用不可变,final 修饰的变量必须初始化,通常称被修饰的变量为常量。 final 方法:被修饰的方法不允许任何子类重写,子类可以使用该方法。 final 类:被修饰的类不能被继承,所有方法不能被重写。finally作为异常处理的一部分,它只能在try/catch语句中,并且附带一个语句块表示这段语句最终一定被执行(无论是否抛出异常),经常被用在需要释放资源的情况下...原创 2021-08-29 17:05:08 · 134 阅读 · 0 评论 -
break ,continue ,return 的区别及作用?
break 跳出总上一层循环,不再执行循环(结束当前的循环体) continue 跳出本次循环,继续执行下次循环(结束正在执行的循环 进入下一个循环条件) return 程序返回,不再执行下面的代码(结束当前的方法 直接返回) ...原创 2021-08-28 22:56:18 · 51 阅读 · 0 评论 -
访问修饰符public、private、protected、以及不写(默认)时的区别?
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。default(即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。 private: 在同一类内可见。使用对象:变量、方法。注意:不能修饰类(外部类) public: 对所有类可见。使用对象:类、接口、变量、方法 protected: 对同一包内的类和所有子类可见。使用对象:变量、方法。注意:不能修饰类(外部类)。...原创 2021-08-28 22:55:09 · 1370 阅读 · 0 评论