Java基础

1.Java跨平台原理

  • C/C++语言都直接编译成针对特定平台机器码。如果要跨平台,需要使用相
    应的编译器重新编译。
  • Java 源程序先编译成与平台无关的字节码文件(.class),然后字节码文件通过 Java 虚拟机解释成机器码运行。
  • 字节码文件不面向任何具体平台,只面向虚拟机。
    Java 虚拟机是可运行 Java 字节码文件的虚拟计算机。不同平台的虚拟机是不同的,但它们都提供了相同的接口。
  • Java 语言编译后的.class 可以跨平台运行,前提是该平台具有相应的 Java 虚拟机。
  • Java性能比 C/C++要低。Java 的跨平台原理决定了其性能没有 C/C++高。

2. Java 的安全性

  • 1.取消了强大但又危险的指针,代之以引用。
  • 2.垃圾回收机制:垃圾回收器在后台自动回收不再使用的内存。避免程序忘记及时回收,导致内存泄露。
  • 3.异常处理机制:Java 异常机制主要依赖于 try、catch、finally、throw、throws五个关键字。
  • 4.强制类型转换:只有在满足强制转换规则的情况下才能强转成功。
  • 5.底层的安全性:Java 在字节码的传输过程中使用了公开密钥加密机制(PKC)。
  • 6.在运行环境提供了四级安全性保障机制:字节码校验器 -类装载器 -运行时内存布局 -文件访问限制;

3.JDK的版本

  • Standard Edition(标准版) :包含那些构成 Java 语言核心的类。
    比如:数据库连接、接口定义、输入/输出、网络编程等;
  • Enterprise Edition(企业版) :包含 J2SE 中的类,且含用于开发
    企业级应用的类。比如 servlet、JSP、XML、事务控制;
  • Micro Edition(微缩版) :包含 J2SE 中一部分类,用于消费类电子产品
    的软件开发。比如:呼机、智能卡、手机、PDA、机顶盒

ps:J2SE 包含于 J2EE 中,J2ME 包含了 J2SE 的核心类,也新添
加了一些专有类


4.什么是JDK、JRE、JVM?有什么区别?什么是字节码?为什么要采用字节码?

  • JDK:Java Development Kit,它是功能齐全的Java SDK。它拥有JRE所拥有的一切,还有编译器(javac)和工具(如javadoc和jdb)。它能够创建和编译程序。
  • JRE :Java运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java虚拟机(JVM),Java类库,java命令和其他的一些基础构件。但是,它不能用于创建新程序。
  • JVM:Java虚拟机是运行Java字节码的虚拟机,JVM会针对对不同的系统做特定的实现,使得使用相同的字节码在不同系统的计算机上会出现相同的运行结果;

ps:如果只需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。但是不是绝对的,如果需要JSP部署Web应用,则也需要安装JDK,因为JSP会转译成Servlet,并且需要JDK来编译Servlet。

  • 字节码:JVM可以理解的代码,不针对特定机器,只面向虚拟机,通过执行字节码文件,一定程度解决传统解释型语言效率低的问题,同时保留可移植的特点;Java程序无需重新编译即可在多种操作系统的计算机上运行;

5.Java与C++的区别

  • 都是面向对象的语言,都支持封装、继承和多态;
  • Java 不提供指针来直接访问内存,程序内存更加安全;
  • Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不能多继承,但接口可以多继承;
  • Java 有自动内存管理机制,不需要程序员手动释放无用内存。

6. Java 三种注释类型

  • 单行注释,采用“//”方式.只能注释一行代码。
  • 多行注释,采用“//”方式,可注释多行代码,其中不允许出现嵌套。
  • 文档注释,采用“/**…*/”方式,可使用Javadoc生成文档。

7. 8 种基本数据类型、字节数及其包装类

ps:1字节=8位

数据类型 字节数 包装类
byte 1 Byte
short 2 Short
int 4 Integer
long 8 Long
float 4 Float
double 8 Double
char 2 Character
boolean 1(位) Boolean

8. i++和++i 的异同之处

共同点

  • i++和++i 都是变量自增 1,都等价于 i=i+1
  • 如果 i++,++i 是一条单独的语句,两者没有任何区别
  • i++和++i 的使用仅仅针对变量。

不同点

  • i++ :先运算后增 1
  • ++i : 先增 1 后运算

9. 基本数据类型的类型转换规则

  • 自动转换
    容量小的数据类型可以自动转换成容量大的数据类型,低级自动向高级转换;
  • 强制转换
    高级变为低级需要强制转
    • 赋值运算符“=”右边的转换,先自动转换成表达式中级别最高的数据类型,再进行运算。
    • 赋值运算符“=”两侧的转换,若左边级别>右边级别,会自动转换;若左边级别 == 右边级别,不用转换;若左边级别 < 右边级别,需强制转换。
    • 可以将整型常量直接赋值给 byte, short, char 等类型变量,而不需要进行强制类型转换,前提是不超出其表述范围,否则必须进行强制转换。

10. while 和 do-while 循环的区别

  • while 先判断后执行,第一次判断为 false,循环体一次都不执行;
  • do while 先执行后判断,最少执行 1 次;
  • 如果 while 循环第一次判断为 true, 则两种循环没有区别;

11. break 和 continue 的作用

  • break: 结束当前循环并退出当前循环体,还可以退出 switch 语句;
  • continue: 循环体中后续的语句不执行,但是循环没有结束,继续进行循环条件的判断(for 循环还会 i++),所以只是结束本次循环。

你可能感兴趣的:(面试题,java)