Java面试300题(2020年版,3-5年面试题重点突破)

目录

  • Java知识点汇总
  • 1 JDK、JRE、JVM关系是什么/li>
  • 2 继承的的特点和好处,弊端/li>
  • 3 局部变量和成员变量的区别
  • 4 Java支持的数据类型有哪些么是自动拆装箱/li>
  • 5 类变量(静态变量)和实例变量(对象变量,成员变量)的区别/li>
  • 6 static关键字的特点意事项是什么什么好处和弊端/li>
  • 7 如何实现对象克隆/li>
  • 8 访问修饰符public,private,protected,以及不写(默认)时的区别
  • 9 Java中如何实现序列化,有什么意义/li>
  • 10 抽象类和接口的区别
  • 11 两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句 话对不对/li>
  • 12 类和对象的关系/li>
  • 13 封装就是私有,对吗什么/li>
  • 14 什么是封装装的原则处
  • 15 Java中参数传递的问题
  • 16 构造方法,set方法都可以给成员变量赋值,这两种赋值方式有什么区别/li>
  • 17 静态代码块和构造代码块的区别/li>
  • 18 java 中实现多态的机制是什么
  • 19 String 是最基本的数据类型吗/li>
  • 20 float f=3.4;是否正确
  • 21 int和Integer有什么区别/li>
  • 22 switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上/li>
  • 23 数组有没有length()方法tring有没有length()方法/li>
  • 24 在Java中,如何跳出当前的多重嵌套循环/li>
  • 25 构造器(constructor)是否可被重写(override)
  • 26 是否可以继承String类/li>
  • 27 String和StringBuilder、StringBuffer的区别/li>
  • 28 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分/li>
  • 29 char 型变量中能不能存贮一个中文汉字,为什么/li>
  • 30 抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本
  • 31 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用/li>
  • 32 String s = new String(“xyz”);创建了几个字符串对象/li>
  • 33 接口是否可继承(extends)接口象类是否可实现(implements)接口/li>
  • 34 一个”.java”源文件中是否可以包含多个类(不是内部类)什么限制/li>
  • 35 Java 中的final关键字有哪些用法/li>
  • 36 比较一下Java和JavaSciprt。
  • 37 什么时候用断言(assert)/li>
  • 38 阐述final、finally、finalize的区别。
  • 39 Java中是如何支持正则表达式操作的/li>
  • 40 获得一个类的类对象有哪些方式/li>
  • 41 什么是值传递和引用传递/li>
  • 42 Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别/li>
  • 43 线程的sleep()方法和yield()方法有什么区别/li>
  • 44 当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B/li>
  • 45 请说出与线程同步以及线程调度相关的方法。
  • 46 编写多线程程序有几种实现方式/li>
  • 47 synchronized关键字的用法/li>
  • 48 举例说明同步和异步。
  • 49 启动一个线程是调用run()还是start()方法/li>
  • 50 什么是线程池(thread pool)/li>
  • 51 线程的基本状态以及状态之间的关系/li>
  • 52 简述synchronized 和java.util.concurrent.locks.Lock的异同/li>
  • 53 线程和进程有什么区别/li>
  • 54 用Runnable还是Thread/li>
  • 55 Thread 类中的start() 和 run() 方法有什么区别/li>
  • 56  Java中Runnable和Callable有什么不同/li>
  • 57 Java中的volatile 变量是什么/li>
  • 58 什么是线程安全ector是一个线程安全类吗/li>
  • 59 一个线程运行时发生异常会怎样/li>
  • 60 如何在两个线程间共享数据/li>
  • 61 Java中notify 和 notifyAll有什么区别/li>
  • 62 什么是ThreadLocal变量/li>
  • 63 什么是FutureTask/li>
  • 64 如何避免死锁/li>
  • 65 Java中活锁和死锁有什么区别
  • 66 怎么检测一个线程是否拥有锁/li>
  • 67 你如何在Java中获取线程堆栈/li>
  • 68 有三个线程T1,T2,T3,怎么确保它们按顺序执行/li>
  • 69 如果你提交任务时,线程池队列已满。会时发会生什么/li>
  • 70 Java线程池中submit() 和 execute()方法有什么区别/li>
  • 71 什么是阻塞式方法/li>
  • 72 多线程中的忙循环是什么/li>
  • 73 如何在Java中创建线程安全的Singleton/li>
  • 74 写出3条你遵循的多线程最佳实践
  • 75 如何强制启动一个线程/li>
  • 76 Java中用到的线程调度算法是什么
  • 77 List、Set、Map是否继承自Collection接口/li>
  • 78 阐述ArrayList、Vector、LinkedList的存储性能和特性。
  • 79 Collection和Collections的区别/li>
  • 80 List、Map、Set三个接口存取元素时,各有什么特点/li>
  • 81 TreeMap和TreeSet在排序时如何比较元素ollections工具类中的sort()方法如何比较元素/li>
  • 82 Java集合框架是什么出一些集合框架的长处/li>
  • 83 集合框架中的泛型有什么长处/li>
  • 84 Java集合框架的基础接口有哪些/li>
  • 85 为何Collection不从Cloneable和Serializable接口继承/li>
  • 86 为何Map接口不继承Collection接口
  • 87 Iterator是什么/li>
  • 88 Enumeration和Iterator接口的差别/li>
  • 89 为何没有像Iterator.add()这种方法。向集合中加入元素/li>
  • 90 Iterater和ListIterator之间有什么差别/li>
  • 91 通过迭代器fail-fast属性,你明确了什么/li>
  • 92 UnsupportedOperationException是什么/li>
  • 93 在Java中,HashMap是怎样工作的/li>
  • 94 hashCode()和equals()方法有何重要性/li>
  • 95 HashMap和HashTable有何不同/li>
  • 96 怎样决定选用HashMap还是TreeMap/li>
  • 97 ArrayList和Vector有何异同点/li>
  • 98 Array和ArrayList有何差别么时候更适合用Array/li>
  • 99 ArrayList和LinkedList有何差别/li>
  • 100 哪些集合类提供对元素的随机訪问/li>
  • 101 哪些集合类是线程安全的/li>
  • 102 并发集合类是什么/li>
  • 103 BlockingQueue是什么/li>
  • 104 队列和栈是什么,列出它们的差别/li>
  • 105 Collections类是什么/li>
  • 106 Comparable和Comparator接口是什么/li>
  • 107 HashMap和HashSet区别
  • 108 fail-fast 与 fail-safe 之间的区别/li>
  • 109 是否可以往 TreeSet 或者 HashSet 中添加 null 元素/li>
  • 110 ArrayList集合加入1万条数据,应该怎么提高效率
  • 111 HashMap中的get操作是什么原理/li>
  • 112 Java中什么是Exception/li>
  • 113 Java中的检查型异常和非检查型异常有什么区别/li>
  • 114 Java中的NullPointerException和ArrayIndexOutOfBoundException之间有什么相同之处/li>
  • 115 在Java异常处理的过程中,你遵循的那些最好的实践是什么/li>
  • 116 error和exception的区别/li>
  • 117 Java异常处理机制
  • 118 写出常见的5个RuntimeException
  • 119 throw和throws区别
  • 120 什么是“异常链”/li>
  • 121 你曾经自定义实现过异常吗么写的/li>
  • 122 Java异常处理中有哪些关键字/li>
  • 123 描述一下异常的层级。
  • 124 Java异常类有哪些的重要方法/li>
  • 125 Error和Exception有什么区别/li>
  • 126 try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后/li>
  • 127 Java语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别如何使用/li>
  • 128 阐述final、finally、finalize的区别。
  • 129 什么是比特(Bit),什么是字节(Byte),什么是字符(Char),它们长度是多少,各有什么区别
  • 130 什么是流,按照传输的单位,分成哪两种流,并且他们的父类叫什么流是指数据的传输
  • 131 流按照传输的方向可以分为哪两种,分别举例说明
  • 132 OutputStream里面的write()是什么意思,write(byte b[], int off, int len)这个方法里面的三个参数分别是什么意思
  • 133 流一般需要不需要关闭,如果关闭的话在用什么方法,一般要在那个代码块里面关闭比较好,处理流是怎么关闭的,如果有多个流互相调用传入是怎么关闭的/li>
  • 134 Java中的所有的流可以分为几大类,它们的名字是什么,各代表什么
  • 135 io流怎样读取文件的
  • 136  PrintStream、BufferedWriter、PrintWriter的比较/li>
  • 137 阐述JDBC操作数据库的步骤。
  • 138 Statement和PreparedStatement有什么区别个性能更好/li>
  • 139 使用JDBC操作数据库时,如何提升读取数据的性能何提升更新数据的性能/li>
  • 140 在进行数据库编程时,连接池有什么作用/li>
  • 141 什么是DAO模式/li>
  • 142 事务的ACID是指什么
  • 143 脏读
  • 144 不可重复读
  • 145 幻读
  • 146 第1类丢失更新
  • 147 第2类丢失更新
  • 148 JDBC中如何进行事务处理/li>
  • 149 JDBC能否处理Blob和Clob/li>
  • 150 Java 中,编写多线程程序的时候你会遵循哪些最佳实践/li>
  • 151 说出几点 Java 中使用 Collections 的最佳实践
  • 152 说出至少 5 点在 Java 中使用线程的最佳实践。
  • 153 说出 5 条 IO 的最佳实践
  • 154 列出 5 个应该遵循的 JDBC 最佳实践
  • 155 在多线程环境下,SimpleDateFormat 是线程安全的吗/li>
  • 156 Java 中如何格式化一个日期格式化为 ddMMyyyy 的形式/li>
  • 157 嵌套静态类与顶级类有什么区别/li>
  • 158 Java 中,Serializable 与 Externalizable 的区别/li>
  • 159 Java 中,DOM 和 SAX 解析器有什么不同/li>
  • 160 说出 JDK 1.7 中的三个新特性/li>
  • 161 说出 5 个 JDK 1.8 引入的新特性/li>
  • 162 a==b”和”a.equals(b)”有什么区别/li>
  • 163 a.hashCode() 有什么用a.equals(b) 有什么关系/li>
  • 164 JVM为什么可以跨平台
  • 165 描述JVM体系结构
  • 166 描述JVM工作机制
  • 167 为何JVM字节码指令选择基于栈的结构
  • 168 描述执行引擎的架构设计
  • 169 描述javac编译器的基本结构
  • 170 ClassLoader(类加载器)有哪些
  • 171 描述ClassLoader的作用(什么是类加载器)和加载过程
  • 172 描述JVM类加载机制
  • 173 JVM加载class文件到内存的两种方式
  • 174 加载类错误分析及其解决
  • 175 Java应不应该动态加载类(JVM能不能动态加载类)
  • 176 Java中哪些组件需要使用内存
  • 177 描述JVM内存结构及内存溢出
  • 178 描述JVM内存结构及内存溢出
  • 179 描述JVM内存分配策略
  • 180 描述JVM如何检测垃圾
  • 181 哪些元素可作为GC Roots
  • 182 描述分代垃圾收集算法的思路
  • 183 描述基于分代的堆结构及其比例
  • 184 描述垃圾收集算法
  • 185 描述新生代和老年代的回收策略
  • 186 描述CMS垃圾收集器
  • 187 MySQL的复制原理以及流程
  • 188 MySQL中myisam与innodb的区别
  • 189 innodb引擎的4大特性
  • 190 MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义
  • 191 innodb有多少种日志
  • 192 事物的4种隔离级别
  • 193 如何设计一个高并发的系统
  • 194 锁的优化策略
  • 195 索引的底层实现原理和优化
  • 196 什么情况下设置了索引但无法使用
  • 197 实践中如何优化MySQL
  • 198 简单描述mysql中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响
  • 199 数据库中的事务是什么/li>
  • 200 了解XSS攻击吗何防止/li>
  • 201 SQL注入漏洞产生的原因何防止
  • 202 解释MySQL外连接、内连接与自连接的区别
  • 203 Myql中的事务回滚机制概述
  • 204 什么是存储过程什么来调用/li>
  • 205 MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化/li>
  • 206  对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题
  • 207 存储时期
  • 208 Hibernate工作原理
  • 209 Hibernate中get和load有什么不同之处
  • 210 Hibernate中save、persist和saveOrUpdate这三个方法的不同之处
  • 211 Hibernate中的命名SQL查询指的是什么
  • 212 Hibernate中的SessionFactory有什么作用SessionFactory是线程安全的吗
  • 213 Hibernate中的Session指的是什么可否将单个的Session在多个线程间进行共享
  • 214 hibernate中sorted collection和ordered collection有什么不同
  • 215 Hibernate中Session的lock()方法有什么作用
  • 216 Hibernate中二级缓存指的是什么
  • 217 Hibernate中的查询缓存指的是什么
  • 218 为什么在Hibernate的实体类中要提供一个无参数的构造器这一点非常重要
  • 219 可不可以将Hibernate的实体类定义为final类
  • 220 hibernate的三种状态之间如何转换
  • 221 Hibernate是如何延迟加载
  • 222 解Hibernate中怎样实现类之间的关系
  • 223 如何优化Hibernate
  • 224 Hibernate的五个核心接口
  • 225 #{}和${}的区别是什么
  • 226 Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签
  • 227 最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么ao接口里的方法,参数不同时,方法能重载吗
  • 228 Mybatis是如何进行分页的页插件的原理是什么
  • 229 为什么说Mybatis是半自动ORM映射工具与全自动的区别在哪里/li>
  • 230 Mybatis比IBatis比较大的几个改进是什么
  • 231 接口绑定有几种实现方式,分别是怎么实现的
  • 232 MyBatis实现一对一有几种方式体怎么操作的
  • 233 MyBatis的缓存
  • 234 什么是spring/li>
  • 235 使用Spring框架的好处是什么
  • 236 Spring由哪些模块组成
  • 237 核心容器(应用上下文) 模块
  • 238 BeanFactory – BeanFactory 实现举例
  • 239 XMLBeanFactory
  • 240 解释AOP模块
  • 241 什么是Spring IOC 容器
  • 242 IOC的优点是什么
  • 243 ApplicationContext通常的实现是什么
  • 244 Bean 工厂和 Application contexts  有什么区别/li>
  • 245 什么是Spring的依赖注入
  • 246 有哪些不同类型的IOC(依赖注入)方式
  • 247 Spring 的优点
  • 248 Spring的AOP理解
  • 249 Spring的IoC理解
  • 250 BeanFactory和ApplicationContext有什么区别
  • 251 解释Spring支持的几种bean的作用域。
  • 252 请解释Spring Bean的生命周期
  • 253  Spring中bean的加载过程
  • 254  Spring框架中的单例Beans是线程安全的么
  • 255  Spring如何处理线程并发问题
  • 256 请解释Spring自动装配模式的区别
  • 257 Spring 控制器的加载过程
  • 258 Spring 框架中都用到了哪些设计模式
  • 259 Spring事务的种类和各自的区别
  • 260 Spring事务的实现方式和实现原理
  • 261 解释一下Spring AOP里面的几个名词

Java知识点汇总

1 JDK、JRE、JVM关系是什么/h1>

JDK(Java Development Kit)即为Java开发工具包,包含编写Java程序所必须的编译、
运行等开发工具以及JRE。开发工具如:用于编译java程序的javac命令、用于启动JVM运
行java程序的java命令、用于生成文档的javadoc命令以及用于打包的jar命令等等。
JRE(Java Runtime Environment)即为Java运行环境,提供了运行Java应用程序所
必须的软件环境,包含有Java虚拟机(JVM)和丰富的系统类库。系统类库即为java提前
封装好的功能类,只需拿来直接使用即可,可以大大的提高开发效率。 
JVM(Java Virtual Machines)即为Java虚拟机,提供了字节码文件
(.class)的运行环境支持。简单说,就是JDK包含JRE包含JVM。

2 继承的的特点和好处,弊端/h1>
  • 特点:可以从以下两方面来讲:
  • 类与类之间的继承:只能单继承不能多继承,但是可以多层继承。
  • 接口与接口之间的继承:既可以单继承也可以多继承。
  • 好处:(1)提高了代码的复用性、维护性、可扩展性。(2)让类与类产生了关系,
    是多态的前提。
  • 弊端:增强了类与类的耦合性。
  • 补充:面向对象的三大、四大
  • 面向对象的三大思想特征:封装、继承、多态
  • 面向对象的四大特性:封装、继承、多态、抽象

3 局部变量和成员变量的区别

  • 在类中的位置:成员变量定义在类中方法外,局部变量定义在方法中或者方法的声明上。
  • 在内存中的位置:成员变量存放在堆内存中,局部变量存放在栈内存中。
  • 初始化值不同:局部变量没有默认值,必须先赋值才能使用;成员变量有默认初始化值。
  • 生命周期不同:成员变量随着对象的存在而存在,随着对象的消失而消失;局部变量
    随着方法的调用而存在,方法调用完毕而消失。

4 Java支持的数据类型有哪些么是自动拆装箱/h1>

基本数据类型:整数值型:byte,short,int,long, 字符型:char 浮点类型:float
,double 布尔型:boolean 整数默认int型,小数默认是double型。Float和long类
型的必须加后缀。
首先知道String是引用类型不是基本类型,引用类型声明的变量是指该变量在内存中实
际存储的是一个引用地址,实体在堆中。引用类型包括类、接口、数组等。String类还
是final修饰的。 而包装类就属于引用类型,自动装箱和拆箱就是基本类型和引用类型
之间的转换,至于为什么要转换,因为基本类型转换为引用类型后,就可以new对象,从
而调用包装类中封装好的方法进行基本类型之间的转换或者toString(当然用类名直接
调用也可以,便于一眼看出该方法是静态的),还有就是如果集合中想存放基本类型,
泛型的限定类型只能是对应的包装类型。

5 类变量(静态变量)和实例变量(对象变量,成员变量)的区别/h1>
  • 所属不同:类变量属于类,是对象的共性内容;实例变量属于对象,是对象的特性内容。
  • 在内存中位置不同:类变量存在方法区的静态区;实例变量存在堆内存中。
  • 生命周期不同:类变量随着类的加载而存在,随着类的消失而消失;实例变量随着对
    象的存在而存在,随着对象的消失而消失。
  • 调用方式不同:类变量既能被类名点的形式调用,也能通过对象点的形式调用;而实
    例变量只能通过对象点的形式调用。

6 static关键字的特点意事项是什么什么好处和弊端/h1>
  • 静态成员随着类的加载而加载,优于对象存在
  • 存在于方法区的字节码文件中的静态区
  • 被类中所有的对象所共享
  • 能够通过“类名点”的形式调用
  • 静态只能访问静态
  • 注意事项:
    • 静态方法中不可以有this、super关键字(因为静态优先于对象存在;静态只
      能覆盖静态。)
    • 好处:能够被类名点的形式调用,简化书写。被该类下所有的对象所共享。
    • 弊端:生命周期过长。

7 如何实现对象克隆/h1>
  • 实现Cloneable接口并重写Object类中的clone()方法;
  • 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的
    深度克隆
  • 基于序列化和反序列化实现的克隆不仅仅是深度克隆,更重要的是通过泛型限定,可
    以检查出要克隆的对象是否支持序列化,这项检查是编译器完成的,不是在运行时抛出
    异常,这种是方案明显优于使用Object类的clone方法克隆对象。让问题在编译的时候
    暴露出来总是优于把问题留到运行时。

8 访问修饰符public,private,protected,以及不写(默认)时的区别

  • public:当前类、同包、子类、其他包
  • protected:当前类、同包、子类
  • private:当前类
  • default:当前类、同包

9 Java中如何实现序列化,有什么意义/h1>

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可
以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了
解决对象流读写操作时可能引发的问题(如果不进行序列化可能会存在数据乱序的问题)
。要实现序列化,需要让一个类实现Serializable接口,该接口是一个标识性接口,
标注该类对象是可被序列化的,然后使用一个输出流来构造一个对象输出流并通过
writeObject(Object)方法就可以将实现对象写出(即保存其状态);如果需要反
序列化则可以用一个输入流建立对象输入流,然后通过readObject方法从流中读取对
象。序列化除了能够实现对象的持久化之外,还能够用于对象的深度克隆

10 抽象类和接口的区别

  • 抽象类只能被继承,而且只能单继承。接口需要被实现,而且可以多实现。
  • 抽象类中可以定义非抽象方法,子类可以直接继承使用。接口中都有抽象方法,需要
    子类去实现。
  • 抽象类使用的是  is a 关系。接口使用的 like a 关系。
  • 抽象类的成员修饰符可以自定义。接口中的成员修饰符是固定的。全都是public的。

11 两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句 话对不对/h1>

不对,如果两个对象 x 和 y 满足 x.equals(y) == true,它们的哈希码
(hash code)应当相同。
Java 对于 eqauls 方法和hashCode方法是这样规定的:

  • 如果两个对象相同(equals 方法返回 true ),那么它们的 h ashCode 值
    一定要相同;
  • 如果两个对象的 hashCode相同,它们并不一定相同。当然,你未必要按照
    要求 去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可
    以出现在 Set 集合中,同时增加新元素 的效率会大大下降(对于使用哈希存
    储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。

12 类和对象的关系/h1>

类是用来描述事物的属性(事物的外在的特征,成员变量)和行为(事物具有
的特性,成员方法)的一个抽象的概念。
对象是类的实例化。
比如:学生是一个类,具体某一个人就是对象。

13 封装就是私有,对吗什么/h1>

不对,private(私有)仅仅是封装的一种体现形式。我们常用的类,方法,函数
也是封装。只要是对外不可见,就能达到封装的效果,比如:包与包之间的访问。
补充:get/set访问方式必须成对出现吗br> 答:不是,具体看需求,需要设置值就提供set方法,如果需要访问值,就提供get方法

14 什么是封装装的原则处

封装就是隐藏对象的属性和具体实现细节,仅对外提供公共的访问方式。
原则:(1)将不需要对外暴露的信息隐藏;(2)对外提供公共的访问方式。
好处:将变化隔离;提高了安全性;提高了代码代码重用性(是对的),便于使用。

15 Java中参数传递的问题

Java中只有值传递。
如果是基本数据类型,传递的是值,
如果是引用数据类型,传递的地址值(但是String类型作为方法的形参时,传
递的是值),地址值也是值。

16 构造方法,set方法都可以给成员变量赋值,这两种赋值方式有什么区别/h1>

构造方法主要作用是用来给对象初始化,赋值只是它的捎带工作,也可以不用赋值。
Set方法只能用来赋值,在原有对象的基础上赋值,可以用来修改值。
构造方法重新赋值,相对于重新创建对象。

17 静态代码块和构造代码块的区别/h1>
  • 静态代码块随着类的加载而加载,一般是用来加载驱动的。只在类加载的时候
    执行一次,优先于构造方法执行
  • 构造代码块里边放的是所有构造方法的共性内容,为了简化书写,调高效率。
    每创建一次对象,就执行一次,它是优先于构造方法执行的。

18 java 中实现多态的机制是什么

靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程
序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,
也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

19 String 是最基本的数据类型吗/h1>

不是。Java中的基本数据类型只有8个:byte、short、int、long、float、
double、char、boolean;除了基本类型(primitive type)和枚举类型
(enumeration type),剩下的都是引用类型(reference type)。

20 float f=3.4;是否正确

不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于
下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转
换float f =(float)3.4; 或者写成float f =3.4F;。

21 int和Integer有什么区别/h1>

Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本
数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本
数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,
从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。Java 为每个
原始类型提供了包装类型:- 原始类型: boolean,char,byte,short,int,
long,float,double- 包装类型:Boolean,Character,Byte,Short,
Integer,Long,Float,Double

22 switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上/h1>

在Java 5以前,switch(expr)中,expr只能是byte、short、char、int。
从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型,从Java 7开始,
expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。

23 数组有没有length()方法tring有没有length()方法/h1>

数组没有length()方法,有length 的属性。String 有length()方法。
JavaScript中,获得字符串的长度是通过length属性得到的,这一点容易和Java混淆。

24 在Java中,如何跳出当前的多重嵌套循环/h1>

在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环。
(Java中支持带标签的break和continue语句,作用有点类似于C和C++中的goto语句,
但是就像要避免使用goto一样,应该避免使用带标签的break和continue,因为它不
会让你的程序变得更优雅,很多时候甚至有相反的作用,所以这种语法其实不知道更好)

25 构造器(constructor)是否可被重写(override)

构造器不能被继承,因此不能被重写,但可以被重载。

26 是否可以继承String类/h1>

String 类是final类,不可以被继承。

27 String和StringBuilder、StringBuffer的区别/h1>

Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,
它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的
字符串内容是不能被改变的。而StringBuffer/StringBuilder类表示的字符串对
象可以直接进行修改。StringBuilder是Java 5中引入的,它和StringBuffer的
方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有
被synchronized修饰,因此它的效率也比StringBuffer要高。

28 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分/h1>

方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,
而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的
参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生
在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,
比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)
。重载对返回类型没有特殊的要求。

29 char 型变量中能不能存贮一个中文汉字,为什么/h1>

char类型可以存储一个中文汉字,因为Java中使用的编码是Unicode(不选择任何
特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),
一个char类型占2个字节(16比特),所以放一个中文是没问题的。

30 抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本

地方法(native),是否可同时被synchronized修饰br> 都不能。抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。
本地方法是由本地代码(如C代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。
synchronized和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。

31 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用/h1>

不可以,静态方法只能访问静态成员,因为非静态方法的调用要先创建对象,
在调用静态方法时可能对象并没有被初始化。

32 String s = new String(“xyz”);创建了几个字符串对象/h1>

两个对象,一个是静态区的”xyz”,一个是用new创建在堆上的对象。

33 接口是否可继承(extends)接口象类是否可实现(implements)接口/h1>

抽象类是否可继承具体类(concrete class)br> 接口可以继承接口,而且支持多重继承。抽象类可以实现(implements)接口,
抽象类可继承具体类也可以继承抽象类。

34 一个”.java”源文件中是否可以包含多个类(不是内部类)什么限制/h1>

可以,但一个源文件中最多只能有一个公开类(public class)而且文件
名必须和公开类的类名完全保持一致。

35 Java 中的final关键字有哪些用法/h1>
  • 修饰类:表示该类不能被继承;
  • 修饰方法:表示方法不能被重写;
  • 修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

36 比较一下Java和JavaSciprt。

JavaScript 与Java是两个公司开发的不同的两个产品。Java 是
原Sun Microsystems公司推出的面向对象的程序设计语言,特别
适合于互联网应用程序开发;而JavaScript是Netscape公司的产品
,为了扩展Netscape浏览器的功能而开发的一种可以嵌入Web页面中
运行的基于对象和事件驱动的解释性语言。下面对两种语言间的异同作
如下比较:- 基于对象和面向对象:Java是一种真正的面向对象的语言
,即使是开发简单的程序,必须设计对象;JavaScript是种脚本语言,
它可以用来制作与网络无关的,与用户交互作用的复杂软件。它是一种基
于对象(Object-Based)和事件驱动(Ev

来源:xuzhiyonggithubpers

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年11月26日
下一篇 2020年11月26日

相关推荐