超全java面试题库-第一篇(Java基础篇)

更新时间:2023-07-12 22:19:09 阅读: 评论:0

第一篇Java基础面试题
1.说下面向对象四大特性
封装性、继承性、多态性、抽象性。
2.Java语言有些特点
简单性:Java没有像C++那样的指针,运算符重载,类的多继承。并且实现了垃圾的自动回收,简化了程序开发者对于内存管理的工作。
面像对象:对象是指封装数据和操作方法的程序实体。Java提供了简单的类机制以及动态接口。表现形式是封装继承多态。
分布式:它有一套很齐全的通信及相关功能的程序库,可以处理TCP/IP协议也可以处理其他的协议。
健壮性:用Java编写的程序能在多种情况下稳定运行。Java在运行和编译的时候都会对可能出现的错误进行检查验证。通过集成异常处理机制,在编译时提示可能出现的但是未被处理的异常,以防止系统的崩溃。
可移植性:Java是与平台无关的,Java类库中也实现了与平台无关的接口,这样类库也是可以移植的。
多线程机制:Java具有多线程机制,使得程序能够并行执行,同步机制也保证了数据的共享,线程也有优先级别,有利于使用线程级别控制不同的任务。
3.什么是Java程序的主类?应用程序和小程序的主类有何不同?
一个程序中可以有多个类,但只能有一个主类。在Java应用程序中,这个类是指包含main ()方法的类。而在Java小程序中,这个主类是一个继承子系统类JApplet或Applet的子类。应用程序的主类不一定要求是public类但小程序的主类必须是public类。主类是Java程序执行的入口点。
简单说应用程序是从主线程启动(也就是 main() 方法)。applet 小程序没有 main() 方法,主要是嵌在浏览器页面上运行(调用init()或者run()来启动),嵌入浏览器这点跟 flash 的小游戏类似。
4.访问修饰符public,private,protected,以及不写(默认)时的区别?
类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公开(publi c),对于不是同一个包中的其他类相当于私有(private)。受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。Java中,外部类的修饰符只能是public或默认,类的成员(包括内部类)的修饰符可以是以上四种。
5.float f=3.4;是否正确?
不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-cati ng,也称为窄化)会造成精度损失,因此需要强制类型转换floatf=(float)3.4;或者写成floatf= 3.4F;
6.Java有没有goto?
goto 是Java中的保留字,在目前版本的Java中没有使用。
大地飞歌歌词7.&和&&的区别?
1、&&只是编程语言中的符号,只能使用在c、c++、Java、PHP等编程语言中。
2、&符号的使用范围比&&大,它不但能用在编程语言中,它还能用在HTML文档中;表示“a nd”的意思;表示“联合”的意思;电子制表程序中。
3、&&表示的是“逻辑与”,相当于“和”的意思,即当运算符号两边的表达式的结果都为“正确”的时候,整个运算的结果才是正确的,只要有一方为“错误”,其结果便是“错误”。例12&&13的结果是“1”即“正确”,12&&0的结果是“0”即“错误”。
4、%表示的是“按位与”,即在运算符号两边的表达式的结果都为“正确”时,那结果就是正确的;在运算符号两边的表达式的结果只要有一个为“错误”那结果就是错误的。
und(11.5) 等于多少?und(-11.5)等于多少?
9.用最有效率的方法计算2乘以8?
2 << 3(左移
3 位相当于乘以 2 的 3 次方,右移 3 位相当于除以 2 的 3 次方)。
10.什么是Java注释
在Java的编写过程中我们需要对一些程序进行注释,除了自己方便阅读,更为别人更好理解自己的程序,所以我们需要进行一些注释,可以是编程思路或者是程序的作用,总而言之就是方便自己他人更好的阅读。
11.Java有哪些数据类型
有8种原始数据类型:布尔数据类型、字节数据类型、字符数据类型、短数据类型、整数数据类型、长数据类型、浮点数据类型、双数据类型。
12.final 有什么用?
1、final修饰类,表示类不可变,不可扩展(不可继承),即不能有子类
2、final修饰方法,表示该方法不可重写
比如模板设计模式,可以固定我们的算法
3、final修饰变量,这个变量就是常量
注意:
(1)如果修饰的是基本数据类型,这个值本身不能修改
(2)如果修饰的是引用类型,引用的指向不能修改
比如下面的代码是可以的
炸伤final Student student = new Student(1,"fengqingyang");
student.tAge(18);//注意,这个是可以的!
13.final finally finalize的区别
凉拌笋1.简单区别
final用于声明属性,方法和类,分别表示属性不可改变(常量),方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。
2.中等区别
虽然这个单词在Java中都存在,但是并没太多关联:
final:Java中的关键字,修饰符。
A). 如果一个类被声明为final,就意味着它不能再派生出新的子类,不能作为父类被继承。因此,一个类不能同时被声明为abstract抽象类的和final的类。
B). 如果将变量或方法声明为final,可以保证它们在使用中不被改变。
1)被声明为final的变量必须在声明时给定初始值,而在以后的引用中只能读取,不可修改。
2)被声明final的方法只能使用,不能重载。
finally:Java的一种异常处理机制。
finally是对Java异常处理模型的最佳补充。finally结构使代码总会执行,而不管无异常发生。使用finally可以维护对象的内部状态,并可以清理非内存资源。特别实在关闭数据库连接这方面,如果程序员把数据库连接的clo()方法放到finally中,就会大大降低程序出错的几率。
finalize:Java中的一个方法名
Java技术使用finalize()方法在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没被引用时对这个对象调用的。它是在Object类中定义的,因此所的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
3.详细区别
这是一道再经典不过的面试题了,我们在各个公司的面试题中几乎都能看到它的身影。fin al、finally和finalize虽然长得像孪生兄弟,但是它们的含义和用法却是大相径庭。
**final关键字我们首先来说说final。**它可以用于以下四个地方:
1).定义变量,包括静态的和非静态的
2).定义方法的参数
3).定义方法
4).定义类
第一种情况:
数列公式总结
如果final修饰的是一个基本类型,就表示这个变量被赋予的值是不可变的,即它是个常量;
如果final修饰的是一个对象,就表示这个变量被赋予的引用时不可变的。
这里需要提醒大家注意的是,不可改变的只是这个变量所保存的引用,并不是这个引用所指向的对象。
第二种情况: final的含义与第一种情况相同。
实际上对于前两种情况,一种更贴切的表述final的含义的描述,那就是,如果一个变量或方法参数被final修饰,就表示它只能被赋值一次,但是Java虚拟机为变量设定的默认值不记作一次赋值。被final修饰的变量必须被初始化。初始化的方式有以下几种:
1.在定义的时候初始化。
2.final变量可以在初始化块中初始化,不可以在静态初始化块中初始化。
3.静态final变量可以在定义时初始化,也可以在静态初始化块中初始化,不可以在初始化块中初始化。
4.final变量还可以在类的构造器中初始化,但是静态final变量不可以。
14.String str = "i" 和String str = new String("1")一样吗?
不一样,使用String str=“i”,java虚拟机会把它分配到常量池中,而 String str=new S tring(“i”)创建了一个对象,会被分到堆内存中。
15.Java 中操作字符串都有哪些类?它们之间有什么区别?
操作字符串的类有:String、StringBuffer、StringBuilder、StringJoiner(JDK1.8)。
String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而 StringBuffer、St ringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。
StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 Str ingBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。
16.Java中为什么要用 clone?
放风筝简笔画clone方法首先会判对象是否实现了Cloneable接口,若无则抛出CloneNotSupportedExce ption,最后会调用internalClone.intervalClone是一个native方法,一般来说native方法的执行效率高于非native方法。当某个类要复写clone方法时,要继承Cloneable接口。通常的克隆对象都是通过super.clone()方法来克隆对象。
17.深克隆和浅克隆?
1、浅克隆:对当前对象进行克隆,并克隆该对象所包含的8种基本数据类型和String类型属性(拷贝一份该对象并重新分配内存,即产生了新的对象);但如果被克隆的对象中包含除8中数据类型和Stri
ng类型外的其他类型的属性,浅克隆并不会克隆这些属性(即不会为这些属性分配内存,而是引用原来对象中的属性)
2、深克隆:深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。
一个对象通过new创建的过程为:
1、在内存中开辟一块空间;
2、在开辟的内存空间中创建对象;
3、调用对象的构造函数进行初始化对象。
整容师
而一个对象通过clone创建的过程为:
1、根据原对象内存大小开辟一块内存空间;
2、复制已有对象,克隆对象中所有属性值。
相对new来说,clone少了调用构造函数。
云计算服务模式
需要占用大量连续内存空间的java对象一般称为大对象,比如很长的字符串、数组以及类对象
如果构造函数中存在大量属性初始化或大对象,则使用clone的复制对象的方式性能会好一些。
19.Java中实现多态的机制是什么?
方法的覆盖Overriding 和重载Overloading 是java 多态性的不同表现;覆盖Overri ding 是父类与子类之间多态性的一种表现,重载Overloading 是一个类中多态性的一种表现。
20.谈谈你对多态的理解?
一个事物需要不同的状态就可以用多态,譬如建立一个动物类,我有时候需要它是猫,有时候需要是狗。多态的三个特征就是(1)要有继承关系(2)子类重写了父类的方法,静态方法不算(3)父类的引用指向子类的对象
这样建立多态以后,父类可以使用自己的变量以及子类重写了的方法,但是不能使用子类自己的成员变量和方法,如果需要使用得强行转换为子类对象再使用,这样的好处是把子类对象给了子类的引用,避免创建新的子类对象
Animal animal = new Cat();这个属性向上转型
Cat cat = (Cat)animal;这个是向下转型
21.构造器(constructor)是否可被重写(override)?
构造器不能被继承,因此不能被重写,但可以被重载。
22.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,如果两个对象 x 和 y 满足 x.equals(y) == true,它们的哈希码(hash code)应当相同。Java 对于 eqauls 方法和 hashCode 方法是这样规定的:(1)如果两个对象相同(equals 方法返回 true),那么它们的hashCode 值一定要相同;(2)如果两个对象的 ha shCode 相同,它们并不一定相同。当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在 Set 集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。
23.String类的常用方法有哪些?
1.String的构造方法
1)String(String original):把字符串数据封装成字符串对象。
2)String(char[] value):把字符数组的数据封装成字符串对象。
3)String(char[] value, int index, int count):把字符数组中的一部分数据封装成字符串对象。
2.String类的获取功能:
1)length():获取字符串的长度,其实也就是字符个数。
休闲衣服2)charAt(int index):获取指定索引处的字符。
3)indexOf(String str):获取str在字符串对象中第一次出现的索引。
4)substring(int start):从start开始截取字符串。
5)String substring(int start,int end):从start开始,到end结束截取字符串。包括start,不包括end。
3.String判断功能
1)equals(Object obj):比较字符串的内容是否相同。
2)equalsIgnoreCa(String anotherString):比较字符串的内容是否相同,忽略大小写。
3)startsWith(String prefix):判断字符串对象是否以指定的字符开头(区分大小写)。
4)startsWith(String prefix,int tofft):判断字符串对象是否以指定的字符开头,参数tofft为指定从哪个下标开始。
5)endsWith(String str):判断字符串对象是否以指定的字符结尾。
6)isEmpty():判断指定字符串是否为空。

本文发布于:2023-07-12 22:19:09,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1093231.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:对象   方法   使用   字符串   程序
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图