Java基础-01

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

上一篇:C# 多线程 progressbar 界面不卡顿简单用法


下一篇:Linux bunzip2 命令