乐趣区

关于java:Java面试题总结一基础篇

面向对象和面向过程的区别

面向过程:

长处:性能比面向对象高,因为类调用时须要实例化,开销比拟大,比拟耗费资源; 比方单片机、嵌入式开发、Linux/Unix 等个别采纳面向过程开发,性能是最重要的因素。

毛病:没有面向对象易保护、易复用、易扩大

面向对象:

长处:易保护、易复用、易扩大,因为面向对象有封装、继承、多态性的个性,能够设计出低耦合的零碎,使零碎更加灵便、更加易于保护

毛病:性能比面向过程低

Java 语言有哪些特点?

1,简略易学;2,面向对象(封装,继承,多态);3,平台无关性(Java 虚拟机实现平台无关性);4,可靠性;5,安全性;6,反对多线程(C++ 语言没有内置的多线程机制,因而必须调用操作系统的多线程性能来进行多线程程序设计,而 Java 语言却提供了多线程反对);7,反对网络编程并且很不便(Java 语言诞生自身就是为简化网络编程设计的,因而 Java 语言不仅反对网络编程而且很不便);8,编译与解释并存;

什么是字节码? 采纳字节码的最大益处是什么? 什么 Java 是虚拟机?

先看下 java 中的编译器和解释器:

Java 中引入了虚拟机的概念,即在机器和编译程序之间退出了一层形象的虚构的机器。这台虚构的机器在任何平台上都提供给编译程序一个的独特的接口。编译程序只须要面向虚拟机,生成虚拟机可能了解的代码,而后由解释器来将虚拟机代码转换为特定零碎的机器码执行。在 Java 中,这种供虚拟机了解的代码叫做字节码(即扩大名为.class 的文件),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,然而实现的虚拟机是雷同的。Java 源程序通过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,而后在特定的机器上运行,这就是下面提到的 Java 的特点的编译与解释并存的解释。

Java 源代码 —-> 编译器 —->jvm 可执行的 Java 字节码(即虚构指令)—->jvm—->jvm 中解释器 —–> 机器可执行的二进制机器码 —-> 程序运行。

采纳字节码的益处:

Java 语言通过字节码的形式,在肯定水平上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比拟高效,而且,因为字节码并不专对一种特定的机器,因而,Java 程序毋庸从新编译便可在多种不同的计算机上运行。

什么是 Java 虚拟机

任何一种能够运行 Java 字节码的软件均可看成是 Java 的虚拟机(JVM)

什么是 Java 程序的主类? 应用程序和小程序的主类有何不同?

一个程序中能够有多个类,但只能有一个类是主类。在 Java 应用程序中,这个主类是指蕴含 main()办法的类。而在 Java 小程序中,这个主类是一个继承自零碎类 JApplet 或 Applet 的子类。应用程序的主类不肯定要求是 public 类,但小程序的主类要求必须是 public 类。主类是 Java 程序执行的入口点。

什么是 JDK? 什么是 JRE?

**JDK:** 顾名思义它是给开发者提供的开发工具箱, 是给程序开发者用的。它除了包含残缺的 JRE(Java Runtime Environment),Java 运行环境,还蕴含了其余供开发者应用的工具包。

**JRE:** 普通用户而只须要装置 JRE(Java Runtime Environment)来 来运行 Java 程序。而程序开发者必须装置 JDK 来编译、调试程序。

Java 应用程序与小程序之间有那些差异?

简略说应用程序是从主线程启动 (也就是 main() 办法)。applet 小程序没有 main 办法,次要是嵌在浏览器页面上运行 (调用 init() 线程或者 run()来启动),嵌入浏览器这点跟 flash 的小游戏相似。

字符型常量和字符串常量的区别

模式上:

字符常量是单引号引起的一个字符

字符串常量是双引号引起的若干个字符

含意上:

字符常量相当于一个整形值(ASCII 值), 能够加入表达式运算

字符串常量代表一个地址值(该字符串在内存中寄存地位)

占内存大小

字符常量只占一个字节

字符串常量占若干个字节(至多一个字符完结标记)

Java 语言采纳何种编码方案? 有何特点?

Java 语言采纳 Unicode 编码标准,Unicode(规范码),它为每个字符制订了一个惟一的数值,因而在任何的语言,平台,程序都能够释怀的应用。

结构器 Constructor 是否可被 override

在讲继承的时候咱们就晓得父类的公有属性和构造方法并不能被继承,所以 Constructor 也就不能被 override, 然而能够 overload, 所以你能够看到一个类中有多个构造函数的状况。

重载和重写的区别

重载:产生在同一个类中,办法名必须雷同,参数类型不同、个数不同、程序不同,办法返回值和拜访修饰符能够不同,产生在编译时。

重写:产生在父子类中,办法名、参数列表必须雷同,返回值小于等于父类,抛出的异样小于等于父类,拜访修饰符大于等于父类; 如果父类办法拜访修饰符为 private 则子类中就不是重写。

String 和 StringBuffer、StringBuilder 的区别是什么?String 为什么是不可变的?

可变性

String 类中应用字符数组保留字符串,private final char value[],所以 string 对象是不可变的。StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是应用字符数组保留字符串,char[]value,这两种对象都是可变的。

线程安全性

String 中的对象是不可变的,也就能够了解为常量,线程平安。AbstractStringBuilder 是 StringBuilder 与 StringBuffer 的公共父类,定义了一些字符串的基本操作,如 expandCapacity、append、insert、indexOf 等公共办法。StringBuffer 对办法加了同步锁或者对调用的办法加了同步锁,所以是线程平安的。StringBuilder 并没有对办法进行加同步锁,所以是非线程平安的。

性能

每次对 String 类型进行扭转的时候,都会生成一个新的 String 对象,而后将指针指向新的 String 对象。StringBuffer 每次都会对 StringBuffer 对象自身进行操作,而不是生成新的对象并扭转对象援用。雷同状况下应用 StirngBuilder 相比应用 StringBuffer 仅能取得 10%~15% 左右的性能晋升,但却要冒多线程不平安的危险。

对于三者应用的总结:

如果要操作大量的数据用 = String

单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

主动装箱与拆箱

装箱:将根本类型用它们对应的援用类型包装起来;

拆箱:将包装类型转换为根本数据类型;

Java 应用主动装箱和拆箱机制,节俭了罕用数值的内存开销和创建对象的开销,进步了效率,由编译器来实现,编译器会在编译期依据语法决定是否进行装箱和拆箱动作。

在一个静态方法内调用一个非动态成员为什么是非法的?

因为静态方法能够不通过对象进行调用,因而在静态方法里,不能调用其余非动态变量,也不能够拜访非动态变量成员。

在 Java 中定义一个不做事且没有参数的构造方法的作用

Java 程序在执行子类的构造方法之前,如果没有用 super()来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因而,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用 super()来调用父类中特定的构造方法,则编译时将产生谬误,因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。

接口和抽象类的区别是什么?

1. 接口的办法默认是 public,所有办法在接口中不能有实现,抽象类能够有非形象的办法

2. 接口中的实例变量默认是 final 类型的,而抽象类中则不肯定

3. 一个类能够实现多个接口,但最多只能实现一个抽象类

4. 一个类实现接口的话要实现接口的所有办法,而抽象类不肯定

5. 接口不能用 new 实例化,但能够申明,然而必须援用一个实现该接口的对象

从设计层面来说,形象是对类的形象,是一种模板设计,接口是行为的形象,是一种行为的标准。

成员变量与局部变量的区别有那些?

从语法模式上,看成员变量是属于类的,而局部变量是在办法中定义的变量或是办法的参数; 成员变量能够被 public,private,static 等修饰符所润饰,而局部变量不能被访问控制修饰符及 static 所润饰; 成员变量和局部变量都能被 final 所润饰;

从变量在内存中的存储形式来看,成员变量是对象的一部分,而对象存在于堆内存,局部变量存在于栈内存

从变量在内存中的生存工夫上看,成员变量是对象的一部分,它随着对象的创立而存在,而局部变量随着办法的调用而主动隐没。

成员变量如果没有被赋初值,则会主动以类型的默认值而赋值(一种状况例外被 final 润饰但没有被 static 润饰的成员变量必须显示地赋值); 而局部变量则不会主动赋值。

创立一个对象用什么运算符? 对象实体与对象援用有何不同?

new 运算符,new 创建对象实例(对象实例在堆内存中),对象援用指向对象实例(对象援用寄存在栈内存中)。一个对象援用能够指向 0 个或 1 个对象(一根绳子能够不系气球,也能够系一个气球); 一个对象能够有 n 个援用指向它(能够用 n 条绳子系住一个气球)

什么是办法的返回值? 返回值在类的办法里的作用是什么?

办法的返回值是指咱们获取到的某个办法体中的代码执行后产生的后果!(前提是该办法可能产生后果)。返回值的作用: 接管出后果,使得它能够用于其余的操作!

一个类的构造方法的作用是什么? 若一个类没有申明构造方法,改程序能正确执行吗? 为什么?

次要作用是实现对类对象的初始化工作。能够执行。因为一个类即便没有申明构造方法也会有默认的不带参数的构造方法。

构造方法有哪些个性?

1,名字与类名雷同;2,没有返回值,但不能用 void 申明构造函数;3,生成类的对象时主动执行,无需调用。

静态方法和实例办法有何不同?

静态方法和实例办法的区别次要体现在两个方面:

在内部调用静态方法时,能够应用 ” 类名. 办法名 ” 的形式,也能够应用 ” 对象名. 办法名 ” 的形式。而实例办法只有前面这种形式。也就是说,调用静态方法能够无需创建对象。

静态方法在拜访本类的成员时,只容许拜访动态成员(即动态成员变量和静态方法),而不容许拜访实例成员变量和实例办法; 实例办法则无此限度

对象的相等与指向他们的援用相等,两者有什么不同?

对象的相等 比的是内存中寄存的内容是否相等而 援用相等 比拟的是他们指向的内存地址是否相等。

在调用子类构造方法之前会先调用父类没有参数的构造方法,其目标是?

帮忙子类做初始化工作。

equals 和 == 的区别?

艰深点讲:是看看左右是不是一个货色。equals 是看看左右是不是长得一样。如何记住嘛。如果单纯是想记住,:等于。equals:雷同。两个长得一样的人,只能说长的雷同(equals),然而不等于他们俩是一个人。你只有记住 equals,== 就不必记了。楼主你感受一下。

术语来讲的区别:1.== 是判断两个变量或实例是不是指向同一个内存空间 equals 是判断两个变量或实例所指向的内存空间的值是不是雷同

2.== 是指对内存地址进行比拟 equals()是对字符串的内容进行比拟 3.== 指援用是否雷同 equals()指的是值是否雷同

Java 交换裙:1091181875,不懂大家能够一起交流经验
java- 环境搭建及根底语法
http://www.makeru.com.cn/live/1394_202.html?s=156461
Java 根底(系列“点题目下的开始学习就可以看了”)
http://www.makeru.com.cn/course/details/2065?s=156461

退出移动版