![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java基础面试题
基础知识面试题
Mr.Aholic
全栈开发工程师 主java后端。喜欢旅游,已经旅游的城市地点:河南老家、广州、佛山、深圳、上海、山西、长沙、张家界、武汉、新疆-乌鲁木齐、新疆-吐鲁番、云南-昆明,郑州等。备考明年的 高级系统分析师 和 系统架构师【2022届毕业生---软件工程专业】
展开
-
【Java基础面试四十九】、 说一说Java的四种引用方式
弱引用:弱引用和软引用很像,但弱引用的引用级别更低。当然,并不是说当一个对象只有弱引用时,它就会立即被回收,正如那些失去引用的对象一样,必须等到系统垃圾回收机制运行时才会被回收。虚引用主要用于跟踪对象被垃圾回收的状态,虚引用不能单独使用,虚引用必须和引用队列联合使用。强引用:这是Java程序中最常见的引用方式,即程序创建一个对象,并把这个对象赋给一个引用变量,程序通过该引用变量来操作实际的对象。当一个对象被一个或一个以上的引用变量所引用时,它处于可达状态,不可能被系统垃圾回收机制回收。利己利人、所谓双赢。原创 2023-10-22 21:45:29 · 55 阅读 · 0 评论 -
【Java基础面试四十八】、 Java反射在实际项目中有哪些应用场景?
主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。面向切面编程(AOP)的实现方案,是在程序运行时创建目标对象的代理类,这必须由反射机制来实现。多数框架都支持注解/XML配置,从配置中解析出来的类是字符串,需要利用反射机制实例化;使用JDBC时,如果要创建数据库的连接,则需要先通过反射机制加载数据库的驱动程序;原创 2023-10-22 21:42:24 · 118 阅读 · 0 评论 -
【Java基础面试四十七】、 说一说你对Java反射机制的理解
这行代码将会生成一个p变量,该变量的编译时类型为Person,运行时类型为Student。有时,程序在运行时接收到外部传入的一个对象,该对象的编译时类型是Object,但程序又需要调用该对象的运行时类型的方法。第一种做法是假设在编译时和运行时都完全知道类型的具体信息,在这种情况下,可以先使用instanceof运算符进行判断,再利用强制类型转换将其转换成其运行时类型的变量即可。第二种做法是编译时根本无法预知该对象和类可能属于哪些类,程序只依靠运行时信息来发现该对象和类的真实信息,这就必须使用反射。原创 2023-10-22 21:39:41 · 45 阅读 · 0 评论 -
【Java基础面试四十六】、 List<? super T>和List<? extends T>有什么区别?
数组和泛型有所不同,假设Foo是Bar的一个子类型(子类或者子接口),那么Foo[]依然是Bar[]的子类型,但G 不是 G 的子类型。Foo[]自动向上转型为Bar[]的方式被称为型变,也就是说,Java的数组支持型变,但Java集合并不支持型变。在Java的早期设计中,允许把Integer[]数组赋值给Number[]变量,此时如果试图把一个Double对象保存到该Number[]数组中,编译可以通过,但在运行时抛出ArrayStoreException异常。代表一个未知的类型,但它必须是T的子类型。原创 2023-10-22 21:38:07 · 134 阅读 · 0 评论 -
【Java基础面试四十五】、 介绍一下泛型擦除
在严格的泛型代码里,带泛型声明的类总应该带着类型参数。如果没有为这个泛型类指定实际的类型,此时被称作raw type(原始类型),默认是声明该泛型形参时指定的第一个上限类型。从逻辑上来看,List 是List的子类,如果直接把一个List对象赋给一个List对象应该引起编译错误,但实际上不会。当把一个具有泛型信息的对象赋给另一个没有泛型信息的变量时,所有在尖括号之间的类型信息都将被扔掉。比如一个 List 类型被转换为List,则该List对集合元素的类型检查变成了泛型参数的上限(即Object)。原创 2023-10-22 21:36:20 · 75 阅读 · 0 评论 -
【Java基础面试四十四】、 说一说你对泛型的理解
从Java 5开始,Java引入了“参数化类型”的概念,允许程序在创建集合时指定集合元素的类型,Java的参数化类型被称为泛型(Generic)。Java集合之所以被设计成这样,是因为集合的设计者不知道我们会用集合来保存什么类型的对象,所以他们把集合设计成能保存任何类型的对象,只要求具有很好的通用性。Java集合有个缺点—把一个对象“丢进”集合里之后,集合就会“忘记”这个对象的数据类型,当再次取出该对象时,该对象的编译类型就变成了Object类型(其运行时类型没变)。有兴趣的可以关注一下。原创 2023-10-22 21:34:01 · 40 阅读 · 0 评论 -
【Java基础面试四十三】、 static和final有什么区别?
静态内部类:被static修饰的内部类叫静态内部类。类变量属于类,它随类的信息存储在方法区,并不随对象存储在堆中,类变量可以通过类名来访问,也可以通过对象名来访问,但建议通过类名访问它。static关键字可以修饰成员变量、成员方法、初始化块、内部类,被static修饰的成员是类的成员,它属于类、不属于单个对象。类方法属于类,可以通过类名访问,也可以通过对象名访问,建议通过类名访问它。final变量:final关键字修饰的变量,一旦获得了初始值,就不可以被修改。变量分为成员变量、局部变量。原创 2023-10-22 21:24:24 · 59 阅读 · 0 评论 -
【Java基础面试四十二】、 static修饰的类能不能被继承?
static关键字的作用是把类的成员变成类相关,而不是实例相关,即static修饰的成员属于整个类,而不属于单个对象。而内部类的上一级程序单元是外部类,使用static修饰可以将内部类变成外部类相关,而不是外部类实例相关。如果使用static来修饰一个内部类,则这个内部类就属于外部类本身,而不属于外部类的某个对象。因此使用static修饰的内部类被称为类内部类,有的地方也称为静态内部类。2、静态内部类不能访问外部类的实例成员,只能访问它的静态成员;1、静态内部类可以包含静态成员,也可以包含非静态成员;原创 2023-10-22 21:16:16 · 466 阅读 · 0 评论 -
【Java基础面试四十一】、说一说你对static关键字的理解
对static关键字而言,有一条非常重要的规则:类成员(包括成员变量、方法、初始化块、内部类和内部枚举)不能访问实例成员(包括成员变量、方法、初始化块、内部类和内部枚举)。在Java类里只能包含成员变量、方法、构造器、初始化块、内部类(包括接口、枚举)5种成员,而static可以修饰成员变量、方法、初始化块、内部类(包括接口、枚举),以static修饰的成员就是类成员。类成员属于整个类,而不属于单个对象。主要分享开发知识、学习资料、毕业设计指导等。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。原创 2023-10-22 21:13:48 · 197 阅读 · 0 评论 -
【Java基础面试四十】、在finally中return会发生什么?
当Java程序执行try块、catch块时遇到了return或throw语句,这两个语句都会导致该方法立即结束,但是系统执行这两个语句并不会结束该方法,而是去寻找该异常处理流程中是否包含finally块,如果没有finally块,程序立即执行return或throw语句,方法终止;在通常情况下,不要在finally块中使用return、throw等导致方法终止的语句,一旦在finally块中使用了return、throw语句,将会导致try块、catch块中的return、throw语句失效。原创 2023-10-22 21:12:06 · 192 阅读 · 0 评论 -
【Java基础面试三十九】、 finally是无条件执行的吗?
如果在try块或catch块中使用 System.exit(1);来退出虚拟机,则finally块将失去执行的机会。但是我们在实际的开发中,重来都不会这样做,所以尽管存在这种导致finally块无法执行的可能,也只是一种可能而已。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。不管try块中的代码是否出现异常,也不管哪一个catch块被执行,甚至在try块或catch块中执行了return语句,finally块总会被执行。原创 2023-10-22 21:10:10 · 132 阅读 · 0 评论 -
【Java基础面试三十八】、请介绍Java的异常接口
Java认为Checked异常都是可以被处理(修复)的异常,所以Java程序必须显式处理Checked异常。如果程序没有处理Checked异常,该程序在编译时就会发生错误,无法通过编译。Runtime异常则更加灵活,Runtime异常无须显式声明抛出,如果程序需要捕获Runtime异常,也可以使用try…,一般是指与虚拟机相关的问题,如系统崩溃、虚拟机错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断。主要分享开发知识、学习资料、毕业设计指导等。是异常的顶层父类,代表所有的非正常情况。原创 2023-10-22 21:08:21 · 94 阅读 · 0 评论 -
【Java基础面试三十七】、说一说Java的异常机制
其中,try块用于包裹业务代码,catch块用于捕获并处理某个类型的异常,finally块则用于回收资源。当业务代码发生异常时,系统会创建一个异常对象,然后由JVM寻找可以处理这个异常的catch块,并将异常对象交给这个catch块处理。程序运行时,经常会发生一系列方法调用,从而形成方法调用栈。异常从发生异常的方法向外传播,首先传给该方法的调用者,再传给上层调用者,以此类推。在这种情况下,如果当前方法不知道该如何处理这个异常,可以在方法签名上通过throws关键字声明抛出异常,则该异常将交给JVM处理。原创 2023-10-22 21:06:37 · 116 阅读 · 0 评论 -
【Java基础面试三十六】、遇到过异常吗,如何处理?
将关闭资源的代码写在finally块内,可以满足这种需求,即无论是否发生异常,finally块内的代码总会被执行。在catch块中处理异常时,应该先记录日志,便于以后追溯这个异常。比如,给变量赋予一个默认值、直接返回空值、向外抛出一个新的业务异常交给调用者处理,等等。将业务代码包裹在try块内部,当业务代码中发生任何异常时,系统都会为此异常创建一个异常对象。创建异常对象之后,JVM会在try块之后寻找可以处理它的catch块,并将异常对象交给这个catch块处理。有兴趣的可以关注一下。利己利人、所谓双赢。原创 2023-10-22 21:04:59 · 135 阅读 · 0 评论 -
【Java基础面试三十五】、谈谈你对面向接口编程的理解
接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极好地降低程序各模块之间的耦合,从而提高系统的可扩展性和可维护性。基于这种原则,很多软件架构设计理论都倡导“面向接口”编程,而不是面向实现类编程,希望通过面向接口编程来降低程序的耦合。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。原创 2023-10-22 21:02:58 · 171 阅读 · 0 评论 -
【Java基础面试三十四】、接口中可以有构造函数吗?
由于接口定义的是一种规范,因此接口里不能包含构造器和初始化块定义。接口里可以包含成员变量(只能是静态常量)、方法(只能是抽象实例方法、类方法、默认方法或私有方法)、内部类(包括内部接口、枚举)定义。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。原创 2023-10-19 22:05:58 · 408 阅读 · 0 评论 -
【Java基础面试三十三】、接口和抽象类有什么区别?
抽象类作为多个子类的抽象父类,可以被当成系统实现过程中的中间产品,这个中间产品已经实现了系统的部分功能,但这个产品依然不能当成最终产品,必须有更进一步的完善,这种完善可能有几种不同方式。抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承的不足。接口里只能定义静态常量,不能定义普通成员变量;接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。原创 2023-10-19 22:00:15 · 190 阅读 · 1 评论 -
【Java基础面试三十二】、new String(“abc“) 是去了哪里,仅仅是在堆里面吗?
在执行这句话时,JVM会先使用常量池来管理字符串直接量,即将"abc"存入常量池。然后再创建一个新的String对象,这个对象会被保存在堆内存中。并且,堆中对象的数据会指向常量池中的直接量。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。原创 2023-10-19 21:56:59 · 88 阅读 · 1 评论 -
【Java基础面试三十一】、String a = “abc“; ,说一下这个过程会创建什么,放在哪里?
JVM会使用常量池来管理字符串直接量。在执行这句话时,JVM会先检查常量池中是否已经存有"abc",若没有则将"abc"存入常量池,否则就复用常量池中已有的"abc",将其引用赋值给变量a。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。原创 2023-10-19 21:55:48 · 102 阅读 · 1 评论 -
【Java基础面试三十】、 两个字符串相加的底层是如何实现的?
如果拼接的字符串中包含变量,则在编译时编译器采用StringBuilder对其进行优化,即自动创建StringBuilder实例并调用其append()方法,将这些字符串拼接在一起。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。如果拼接的都是字符串直接量,则在编译时编译器会将其直接优化为一个完整的字符串,和你直接写一个完整的字符串是一样的。原创 2023-10-19 21:53:46 · 91 阅读 · 1 评论 -
【Java基础面试二十九】、说一说你对字符串拼接的理解
当拼接的字符串超过缓冲区的容量时,会触发缓冲区的扩容机制,即缓冲区加倍。缓冲区频繁的扩容会降低拼接的性能,所以如果能提前预估最终字符串的长度,则建议在创建可变字符串对象时,放弃使用默认的容量,可以指定缓冲区的容量为预估的字符串的长度。concat方法的拼接逻辑是,先创建一个足以容纳待拼接的两个字符串的字节数组,然后先后将两个字符串拼到这个数组里,最后将此数组转换为字符串。如果拼接的都是字符串直接量,则在编译时编译器会将其直接优化为一个完整的字符串,和你直接写一个完整的字符串是一样的,所以效率非常的高。原创 2023-10-19 21:50:24 · 60 阅读 · 0 评论 -
【Java基础面试二十八】、使用字符串时,new和““推荐使用哪种方式?
当使用 new String(“hello”) 时,JVM会先使用常量池来管理 “hello” 直接量,再调用String类的构造器来创建一个新的String对象,新创建的String对象被保存在堆内存中。主要分享开发知识、学习资料、毕业设计指导等。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。显然,采用new的方式会多创建一个对象出来,会占用更多的内存,所以一般建议使用直接量的方式创建字符串。当Java程序直接使用 “hello” 的字符串直接量时,JVM将会使用常量池来管理这个字符串;原创 2023-10-19 21:47:28 · 54 阅读 · 1 评论 -
【Java基础面试二十七】、说一说StringBuffer和StringBuilder有什么区别
StringBuffer、StringBuilder都代表可变的字符串对象,它们有共同的父类 AbstractStringBuilder,并且两个类的构造方法和成员方法也基本相同。不同的是,StringBuffer是线程安全的,而StringBuilder是非线程安全的,所以StringBuilder性能略高。一般情况下,要创建一个内容可变的字符串,建议优先考虑StringBuilder类。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。原创 2023-10-19 21:43:44 · 50 阅读 · 0 评论 -
【Java基础面试二十六】、说一说String和StringBuffer有什么区别
StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。主要分享开发知识、学习资料、毕业设计指导等。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。原创 2023-10-19 21:42:13 · 89 阅读 · 1 评论 -
【Java基础面试二十五】、String可以被继承吗?
当字符串不可变时,字符串常量池才有意义。由于字符串无论在任何 Java 系统中都广泛使用,会用来存储敏感信息,如账号,密码,网络路径,文件处理等场景里,保证字符串 String 类的安全性就尤为重要了,如果字符串是可变的,容易被篡改,那我们就无法保证使用字符串进行操作时,它是安全的,很有可能出现 SQL 注入,访问危险文件等操作。由于 String 天然的不可变,当一个线程”修改“了字符串的值,只会产生一个新的字符串对象,不会对其他线程的访问产生副作用,访问的都是同样的字符串数据,不需要任何同步操作。原创 2023-10-19 21:39:45 · 120 阅读 · 1 评论 -
【Java基础面试二十四】、String类有哪些方法?
String replaceFirst(String regex, String replacement):用指定字符串替换第一个匹配的子串;String replaceAll(String regex, String replacement):用指定字符串替换所有的匹配的子串。String[] split(String regex):以指定的规则将此字符串分割成数组;int indexOf(String str):返回子串在此字符串首次出现的索引;String trim():删除字符串前导和后置的空格;原创 2023-10-19 21:37:45 · 149 阅读 · 1 评论 -
【Java基础面试二十三】、==和equals()有什么区别?
主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。进行重写后,一般会按照对象的内容来进行比较,若两个对象内容相同则认为对象相等,否则认为对象不等。作用于引用数据类型时,是比较两个对象的内存地址是否相同,即判断它们是否为同一个对象;没有重写时,Object默认以 == 来实现,即比较两个对象的内存地址是否相同;作用于基本数据类型时,是比较两个数值是否相等;原创 2023-10-19 21:35:46 · 39 阅读 · 0 评论 -
【Java基础面试二十二】、为什么要重写hashCode()和equals()?
Object类提供的equals()方法默认是用==来进行比较的,也就是说只有两个对象是同一个对象时,才能返回相等的结果。而实际的业务中,我们通常的需求是,若两个不同的对象它们的内容是相同的,就认为它们相等。由于hashCode()与equals()具有联动关系(参考“说一说hashCode()和equals()的关系”一题),所以equals()方法重写时,通常也要将hashCode()进行重写,使得这两个方法始终满足相关的约定。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。原创 2023-10-19 21:32:44 · 133 阅读 · 0 评论 -
【Java基础面试二十一】、说一说hashCode()和equals()的关系
HashSet首先会调用对象的hashCode()方法获取其哈希码,并通过哈希码确定该对象在集合中存放的位置。若不等说明对象不重复,但是它们存储的位置发生了碰撞,此时HashSet会采用链式结构在同一位置保存多个对象,即将新加对象链接到原来对象的之后。之后,再有新添加对象也映射到这个位置时,就需要与这个位置中所有的对象进行equals()比较,若均不相等则将其链到最后一个对象之后。实际上,HashSet是通过获取对象的哈希码,以及调用对象的equals()方法来解决这个判断问题的。有兴趣的可以关注一下。原创 2023-10-19 21:30:48 · 42 阅读 · 0 评论 -
【Java基础面试二十】、介绍一下Object类中的方法
String toString():返回该对象的字符串表示,当程序使用System.out.println()方法输出一个对象,或者把某个对象和字符串进行连接运算时,系统会自动调用该对象的toString()方法返回该对象的字符串表示。Object类的toString()方法返回 运行时类名@十六进制hashCode值 格式的字符串,但很多类都重写了Object类的toString()方法,用于返回可以表述该对象信息的字符串。在默认情况下,Object类的hashCode()方法根据该对象的地址来计算。原创 2023-10-19 21:28:25 · 175 阅读 · 0 评论 -
【Java基础面试十九】、构造方法能不能重写?
因为构造方法需要和类保持同名,而重写的要求是子类方法要和父类方法保持同名。如果允许重写构造方法的话,那么子类中将会存在与类名不同的构造方法,这与构造方法的要求是矛盾的。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。原创 2023-10-17 22:31:47 · 682 阅读 · 1 评论 -
【Java基础面试十八】、说一说重写与重载的区别
若子类方法想要和父类方法构成重写关系,则它的方法名、参数列表必须与父类方法相同。另外,返回值要小于等于父类方法,抛出的异常要小于等于父类方法,访问修饰符则要大于等于父类方法。还有,若父类方法的访问修饰符为private,则子类不能对其重写。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。,若多个方法之间方法名相同、参数列表不同,则它们构成重载的关系。重载与方法的返回值以及访问修饰符无关,即重载的方法不能根据返回类型进行区分。原创 2023-10-17 22:29:58 · 162 阅读 · 1 评论 -
【Java基础面试十七】、Java为什么是单继承,为什么不能多继承?
其次,Java在设计时借鉴了C++的语法,而C++是支持多继承的。Java语言之所以摒弃了多继承的这项特征,是因为多继承容易产生混淆。比如,两个父类中包含相同的方法时,子类在调用该方法或重写该方法时就会迷惑。准确来说,Java是可以实现"多继承"的。因为尽管一个类只能有一个直接父类,但是却可以有任意多个间接的父类。这样的设计方式,避免了多继承时所产生的混淆。首先,Java是单继承的,指的是Java中一个类只能有一个直接的父类。Java不能多继承,则是说Java中一个类不能直接继承多个父类。原创 2023-10-17 22:28:34 · 381 阅读 · 0 评论 -
【Java基础面试十六】、Java中的多态是怎么实现的?
多态的实现离不开继承,在设计程序时,我们可以将参数的类型定义为父类型。在调用程序时,则可以根据实际情况,传入该父类型的某个子类型的实例,这样就实现了多态。对于父类型,可以有三种形式,即普通的类、抽象类、接口。对于子类型,则要根据它自身的特征,重写父类的某些方法,或实现抽象类/接口的某些抽象方法。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。原创 2023-10-17 22:22:09 · 61 阅读 · 0 评论 -
【Java基础面试十五】、 说一说你对多态的理解
这个obj引用变量的编译时类型是BaseClass,而运行时类型是SubClass,当运行时调用该引用变量的方法时,其方法行为总是表现出。但对于程序的开发者来说,这显得繁琐,因为实际上这个司机可以驾驶更多的交通工具。子类型的实例,对于调用者来说一样的方便,但对于开发者来说,代码却变得十分的简洁了。调用时,我们可以传入Vehicle类型的实例,也可以传入任意的。多态可以提高程序的可扩展性,在设计程序时让代码更加简洁而优雅。方法,类似的代码会堆积的越来越多,显得臃肿。这样的方式来调用,对调用者足够的友好。原创 2023-10-17 22:16:36 · 200 阅读 · 0 评论 -
【Java基础面试十四】、 封装的目的是什么,为什么要有封装?
封装是面向对象编程语言对客观世界的模拟,在客观世界里,对象的状态信息都被隐藏在对象内部,外界无法直接操作和修改。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。封装实际上有两个方面的含义:把该隐藏的隐藏起来,把该暴露的暴露出来。这两个方面都需要通过使用Java提供的访问控制符来实现。让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对成员变量的不合理访问;把方法暴露出来,让方法来控制对这些成员变量进行安全的访问和操作。将对象的成员变量和实现细节隐藏起来,不允许外部直接访问;原创 2023-10-17 22:12:54 · 465 阅读 · 0 评论 -
【Java基础面试十三】、面向对象的三大特征是什么?
抽象也是面向对象的重要部分,抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。例如,需要考察Person对象时,不可能在程序中把Person的所有细节都定义出来,通常只能定义Person的部分数据、部分行为特征,而这些数据、行为特征是软件系统所关心的部分。多态指的是子类对象可以直接赋给父类变量,但运行时依然表现出子类的行为特征,这意味着同一个类型的对象在执行同一个方法时,可能表现出多种行为特征。有兴趣的可以关注一下。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。原创 2023-10-17 22:09:43 · 357 阅读 · 0 评论 -
【Java基础面试十二】、说一说你对面向对象的理解
它从现实世界中客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以现实世界中的事物为中心来思考,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的类,作为系统的基本构成单元,这使得软件系统的组件可以直接映像到客观世界,并保持客观世界中事物及其相互关系的本来面貌。由于结构化设计采用自顶向下的设计方式,所以当用户的需求发生改变,或需要修改现有的实现方式时,都需要自顶向下地修改模块结构,这种方式的维护成本相当高。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。原创 2023-10-17 22:08:11 · 235 阅读 · 0 评论 -
【Java基础面试十一】、int和Integer有什么区别,二者在做==运算时会得到什么结果?
主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。类型,然后再进行比较。原创 2023-10-17 16:54:15 · 93 阅读 · 0 评论 -
【Java基础面试十】、何对Integer和Double类型判断相等?
主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。不能转为字符串进行比较,因为转为字符串后,浮点值带小数点,整数值不带,这样它们永远都不相等;进行直接比较,因为它们是不同的数据类型;方法,但该方法只能对相同类型进行比较。先转为转换为相同的基本数据类型(如。整数、浮点类型的包装类,都继承于。方法进行比较,虽然它们都有。类型分别定义了将数字转换为。原创 2023-10-17 16:47:06 · 253 阅读 · 0 评论