【JavaSE-01&面试题】:核心语法(1)
一、 基础语法
1、Java语言有哪些特点?
- 面向对象。(封装、多态、继承)
- 平台无关性。(通过Java语言编写的应用程序在不同的系统平台上(安装Java虚拟机 )都可以运行)
- 可靠性。
- 安全性。
- 原生支持多线程的。( C++ 没有内置的多线程机制,需要调用操作系统的多线程功能来进行多线程程序设计,而Java语言却提供了多线程机制)
- 编译与解释并存 。(Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统的解释器中运行)
高级编程语言按照程序的执行方式分为编译型和解释型两种。简单来说,编译型语言是指编译器针对特定的操作系统将源代码一次性翻译成可被该平台执行的机器码;解释型语言是指解释器对源程序逐行解释成特定平台的机器码并立即执行。比如,你想阅读一本英文名著,你可以找一个英文翻译人员帮助你阅读,有两种选择方式,你可以先等翻译人员将全本的英文名著(也就是源码)都翻译成汉语,再去阅读,也可以让翻译人员翻译一段,你在旁边阅读一段,慢慢把书读完。
Java语言既具有编译型语言的特征,也具有解释型语言的特征,因为Java程序要经过先编译,后解释两个步骤,由Java编写的程序需要先经过编译步骤,生成字节码(*.class文件),这种字节码必须由Java解释器来解释执行。因此,我们可以认为Java语言编译与解释并存。
- 健壮性 。(吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分如指针,提供了一个相对安全的内存管理和访问机制 )
为什么说 Java 语言“编译与解释并存”?
Java 语言既具有编译型语言的特征,也具有解释型语言的特征,因为 Java 程序要经过先编译,后解释两个步骤。
由 Java 编写的程序需要先经过编译步骤,生成字节码(\*.class
文件),这种字节码必须由 Java 解释器来解释执行。因此,我们可以认为 Java 语言编译与解释并存。
高级编程语言按照程序的执行方式分为编译型和解释型两种。简单来说,编译型语言是指编译器针对特定的操作系统将源代码一次性翻译成可被该平台执行的机器码;解释型语言是指解释器对源程序逐行解释成特定平台的机器码并立即执行。比如,你想阅读一本英文名著,你可以找一个英文翻译人员帮助你阅读,
有两种选择方式,你可以先等翻译人员将全本的英文名著(也就是源码)都翻译成汉语,再去阅读,也可以让翻译人员翻译一段,你在旁边阅读一段,慢慢把书读完。
2、JDK、JRE、JVM的概念和关系?
- JDK是提供给Java开发人员使用的,其中包含了java编译器(javac)和开发工具(如javadoc和jdb),也包括了 JRE。它能够创建和编译程序;
- JRE是java运行时环境。包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,但是它不能用于创建新程序;
- JVM(Java虚拟机)是运行java字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。
在Java中,JVM可以理解的代码就叫做字节码(即扩展名为.class的文件)﹐它不面向任何特定的处理器,只面向虚拟机。Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java程序无须重新编译便可在多种不同操作系统的计算机上运行。
即:
JDK = JRE + 开发工具集(例如Javac编译工具等)
JRE = JVM + Java SE标准类库
2.1 什么是字节码?采用字节码的好处是什么?
在 Java 中,JVM 可以理解的代码就叫做
字节码
(即扩展名为.class
的文件),它不面向任何特定的处理器,只面向虚拟机。
Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。
3、Java和C++的区别?
- 都是面向对象的语言,都支持封装、继承和多态
- Java不提供指针来直接访问内存,程序内存更加安全
- Java的类是单继承的,C++支持多重继承;虽然Java的类不可以多继承,但是接口可以多继承。
- Java有自动内存管理机制,不需要程序员手动释放无用内存
- 在C语言中,字符串ui或字符数组最后都会有一个额外的字符’\0’来表示结束。
参考: java与C语言在字符串结束符上的区别.
4、什么是Java程序的主类?应用程序和小程序的主类有何不同?
一个程序中可以有多个类,但只能有一个类是主类。主类是Java程序执行的入口点。
在Java应用程序中,这个主类是指包含main ()方法的类。而在Java小程序中,这个主类是一个继承自系统类JApplet或Applet的子类。
不同点:应用程序的主类不一定要求是public类,但小程序的主类要求必须是public类。
5、标识符的命名规则?
Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符。
注意规则:1.由26个英文字母大小写,0-9 ,_或 $ 组成….
- Java中的名称命名规范:
- 包名:多单词组成时所有字母都小写:xxxyyyzzz
- 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
- 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
6、变量的分类
7、基本数据类型的范围和存储空间
一个0或者一个1存储为一个比特(bit),是计算机中最小的存储单位
计算机中最基本的存储单元是字节(byte)。每个字节由8个比特构成
1KB=1024B、1MB=1024KB、1GB=1024MB、1TB=1024GB
Char型数据:“字符”(2字节) ,char类型的值要用单引号括起来.
char c1=’a’; char c2=’2’; char c3=’中’;
注意:“A”和’A‘是不一样的。
对于boolean类型:
jvm规范中并没有强制定义boolean对占用内存大小的定义, 由虚拟机厂商自行实现。逻辑上是占用1位,实际情况会考虑计算机高效因素等。 通过runtime内存布局分析, 和jit汇编代码分析, hotspot虚拟机中boolean占用内存大小是1个byte, boolean数组中, 每个元素也只占用1个byte. 但在openj9这个虚拟机中, boolean占用内存大小是4个byte.
-
如果boolean是单独使用:boolean占4个字节。
-
如果boolean是以boolean数组形式使用:boolean占1个字节
-
字符型常量和字符串常量的区别?
- 形式上:字符常量是单引号引起的一个字符;字符串常量是双引号引起的若干个字符
- 含义上:字符常量相当于一个整型值(ASCII值),可以参加表达式运算;字符串常量代表一个地址值(该字符串在内存中的存放位置)
- 占内存大小:字符常量只占2个字节;字符串常量占若干个字节
8、类型转换
- 自动类型转换:
- 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
- byte,short,char之间不会相互转换,