Java 基础-01
标识符
Java 标识符只能是字母、$、_开头。
首字符之后是字母、$、_、数字的任意组合,不能有其他字符。
中文也可以,但不建议使用。
数据类型
Java是一种强类型语言,要求变量的使用要严格符合规定,所有类型都需要先定义后使用。
Java数据类型分为两大类:基本数据类型和引用数据类型。
基本数据类型
基本数据类型有:整型、浮点型、字符型、布尔型。
可以表示整型的:byte、int、short、long;可以表示的数的范围不同。其中byte占一个字节,short占2个字节,int占4个字节,long占8个字节。
可以表示浮点型的:float、double。其中float占4个字节,double占8个字节。
可以表示字符类型的:char,占2个字节。
布尔类型占1位,只有true、false。
需要注意的是:定义float、以及long类型时,需要后面加入标志。
float num1 = 1.2F;
long num2 = 1200L;
引用数据类型
引用数据类型有:类、接口、数组。
常见面试题
1、有关进制转换的。
常见的进制有:二进制(0b开头)、十进制、八进制(0开头)、十六进制(0x开头)。
int i0 = 10; //十进制:10
int i1 = 010; //八进制:8
int i2 = 0x10; //十六进制:16
int i3 = 0b10; //二进制:2
2、float和double的误差问题。
例如下面的程序:
float f = 0.1f;
double d = 1.0/10;
System.out.println(f);
System.out.println(d);
System.out.println(f == d);
输出结果:
0.1
0.1
false
都是0.1,但是两个值是不相等的,因为float和double都是有限的,存在舍入误差,接近但不相等。
3、字符型的拓展---字符与数字的编码
char c1 = 'A';
char c2 = 'a';
System.out.println(c1);
System.out.println((int) c1);
System.out.println(c2);
System.out.println((int) c2);
输出结果:
A
65
a
97
计算机中存储的字符,本质都是数字,是根据编码表的一一对应。例如:Unicode编码
4、字符型的拓展--转义字符
常见的转义字符:
\t:制表符
\n:换行符
System.out.println("Hello,\tWorld"); //制表符
System.out.println("Hello,\nWorld"); //换行符
输出结果:
Hello, World
Hello,
World
5、类型转换问题
由于Java是强类型语言,因此在运算中,不同类型的数据类型要转化为同一类型再运算。
分为强制类型转换、自动类型转换两大类。
Java运算中,存在一组优先级:byte,short,char -> int -> long -> float -> double
由高到低需要强制类型转化,由低到高会自动类型转换。
int i = 123;
double d1 = i; //由低到高,不需要强制类型转换
double d2 = 123;
int i5 = (int) d2; //由高到低,需要强制类型转换
需要注意的是,在强制类型转换时可能会遇到:内存溢出问题和精度问题,例如:
内存溢出问题:
int i = 128;
byte b = (byte) i;
System.out.println(b); //输出结果:-128
int i1 = 20_0000_0000;
int i2 = 10;
System.out.println(i1*i2); //输出结果:-1474836480
System.out.println((long) i1*i2); //输出结果:20000000000
byte类型只占一位,表示范围:(-128 -- 127),无法表示128!!!
20000000000超过了int所能表示的范围。因此需要转换成long类型。
精度问题:
System.out.println((int) 12.34); //输出结果:12
System.out.println((int) -12.34f); //输出结果:-12
浮点型强制转换成整型时,会把小数全都丢去。造成精度问题。
变量、常量、作用域
变量
变量分为:局部变量和实例变量。
其中,局部变量定义在方法中,只在方法中使用,且必须初始化。
实例变量定义在类中,可以不需要初始化,有默认值。
public class Demo04 { //实例变量 int i; String name; static int age; //类变量 public static void main(String[] args) { int i = 10; //局部变量 System.out.println(i); //输出为10 Demo04 demo04 = new Demo04(); System.out.println(demo04.i); //输出默认值为0 System.out.println(demo04.name); //输出默认值为null System.out.println(age); //实例变量定义为static时,称为类变量。可以直接使用。 }}
常量
常量是指:初始化后不能再改变的值。用final标识。常量名一般使用大写字符。
final double PI = 3.14;
运算符
Java语言支持以下运算符:
- 算术运算符:+、-、*、/、%、++、--
- 赋值运算符:=
- 关系运算符:>、>=、<、<=、!=、==、instanceof
- 逻辑运算符:&&、||、!
- 位运算符:&、|、^、~、>>、<<、
- 条件运算符:? :
- 拓展的赋值运算符:+=、-=、*=、/=
常见面试题
1、自增、自减的顺序问题
int a = 3;int b = ++a; // ++a,表示a自增之后,赋值给bSystem.out.println(a); //输出4System.out.println(b); //输出4int c = 3;int d = c++; // c++,表示c自增之前,先赋值dSystem.out.println(c); //输出4System.out.println(d); //输出3
++在前,表示自增之后,再赋值。
++在后,表示先赋值,后自增。
2、如何进行幂运算?
使用Math工具类里面的方法。例如:
System.out.println(Math.pow(2, 3)); //输出为: 8.0
3、区分 位运算符和逻辑运算符。
逻辑运算符:&&(与)、||(或)、!(非)
位运算符:&(按位与)、|(按位或)、!(按位取反)、^(按位异或)
有关位运算的面试题:怎么最快计算2*8?
2<<3 //2左移三位 0000 0010 -> 0001 0000
移位运算是直接对二进制进行操作,效率高。左移相当于乘2,右移相当于除2。