Java基础知识(一)
一、编译型语言和解释型语言编译型语言:程序执行前,必须把源代码编译成机器可识别的语言文件,如exe格式的文件,以后要再运行时,直接运行编译后文件即可。由于只编译一次,所以运行效率比较高,但是由于与特定平台相关,一般无法移植到其他平台,所以跨平台性差。解释型语言:程序在执行时,源代码边编译边执行,不需要提前编译。由于程序每次运行都需要编译解释执行,所以运行效率较低,但是只要运行的平台能提供相应的解释
一、编译型语言和解释型语言
-
编译型语言:程序执行前,必须把源代码编译成机器可识别的语言文件,如exe格式的文件,以后要再运行时,直接运行编译后文件即可。由于只编译一次,所以运行效率比较高,但是由于与特定平台相关,一般无法移植到其他平台,所以跨平台性差。
-
解释型语言:程序在执行时,源代码边编译边执行,不需要提前编译。由于程序每次运行都需要编译解释执行,所以运行效率较低,但是只要运行的平台能提供相应的解释器,就可以运行源代码,所以跨平台性较好。
-
编译型语言包括C、C++等;解释型语言包括Java、javascript、python等。
Java程序运行过程先由编译器将.java源文件编译为二进制字节码文件(.class文件),然后再由解释器将.class文件解释为机器可以直接 识别的语言进行执行,这一过程是在JVM中进行的。
虽然java程序运行前经过了编译阶段,但是编译后的文件机器并不可以直接执行,所以 Java 应该归类为解释型语言。
二、Java注释
Java中有三种注释:
- 单行注释——’//’ 符号开头
- 多行注释——’/* */’ 格式
- 文档注释——’/** /’ 格式,可以使用JavaDoc 标签(各种各样的*@** 标签,如@author、@since等)
三、Java关键字
Java目前有48个关键字、2个保留字(goto、const)、3个特殊值(true、false、null),均不可以作为标识符使用
四、标识符
标识符:Java中的所有组成部分都需要有名字,类名、方法名、变量名都被称为标识符。
注意事项:
-
标识符可由数字、字母、下划线、美元符($)组成,其中数字不能作为标识符的开头;
-
不能使用关键字或保留字作为标识符;
-
标识符是对大小写敏感的;
-
可以使用中文名、拼音作为标识符,但是不建议;
-
建议使用驼峰法命名规则:
1)类名:多个单词组成时,首字母均大写,如TestDemo
2)方法名和变量名:由多个单词组成时,首单词字母小写,从第二个单词开始首字母大写,如studentName
3)常量:单词全部大写,如果由多个单词组成,以下划线’_'分隔,如STUDENT_AGE
4)标识符要尽量做到见名知义
五、数据类型
Java是一种强类型语言,所有变量必须先声明类型才能使用,如果不经过强制类型转换,那么它就一直是这种数据类型了,像.net 、Python、C++等语言都是强类型语言。弱类型语言是指某个变量被定义,其类型可以根据条件自动进行转换,不需要强制转换,像vb 、PHP、javascript等语言都是弱类型语言。
8种基本数据类型(byte、short、int、long、float、double、char、boolean)
-
位(bit)是计算机内部数据储存的最小单位,比如10110010是一个8位二进制数
-
字节(byte)是计算中数据处理的基本单位,使用大写B表示
-
1B(byte,字节)=8bit(位)
-
字符是指计算中使用的字母、数字、文字、符号等,所有的字符本质是数字,可通过强制转换获取对应数值,数值在0~65535之间(Unicode编码,通常用十六进制编码方案表示,范围在’\u0000’到’\uFFFF’之间)
- 进制:
进制 | 数值 | 前缀 |
---|---|---|
二进制 | 0、1 | 0b |
八进制 | 0~7 | 0 |
十进制 | 0~9 | \ |
十六进制 | 0-9、A-F | 0x或者0X |
注意:浮点数(float、double)进行计算、比较操作时,由于精度问题,结果可能会出现偏差,所以尽量要避免使用浮点数做精确计算处理,业务中需要小数数值进行计算应该使用BigDecimal类型数值。
- 转义字符:
类型转换:
范围小的数据类型可以自动向范围大的数据类型转换,叫做自动类型转换(也叫隐式类型转换)
范围大的数据类型向范围小的数据类型转换,叫做强制类型转换(也叫显式类型转换),强制类型转换可能会造成内存溢出或精度丢失等问题
byte、short、char——>int——>long——>float——>double
低----------------------------------------------------------------------------->高
六、变量
变量按作用域可分为三种:
- 类(静态)变量——类中定义,有static关键字修饰;
- 成员(实例)变量——类中定义,无static关键字修饰;
- 局部变量——方法内变量。
类变量及成员变量如果未初始化的话,是有默认值的:
- 变量类型为整数型——默认值为0;
- 变量类型为浮点型——默认值为0.0;
- 变量类型为布尔型——默认值为false;
- 变量类型为字符型——默认值为‘\u0000’(空字符),数值为0;
- 变量类型为引用类型——默认值为null。
局部变量如果未初始化,无默认值,直接调用会提示错误
常量:以final关键字修饰的变量,必须在定义时直接进行初始化,并且之后不可以再重新赋值,一般情况是和static关键字搭配使用,变量名字母全部大写,以下划线分隔,如’LAST_NAME’
七、运算符
算数运算符:+、-、*、/、%、++、–
赋值运算符:=
关系运算符:>、<、>=、<=、==、!=、instanceof
逻辑运算符:&&、||、!
位运算符:&、|、^、~;>>;<<;>>>
条件(三目)运算符:?:
扩展赋值运算符:+=、-=、*=、/=
位运算符 | 描述 | 运算规则 |
---|---|---|
& | 与 | 两个位都为1时,结果才为1,否则为0 |
| | 或 | 两个位都为0时,结果才为0,否则为1 |
^ | 异或 | 两个位相同为0,相异为1 |
~ | 取反 | 0变1,1变0 |
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0 |
>> | 右移(有符号) | 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) |
>>> | 右移(无符号) | 同上,不考虑符号 |
Demo测试:
public static void main(String[] args) {
int A=0b0011_1100;
int B=0b0000_1101;
String result1 = toBinary(A&B,8);
String result2 = toBinary(A|B,8);
String result3 = toBinary(A^B,8);
String str=Integer.toBinaryString(~B).toString();
String result4 = str.substring(str.length()-8,str.length());
int result5 = 2<<3;
int result6 = 16>>2;
int result7 = 16>>>2;
System.out.println("A&B: " + result1);
System.out.println("A|B: " + result2);
System.out.println("A^B: " + result3);
System.out.println("~B: " + result4);
System.out.println("2<<3: " + result5);
System.out.println("16>>2: " + result6);
System.out.println("16>>>2: " + result7);
}
/**
* 将一个int数字转换为二进制的字符串形式。
* @param num 需要转换的int类型数据
* @param digits 要转换的二进制位数,位数不足则在前面补0
* @return 二进制的字符串形式
*/
public static String toBinary(int num, int digits){
int parseValue=Integer.parseInt(Integer.toBinaryString(num));
String finalValue=String.format("%0"+digits+"d", parseValue);
return finalValue;
}
结果:
A&B: 00001100
A|B: 00111101
A^B: 00110001
~B: 11110010
2<<3: 16
16>>2: 4
16>>>2: 4
public static void main(String[] args) {
int a=1;
if(a++==2){
System.out.println("true1");
}else{
System.out.println("false1");
System.out.println("a的值为:"+a);
}
int b=3;
if(--b==2){
System.out.println("true2");
}else{
System.out.println("false2");
System.out.println("b的值为:"+b);
}
}
结果:
结果false1
a的值为:2
true2
public static void main(String[] args) {
int a=1;
int b=2;
System.out.println(""+a+b);
System.out.println(a+b+"");
}
结果:
12
3
更多推荐
所有评论(0)