目录
一、基础知识部分
1.Java程序的运行
Java语言编写程序(*.java Java源文件)需要经过编译(compile)步骤,编译过后不直接产生特定平台的机器码而是产生一种字节码(*.class 源文件编译生成的字节码),再经Java解释器来解释执行(Runtime)为机器可执行的特定平台的机器码。Java程序的执行必须先编译后解释,所以说Java是一种半编译半解释的语言。
2.负责Java程序解释执行的解释器——虚拟机JVM
JVM是可运行Java字节码文件的虚拟计算机,JVM在Java程序执行过程中承上启下:向Java编译器提供相同的变成接口,向下对不同的操作系统(不同平台)提供接口互不相同。对于Java编译器来说,JVM屏蔽掉了操作系统(平台)的不同,编译出来的字节码只面向JVM虚拟机,虚拟机再根据操作系统的不同解释执行成特定平台的机器码,使一段相同的Java代码,可以在不同的操作系统上执行,JVM虚拟机是Java可以跨平台的关键所在。
3.JVM、JRE、JDK的概念和功能,及其关系
JVM是Java虚拟机,解释执行class文件。
JRE是Java运行环境,作为运行Java程序所需环境的集合。
JDK是Java开发包,作为开发运行Java程序所需环境的集合。
4.JAVA程序的结构
1、由一个或多个独立的类组成
2、最多一个公共类
3、源代码文件必须与这个公有类的名字相同
4、类由一个或多个方法组成。其中公有类中的main方法用作程序运行的入口。
5.同为面向对象的编程语言,Java和C++区别
①在Java中所有的代码都必须通过类来实现,无论这个程序有多么的简单。但是C++就可以脱离类来实现。Java是一种纯粹的面向对象的语言,而C++不是。
以一个最简单的HelloWorld程序为例:
#HelloWorld Java代码
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
#HelloWorld C++代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
]
② Java源码会先经过一次编译,成为中间码也就是字节码,中间码再被虚拟机JVM内置的解释器解释成机器码。C++源码一次编译,直接在编译的过程中链接了,形成了机器码。
③ C++比Java执行速度快,这种速度上的差异存在但是我们不容易感受到。
④Java可以利用JVM跨平台,C++不可以。
⑤ C++中有指针,Java中没有,但是有引用。
⑥ C++支持多继承,Java中类都是单继承的(父类只有一个)。但是继承都有传递性,同时Java中的接口是多继承,类对接口的实现也是多实现。
⑦C++创建对象之后,需要再使用完将其调用delete方法将其销毁;Java有垃圾回收机制,用来监视new出来的所有对象,辨别不会再被引用的对象,然后释放内存空间。
⑧ C++运算符可以重载,但是Java中不可以。同时C++中支持强制自动转型,Java中不行,会出现ClassCastException(类型不匹配)。
二、标识符
1.标识符的定义规则
标识符:给变量、常量、方法、类、对象等命名的符号,也就是程序员起名字的地方都要用到标识符。
①只能由字母、数字、_或$组成。
②必须以字母、_或$开头。
③大小写敏感的,无长度限制。
④不能是Java的关键字和保留字。
⑤不局限于英文字母,可以包含Unicode字符集支持的字符,比如说中文、韩文。
2.驼峰命名规则
小驼峰法
除第一个单词之外,其他单词首字母大写,变量一般使用小驼峰法标识,例如 int myMathGrade。
大驼峰法
每一个单词的首字母都采用大写字母,类名、函数名、属性、命名空间一般用大驼峰法标识,例如 public calss HelloWorld。
三、数据
1.常量
在程序运行期间其值保持不变的量。
final定义常量————用符号表示常量
final double PI = 3.14159 //PI是实数类型的常量
2.变量
值在程序运行的时可以改变的量,每个变量需要先声明然后赋值,初始化或者赋值以后才可以使用。
四、数据类型及其转换
和C/C++一样Java的变量名也是先声明后使用,变量只能接受和它类型匹配的值。
1.整数类型
二进制表示:0b或0B作为前缀。
八进制:0作为前缀。
十进制:无前缀。
十六进制:0x或者0X作为前缀。
系统对于整数类型的判定:
①一个整数默认类型是int型,无论这个数多大。
②在给byte或者short在各自对应的范围内赋值,系统会将这个整数当作byte或者short类型处理。
③如果超出int型的范围的整数,系统不会自动当作long类型来处理,需要加上后缀l或者L。未超出int范围的整数给long类型赋值,是可行的,例如:long a = 10;表面上计算机直接将10当作long类型处理了,实际上存在的是int类型到long类型的自动类型转换。
※整数占用的存储空间与代码所在机器无关。
2.字符类型
用单引号表示。
3.浮点类型
Java中的实数类型 float(4字节,单精度)、double(8字节,双精度) 有固定的表数范围和字段长度,字段长度、表数范围都与机器无关。
Java浮点数遵循IEEE 754标准,用二进制数据的科学计数法表示浮点数。
float:第1位是符号位,接下来8位表示指数,再下面23位表示尾数;
double:第1位是符号位,接下来8位表示指数,再下面的52位表示尾数。、
浮点数无法精确表示部分实数,例如:0.9-0.3 = 0.60000000001。
系统默认浮点数位double类型
4.布尔类型
只能用true和false赋值,不能与其他类型进行转换,不能用0或者非零来代替.
*5.基本类型之间的转换原则
类型转换包括自动类型转换和强制类型转换。
①系统默认整数类型是int型。
②系统默认浮点类型位double型。
③表示范围小的数据类型可以直接赋值给表示范围大的数据类型,可以自动进行类型转换。表数范围大的类型向下兼容表数范围小的类型。例如:int n = 2;long m = n;
④表数范围大的类型转换成表数范围小的类型时,要加强制转换符,但可能降低精度或造成溢出。
例如:long n = 2;int m = (int)n;float n = 2.5f; long = n;(会存在精度损失)
⑤多种类型混合运算:
1)系统自动将所有类型转换成表数范围最大的类型,再进行计算;
2)byte、short、char互相之间不转换,用时全部自动转换成int类型。
⑥判断两个类型表示范围大小第一看所占字节数第二看精度大小,所占字节越大,精度越大,表示范围也就越大。
应用一下:long l = 30000000000L;如果不加L这里就会报错,因为这个数字已经超过了int的范围,需要让他自身变成long类型,在进行赋值。
五、运算符
1、算术运算符
字符串连接符“+”:“+”两侧的操作数只要有一个是字符串(String)类型,系统自动将另一个操作数转换成字符串再进行连接。
自加自减运算符:前序增减,先运算再赋值;后序增减,先赋值再运算。
2、赋值运算符
3、比较运算符
返回值为Boolean类型。
4、逻辑运算符
返回值也为boolean类型。
5、位运算
6、 三目条件运算符
x ? y : z
x为boolean类型表达式,计算x的值如果为true,则整个表达式的结果为y,否则为z。
int score = 61;
String result = score >= 60 ? “及格”:“不及格”;
System.out.println(result);