- 博客(184)
- 收藏
- 关注
原创 Checked Exception 和 Unchecked Exception 有什么区别?
Checked Exception(受检异常)这类异常在编译时就必须被显式地处理或声明抛出。它们都是Exception类或其子类的子类,但不是类或其子类的子类。常见的Checked Exception包括等,这些异常通常表示程序可能处理的可预知的错误或异常情况。编译器会强制开发者在代码中显式处理(如使用try-catch语句)或声明抛出(在方法签名中使用throws关键字)Checked Exception,否则会导致编译错误。常见的受检查异常有:IO 相关的异常、...。
2024-08-02 11:00:54
466
原创 Exception 和 Error 有什么区别?
在 Java 中,所有的异常都有一个共同的祖先java.lang包中的Throwable类。Throwable类有两个重要的子类:
2024-08-02 10:56:09
516
原创 String 类型的变量和常量做“+”运算时发生了什么?
在Java中,当String类型的变量或常量与运算符一起使用时,会发生字符串连接(concatenation)操作。这种操作不是简单地将两个字符串值相加得到一个新的数值,而是将它们的内容合并成一个新的字符串。这个过程可以涉及字符串字面量、字符串变量,或者是它们的混合。具体来说,当运算符用于String:首先,JVM需要确定运算符两边的操作数。这些操作数可以是字符串字面量(如"Hello, ")、字符串变量(如中的name),或者是其他可以转换为String。
2024-08-01 09:21:57
474
原创 String#intern 方法有什么作用?
String.intern()是一个 native(本地)方法,常应用于在字符串优化和内存管理方面。这个方法的作用是将当前字符串对象放到 Java 字符串常量池中(如果它还不在池中),并返回常量池中该字符串的引用。如果字符串常量池中已经包含了一个等于此String对象的字符串,则返回代表池中这个字符串的String对象的引用。
2024-08-01 08:50:30
621
原创 String s1 = new String(“abc“);这句话创建了几个字符串对象?
在Java中,String s1 = new String("abc");这句代码实际上创建了两个字符串对象,尽管从表面上看它似乎只创建了一个。
2024-07-29 09:19:00
641
原创 String#equals() 和 Object#equals() 有何区别?
String#equals()和Object#equals()在Java中扮演了不同的角色,尽管它们都用于比较两个对象是否相等,但它们之间的主要区别在于它们的实现细节和默认行为。
2024-07-29 08:50:01
522
原创 String 为什么是不可变的?
我们知道被 final 关键字修饰的类不能被继承,修饰的方法不能被重写,修饰的变量是基本数据类型则值不能改变,修饰的变量是引用类型则不能再指向其他对象。因此,final 关键字修饰的数组保存字符串并不是 String 不可变的根本原因,因为这个数组保存的字符串是可变的(final 修饰引用类型变量的情况)。
2024-07-28 09:13:29
456
原创 String、StringBuffer、StringBuilder 的区别?
StringBuilder与StringBuffer类似,也是可变的,但它不是线程安全的。与StringBuffer的示例类似,但请注意,如果应用程序是单线程的,那么使用StringBuilder将比使用StringBuffer更高效。的内容被成功修改,从"Hello"变为了"Hello World"。由于StringBuffer是线程安全的,因此它适合在多线程环境中使用。StringBuffer是可变的,并且它是线程安全的。是两个不同的String对象,尽管。
2024-07-28 09:02:32
605
原创 为什么重写 equals() 时必须重写 hashCode() 方法?
在Java中,当你重写方法时,通常也建议重写hashCode()方法,基于Java集合框架中哈希表(如HashMapHashSet等)的工作原理以及hashCode()和equals()方法之间的一致性约定。
2024-07-27 10:33:53
524
原创 hashCode() 有什么用?为什么要有 hashCode?
hashCode()尤其是在处理集合(如HashSet、HashMap、Hashtable和LinkedHashMap等)时。这些方法背后的原理基于哈希表,而哈希表是一种使用哈希函数组织数据,以支持快速插入和查找的数据结构。其作用是获取哈希码(int整数),也称为散列码。这个哈希码的作用是确定该对象在哈希表中的索引位置。
2024-07-27 10:28:39
1068
原创 Object 类的常见方法有哪些?
Object类是Java语言中的根类,即所有类的父类。getClass():返回对象的运行时类对象。这是一个native方法,并且使用了final修饰,意味着它不能被重写。此方法主要用于获取对象的Class对象,进而可以获取类的元数据信息。
2024-07-27 09:50:22
437
原创 深拷贝和浅拷贝区别了解吗?什么是引用拷贝?
如果属性是引用类型(如对象、数组等),拷贝的就是内存地址,即引用本身,而不是引用的对象。因此,如果原始对象中的引用类型属性被修改了,那么浅拷贝得到的对象中的对应属性也会受到影响。深拷贝不仅创建了一个新的对象,而且递归地复制了原对象中的所有引用类型属性所指向的对象,直到这些属性都是基本数据类型为止。这样,深拷贝得到的新对象和原始对象在内存中是完全独立的,对原始对象的任何修改都不会影响到深拷贝得到的对象。但是,如果对象中包含引用类型的属性,那么这些引用类型的属性在浅拷贝后仍然指向原始对象中的内部对象。
2024-07-26 09:53:28
768
原创 接口和抽象类有什么共同点和区别?
接口(Interface)和抽象类(Abstract Class)在面向对象编程中扮演着重要的角色,它们之间既有共同点也存在显著的区别。
2024-07-26 09:44:27
1051
原创 面向对象三大特征
封装提供了对象的基本保护,继承实现了代码的重用,而多态则增强了程序的灵活性和可扩展性。通过合理使用这些特征,可以编写出更加高效、易于维护和扩展的程序。
2024-07-26 09:15:56
724
原创 构造方法有哪些特点?是否可被 override?
构造方法的名字必须与定义它的类名完全相同,包括大小写。:构造方法没有返回类型,连void都不写。这是因为构造方法的主要目的是初始化对象,而不是返回某个值。:构造方法不能由编程人员显式地直接调用,它是在使用new关键字创建对象时由系统自动调用的。:构造方法的主要作用是完成对象的初始化工作,包括为对象的属性(字段)赋初值等。:一个类中可以定义多个构造方法,这些构造方法可以有不同的参数列表(参数个数、类型或顺序不同),从而实现重载。这允许在创建对象时根据需要选择不同的初始化方式。
2024-07-26 09:01:29
387
原创 如果一个类没有声明构造方法,该程序能正确执行吗?
在Java(以及许多其他面向对象编程语言)中,如果一个类没有定义任何构造方法,编译器会自动为该类生成一个默认的构造方法(也称为无参构造方法或无参构造函数)。这个默认的构造方法没有参数,并且执行的操作仅仅是调用父类的无参构造方法(如果父类存在的话)以及执行一些必要的初始化操作(如将对象的成员变量初始化为默认值)。然而,在实际开发中,为了代码的清晰和灵活性,通常建议显式地定义构造方法。:如果类有父类,并且父类没有无参构造方法(即父类只定义了带参数的构造方法),那么子类必须显式地调用父类的某个构造方法
2024-07-25 09:39:01
530
原创 对象的相等和引用相等的区别
当两个对象在逻辑上或内容上相等时,我们称这两个对象是相等的。这通常意味着两个对象具有相同的属性值或满足某种特定的相等条件。
2024-07-25 09:26:57
448
原创 创建一个对象用什么运算符?对象实体与对象引用有何不同?
在大多数编程语言中,特别是像Java、C#这样的面向对象编程语言中,创建对象通常使用new关键字。这个关键字用于实例化一个类的实例,即创建一个对象。例如,在Java中,如果你有一个名为Person的类,你可以这样创建一个Person这里,部分调用了Person类的构造函数来创建Person类的一个新实例,而声明了一个Person类型的变量(即对象引用)来引用这个新创建的对象。
2024-07-25 09:23:03
480
原创 面向对象和面向过程的区别
面向对象(Object Oriented Programming, OOP)和面向过程(Procedure Oriented Programming, POP)是两种不同的编程范式,它们在编程思想、特点、优势及应用场景等方面存在显著差异。
2024-07-25 09:10:48
1667
原创 什么是可变长参数?
可变长参数允许函数调用时接受不确定数量的参数。这些参数可以是位置参数(即按照顺序传递的参数),也可以是关键字参数(即通过键值对形式传递的参数)。在函数定义时,通过特定的语法来接收这些可变数量的参数。
2024-07-24 10:44:39
566
原创 重载和重写有什么区别?
重载:在同一个类中,允许存在多个同名方法,只要它们的参数列表不同(参数个数、参数类型、参数顺序至少有一项不同)。方法的返回类型和访问修饰符可以相同也可以不同,但不能仅通过返回类型来区分重载的方法。重写:在子类中,如果子类的方法与父类中的某个方法具有相同的方法名、返回类型(或兼容的返回类型)以及参数列表,则称子类的方法重写了父类的方法。
2024-07-24 10:41:08
1420
原创 静态方法和实例方法有何不同?
静态方法:属于类本身的方法,与类的实例无关。这意味着在调用静态方法时,不需要创建类的实例。静态方法可以通过类名直接调用,也可以通过对象名调用(但后者在大多数情况下并不推荐,因为它会隐藏类名调用的清晰性)。实例方法:与类的实例(即对象)相关联的方法。在调用实例方法之前,需要先创建类的实例,然后通过这个实例来调用方法。在外部调用静态方法时,可以使用 类名.方法名 的方式,也可以使用 对象.方法名 的方式,而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
2024-07-24 10:32:05
1041
原创 静态方法为什么不能调用非静态成员?
静态方法不能直接调用非静态成员(包括字段、方法和属性),主要是因为静态方法和非静态成员在内存中的。So,静态方法不能直接调用非静态成员,因为它们属于不同的作用域和生命周期阶段。举个例子,假设有一个。类型的参数,并通过这个参数来访问。字段,编译器会报错,因为。字段,那么它就是合法的。类,它有一个非静态字段。
2024-07-24 09:23:58
455
原创 什么是方法的返回值?方法有哪几种类型?
方法的返回值是方法执行完成后返回给调用者的数据。它是方法执行结果的一种表示。如果方法执行完毕后需要向调用者报告执行结果,就可以通过返回值来实现。不是所有的方法都必须有返回值,根据方法的定义和用途,有的方法可能不需要返回任何值,这样的方法称为无返回值方法(或称为void类型的方法)。1、无参数无返回值的方法。2、有参数无返回值的方法。3、有返回值无参数的方法。4、有返回值有参数的方法。
2024-07-24 09:19:06
448
原创 字符型常量和字符串常量的区别?
形式 : 字符常量是单引号引起的一个字符,字符串常量是双引号引起的 0 个或若干个字符。含义 : 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置)。占内存大小:字符常量只占 2 个字节; 字符串常量占若干个字节。
2024-07-24 08:41:56
856
原创 静态变量有什么作用?
静态变量也就是被 static 关键字修饰的变量。它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。也就是说,静态变量只会被分配一次内存,即使创建多个对象,这样可以节省内存
2024-07-24 08:37:28
366
原创 成员变量与局部变量的区别?
成员变量:定义在类中方法之外。成员变量可以是实例变量或类变量,类变量使用static关键字修饰,而实例变量则不使用。它们属于类的一部分,用于描述类的属性或状态。局部变量:定义在方法内部或方法的参数列表中。局部变量包括形参、方法局部变量和代码块局部变量。它们的作用域仅限于定义它们的方法或代码块内。
2024-07-24 08:27:53
1132
原创 为什么浮点数运算的时候会有精度丢失的风险?
浮点数运算精度丢失是常见,特别是在使用像JavaScript这样的语言时,因为它使用IEEE 754标准来表示浮点数。在这个示例中,我们尝试将0.1和0.2相加,但结果并不是预期的0.3,而是。同样,0.7减去0.1的结果也不是预期的0.8,而是。这些精度问题是由于浮点数在计算机中的表示方式导致的。另外,还有一个直接比较浮点数时可能遇到的问题,所以要提供了一个使用误差范围来比较浮点数的函数。这个函数通过比较两个数的差的绝对值是否小于一个很小的数(epsilon)来判断它们是否“相等”。
2024-07-23 17:33:32
782
原创 自动装箱与拆箱了解吗?原理是什么?
自动装箱(Autoboxing)与拆箱(Unboxing)是Java语言中的一个重要特性,它们允许在基本数据类型(如int、char、boolean等)和对应的包装类(如Integer、Character、Boolean等)之间自动进行转换。这种机制简化了编程过程,使得开发者可以更加灵活地在基本数据类型和对象之间进行操作。
2024-07-23 17:20:38
674
原创 包装类型的缓存机制了解么?
包装类型的缓存机制,也称为“缓存池”(Cache Pool),是指Java虚拟机(JVM)为了优化性能和节省内存,会对一定范围内的包装类型对象进行缓存。当需要这些数值的包装类型对象时,JVM会直接从缓存池中返回已经存在的对象,而不是每次都创建一个新的对象。包装类型的缓存机制是Java中一个重要的性能优化手段,它通过缓存一定范围内的包装类对象来减少对象的创建和销毁,从而提高程序的性能和节省内存空间。然而,在使用时需要注意不要依赖缓存机制进行比较,并且要关注数值是否超出缓存范围。
2024-07-23 17:10:32
953
原创 基本类型和包装类型的区别?
Java中的基本类型(Primitive Types)和包装类型(Wrapper Classes)之间存在多个关键区别,这些区别主要体现在包含内容、性质、声明方式、存储位置、初始值、使用方式以及泛型适用性等方面。
2024-07-23 09:08:41
643
原创 Java 中的几种基本数据类型了解么?
在Java中,基本数据类型(Primitive Types)是Java语言预定义的一组数据类型,它们不是对象,而是直接存储在内存中的值。:字节数据类型,占用1个字节(8位)的内存空间,表示的最小值是-128,最大值是127(如果使用无符号数,则范围是从0到255)。:短整型数据类型,占用2个字节(16位)的内存空间,表示的最小值是-32,768,最大值是32,767。
2024-07-23 08:51:23
1067
原创 continue、break 和 return 的区别是什么?| 面经
语句功能使用场景continue跳过当前循环迭代,继续下一次迭代在循环体中遇到某些条件时,不希望执行当前迭代剩余的代码break完全终止最近的循环或switch语句在满足特定条件时提前退出循环或switch语句return从当前函数返回,并可选地返回一个值在函数或方法内部,根据逻辑返回结果或状态。
2024-07-22 09:23:23
529
原创 移位运算符 | 面经
移位运算符是在Java等编程语言中用于对二进制数进行移位操作的一种运算符。。这些运算符在二进制基础上对数字进行平移,通过移动二进制数的位来实现数值的快速乘法、除法等操作。
2024-07-22 09:15:32
654
原创 自增自减运算符 | 面经
自增(Increment)和自减(Decrement)运算符是编程中常见的运算符,用于对变量的值进行加1或减1的操作。在Java、C、C++等多种编程语言中,自增和自减运算符都有两种形式:前缀形式(++x或--x)和后缀形式(x++或x--这两种形式的主要区别在于它们与表达式中其他部分的结合方式。
2024-07-22 09:02:00
366
原创 Java 语言关键字有哪些?| 面经
Java语言中的关键字是已经被Java语言赋予特殊含义的单词,它们不能用作标识符(如变量名、函数名等)的命名。
2024-07-22 08:57:08
565
原创 标识符和关键字的区别是什么?| 面经
标识符:在编程语言中,标识符是用来表示变量、函数、类等命名实体的名称。它由一系列字符组成,通常可以包含字母、数字和下划线,并且必须以字母或下划线开头。例如,在Java中,myVariablesum等都是标识符。关键字:关键字是编程语言中预定义的具有特殊意义的单词。这些单词被保留,不能用作标识符来命名变量、函数或类等。关键字通常用于控制程序的结构、定义数据类型、声明变量等。例如,在Java中,ifforclass等都是关键字。在我们编写程序的时候,需要大量地为程序、类、变量、方法等取名字,于是就有了。
2024-07-22 08:54:03
778
原创 注释有哪几种形式?| 面经
在我们编写代码的时候,如果代码量比较少,我们自己或者团队其他成员还可以很轻易地看懂代码,但是当项目结构一旦复杂起来,我们就需要用到注释了。注释并不会执行(编译器在编译代码之前会把代码中的所有注释抹掉,字节码中不保留注释),是我们程序员写给自己看的,注释是你的代码说明书,能够帮助看代码的人快速地理清代码之间的逻辑关系。综上所述,注释的形式因编程语言的不同而有所差异,但主要包括单行注释、多行注释和文档注释三种形式。文档注释是一种特殊的注释形式,主要用于生成程序文档。单行注释是仅对一行代码进行注释的方式。
2024-07-19 09:45:24
809
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人