JavaSE面试题1(基础)

什么是B/S架构?什么是C/S架构

  1. B/S(Browser/Server),浏览器/服务器程序
  2. C/S(Client/Server),客户端/服务端,桌面应用程序

JDK JRE JVM 的区别

(1)Java 开发工具包 (JDK)

Java开发工具包是Java环境的核心组件,并提供编译、调试和运行一个Java程序所需的所有工具,可执行文件和二进制文件。JDK是一个平台特定的软件,有针对Windows,Mac和Unix系统的不同的安装包。可以说JDK是JRE的超集,它包含了JRE的Java编译器,调试器和核心类。

JDK有以下三种版本:

  • J2SE,standard edition,标准版,是我们通常用的一个版本
  • J2EE,enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序
  • J2ME,micro edtion,主要用于移动设备、嵌入式设备上的java应用程序

(2)Java虚拟机(JVM)

JVM是Java编程语言的核心。当我们运行一个程序时,JVM负责将字节码转换为特定机器代码。JVM也是平台特定的,并提供核心的Java方法,例如内存管理、垃圾回收和安全机制等。JVM 是可定制化的,我们可以通过Java 选项(java options)定制它,比如配置JVM 内存的上下界。JVM之所以被称为虚拟的是因为它提供了一个不依赖于底层操作系统和机器硬件的接口。这种独立于硬件和操作系统的特性正是Java程序可以一次编写多处执行的原因。

(3)Java运行时环境(JRE)

JRE是JVM的实施实现,它提供了运行Java程序的平台。JRE包含了JVM、Java二进制文件和其它成功执行程序的类文件。JRE不包含任何像Java编译器、调试器之类的开发工具。如果你只是想要执行Java程序,你只需安装JRE即可,没有安装JDK的必要。

(4)JDK, JRE 和JVM的区别

    JDK是用于开发的而JRE是用于运行Java程序的。

    JDK和JRE都包含了JVM,从而使得我们可以运行Java程序。

JVM是Java编程语言的核心,并且具有平台独立性(是Java跨平台特性的基础)。

JDK常用的包

  • java.lang: 这个是系统的基础类,比如String、Math、Integer、System和Thread,提供常用功能。在java.lang包中还有一个子包:java.lang.reflect用于实现java类...

  • java.io: 这里面是所有输入输出有关的类,比如文件操作等

  • java.net: 这里面是与网络有关的类,比如URL,URLConnection等。

  • java.util : 这个是系统辅助类,特别是集合类Collection,List,Map等。

  • java.SQL: 这个是数据库操作的类,Connection, Statememt,ResultSet等

&和&&的区别

&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为 true时,整个运算结果才为  true,否则,只要有一方为 false,则结果为 false。

&&还具有短路的功能,即如果第一个表达式为 false,则不再计算第二个表达式。

例如,对于 if(str != null&& !str.equals(“”))表达式,当 tr为 null时,后面的表达式不会执行,所以不会出现 NullPointerException如果将&&改为&,则会抛NullPointerException异常。

例如,If(x==33 &++y>0) y会增长,If(x==33  && ++y>0)不会增长。

&还可以用作位运算符,当&操作符两边的表达式不是 boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个  bit位,例如,0x31  & 0x0f的结果为0x01

Integer与int的区别

int

Integer

基本类型(Primitive)(int是Java的原始数据类型)

引用类型(Warpper)(Integer是java为int提供的封装类)

int的变量不需要实例化,默认值为0,一般做数值参数Interger的变量需要实例化,默认值为null,一般做类型转换

int a = 5;

a你只能用来做计算.

Integer b = 5;

b你可以用来做很多事,因为它是一个对象,他有很多静态方法

 

 

 

 

 

final,finally,finalize 三者区别

(1)Final是一个修饰符

  • 当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值

  • 当final修饰的变量为静态变量(即由static修饰)时,必须在声明这个变量的时候给它赋值

  • 当final修饰方法时,该方法不能被重写

  • 当final修饰类时,该类不能被继承

  • Final不能修饰抽象类,因为抽象类中会有需要子类实现的抽象方法,(抽象类中可以有抽象方法,也可以有普通方法,当一个抽象类中没有抽象方法时,这个抽象类也就没有了它存在的必要)

  • Final不能修饰接口,因为接口中有需要其实现类来实现的方法

(2)Finally

Finally只能与try/catch语句结合使用,finally语句块中的语句一定会执行,   并且会在return,continue,break关键字之前执行

(3)finalize

Finalize是一个方法,属于java.lang.Object类,finalize()方法是GC   (garbage collector垃圾回收)运行机制的一部分,finalize()方法是在 GC清理它所从属的对象时被调用的

==和equals的区别

java中equals和==的区别 值类型是存储在内存中的堆栈(简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。

==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

权限修饰符

 

public

protected

default

private

不同包下的类可以   
不同包下的子类可以可以  
同一包下的类可以可以可以 
同一个类中可以可以可以可以

字符串操作:如何实现字符串的反转及替换?

可用字符串构造一StringBuffer 对象,然后调用StringBuffer 中的reverse方法即可实现字符串的反转,调用replace 方法即可实现字符串的替换。

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

(1)是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

(2)值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。

(3)引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。

SimpleDateFormat是线程安全的吗?

非常不幸,DateFormat 的所有实现,包括 SimpleDateFormat 都不是线程安全的,因此你不应该在多线程序中使用,除非是在对外线程安全的环境中使用,如 将 SimpleDateFormat 限制在 ThreadLocal 中。如果你不这么做,在解析或者格式化日期的时候,可能会获取到一个不正确的结果。因此,从日期、时间处理的所有实践来说,我强力推荐 joda-time 库。

如何格式化日期?

Java 中,可以使用 SimpleDateFormat 类或者 joda-time 库来格式日期。DateFormat 类允许你使用多种流行的格式来格式化日期。参见答案中的示例代码,代码中演示了将日期格式化成不同的格式,如 dd-MM-yyyy 或 ddMMyyyy。

你所知道网络协议有那些?

HTTP:超文本传输协议
FTP:文件传输协议
SMPT:简单邮件协议
TELNET:远程终端协议
POP3:邮件读取协议

Java是否需要开发人员回收内存垃圾吗?

大多情况下是不需要的。Java提供了一个系统级的线程来跟踪内存分配,不再使用的内存区将会自动回收

什么是数据结构?

计算机保存,组织数据的方式

Java的数据结构有那些?

线性表(ArrayList)
链表(LinkedList)
栈(Stack)
队列(Queue)
图(Map)
树(Tree)

什么是OOP?

面向对象编程

什么是面向对象?

世间万物都可以看成一个对象。每个物体包括动态的行为和静态的属性,这些就构成了一个对象。

类与对象的关系?

类是对象的抽象,对象是类的具体,类是对象的模板,对象是类的实例

Java中有几种数据类型?

java中数据类型分为两大类:
引用数据类型
基本数据类型:基本数据类型分为四类八种
    整形:byte,short,int,long
    浮点型:float,double
    字符型:char
    布尔型:boolean

什么是隐式转换,什么是显式转换

显示转换就是类型强转,把一个大类型的数据强制赋值给小类型的数据;隐式转换就是大范围的变量能够接受小范围的数据;隐式转换和显式转换其实就是自动类型转换和强制类型转换。

Char类型能不能转成int类型?能不能转化成string类型,能不能转成double类型

Char在java中也是比较特殊的类型,它的int值从1开始,一共有2的16次方个数据;Char<int<long<float<double;Char类型可以隐式转成int,double类型,但是不能隐式转换成string;如果char类型转成byte,short类型的时候,需要强转。

什么是拆装箱?

拆箱:把包装类型转成基本数据类型
装箱:把基本数据类型转成包装类型

Java中的包装类都是那些?

byte:Byte short:Short int:Integer long:Long float:Float double:Double char:Character boolean:Boolean

一个java类中包含那些内容?

属性、方法、内部类、构造方法、代码块。

例如: if(a+1.0=4.0),这样做好吗?

不好,因为计算机在浮点型数据运算的时候,会有误差,尽量在布尔表达式中不使用浮点型数据(if,while,switch中判断条件不使用浮点型)

那针对浮点型数据运算出现的误差的问题,你怎么解决?

使用Bigdecimal类进行浮点型数据的运算

++i与i++的区别

++i:先赋值,后计算
i++:先计算,后赋值

程序的结构有那些?

顺序结构
选择结构
循环结构

数组实例化有几种方式?

静态实例化:创建数组的时候已经指定数组中的元素,

1

int[] a=new int[]{1,3,3}

动态实例化:实例化数组的时候,只指定了数组程度,数组中所有元素都是数组类型的默认值

Java中各种数据默认值

Byte,short,int,long默认是都是0
Boolean默认值是false
Char类型的默认值是’’
Float与double类型的默认是0.0
对象类型的默认值是null

Java常用包有那些?

Java.lang
Java.io
Java.sql
Java.util
Java.awt
Java.net
Java.math

Java最顶级的父类是哪个?

Object

Object类常用方法有那些?

Equals
Hashcode
toString
wait
notify
clone
getClass

java中有没有指针?

有指针,但是隐藏了,开发人员无法直接操作指针,由jvm来操作指针

java中是值传递引用传递?

理论上说,java都是引用传递,对于基本数据类型,传递是值的副本,而不是值本身。对于对象类型,传递是对象的引用,当在一个方法操作操作参数的时候,其实操作的是引用所指向的对象。

假设把实例化的数组的变量当成方法参数,当方法执行的时候改变了数组内的元素,那么在方法外,数组元素有发生改变吗?

改变了,因为传递是对象的引用,操作的是引用所指向的对象

实例化数组后,能不能改变数组长度呢?

不能,数组一旦实例化,它的长度就是固定的

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值