Java基础-Lesson2基础语法

1、计算机中的进制

(1)常用的进制:

二进制变量:以0b开头(大小写均可),比如 int a = 0b1010;

八进制变量:以0开头,比如 int a = 01234; int a = 01010;

十六进制:以0x开头(大小写均可),比如 int a = 0x1234; int a = 0xABAA;

在定义变量的时候可以使用“_”进行划分,但不参与编译,比如 int a = 0b10_111_100;

(2)进制的转换

十进制转二进制不停的除以2取余,比如,9 ==> 1001

二进制转十进制,比如10110 ==> 0*2^0+1*2^1+1*2^2+0*2^3+1*2^4 ==> 22

二进制转十六进制,比如1101010101011001110011 ==> 0011 0101 0101 0110 0111 0011

        ==> 0x355673

二进制转八进制,比如1101010101011001110011 ==> 001 101 010 101 011 001 110 011

        ==> 015253163

负数在内存中是以补码(正数按位取反再+1)形式存储的,比如 int a = -23

        ==> 00000000 00000000 00000000 00010111 ==> 11111111 11111111 11111111 11101000

        ==> 11111111 11111111 11111111 11101001

2、标识符

以数字、字母、"$" 或  "_" 组成,不能以数字开头,不能是关键字,汉字可以

3、变量

(1)基本数据类型

byte  1个字节有符号        -128 到 127之间        //如果不带符号最大值是255

short  2个字节有符号        -32768 到 32767之间        //如果不带符号最大值是65535

int  4个字节有符号        -2147483648 到 2147483647之间        

long  8个字节有符号        -9223372036854775808 到 9223372036854775807之间        //总长度19位

float  4个字节,单精度浮点数

double  8个字节,双精度浮点数

boolean  1个字节,取值又有true 和 false

char  2个字节,存一个字符或数字

注:当一个数的取值大于int型的最大值(或小于最小值)的时候,要定义成long类型并在数值后加上L,比如 long a = 2147483650L;

当定义一个单精度浮点数时要在最后加上f,比如 float a = 3.14f;小数一般默认是双精度浮点数

char型没有符号位所以不能存负数,而且不能直接 char a = '';定义空值,要使用转义字符,比如

char a = '\u0000' == char a = '\0' ; 

(2)引用数据类型

4、运算符-算数运算符

+        -        *        /        %        ++        --

(1)在进行运算的时候,java要求运算符两端的类型相同,如果不相同,会把级别小的转换成级别大的,运算结果变成大的(可能说的不是很专业,但是便与我自己理解),比如

public static void main(String[] args) {
    System.out.println(10/3);  //3
    System.out.println(10f/3);  //3.3333333
}

(2)关于++在前和在后的问题

public static void main(String[] args) {
    int a = 9;
    int b = a++;
    System.out.println(a);  //10
    System.out.println(b);  //9
}

本例中++在后就会先进行赋值操作再进行自增,如果++在前那么 a = 10,b = 10;

请看下面这个例子

public static void main(String[] args) {
    int a = 9;
    a=a++;
    a=a++;
    a=a++;
    a=a++;
    System.out.println(a);  //9
}

这里先不做解释

5、运算符-赋值运算符

(1)“=”

把类型小的变量赋值给类型大的变量是没问题的,但是把类型大的赋值给类型小的编译不通过,比如

public static void main(String[] args) {
    byte a1 = 9;
    int b1 = a1;  //编译通过
    int a2 = 9;
    byte b2 = a2;  //编译不通过
}

但是可以进行强制类型转换,但是可能出现溢出的问题,比如

public static void main(String[] args) {
    int x = 205;
    byte y = (byte) x;
    System.out.println(y);  //-51
}

再看下面这个例子

public static void main(String[] args) {
    byte a1 = 10;
    byte b1 = 5;
    byte c1 = a1+b1;  //编译出错
    int d1 = a1+b1;  //编译通过
    short a2 = 10;
    short b2 = 5;
    short c2 = a2+b2;  //编译出错
    int d2 = a2+b2;  //编译通过
}

因为byte ,short 型取值范围小,非常容易超出容量,所以在java中,把它们的计算结果,提升为int型了

再看下面这个“类似”的例子

public static void main(String[] args) {
    byte a1 = 10;
    byte b1 = a1+5;  //编译错误
    final byte a2 = 10;
    byte b2 = a2+5;  //编译通过
}

在没有final修饰的赋值语句中,因为byte型的变量和int型的数据值相加结果为int型,而在final修饰的赋值语句中,因为a2是常量,所以直接编译成了 byte b2 = 15;

(2)“+=”

关于“+=”的一个小区别

public static void main(String[] args) {
    byte a = 10;
    a = a+5;  //编译出错
    a += 5;  //编译通过
}

附:关于基本数据类型的初始值

byte、short、int 都是0

long  是0L

float  是0.0f

double  是0.0

boolean  是false

char  是'\0'

基本数据类型,无论是哪种,都没有null这个取值

6、其他运算符

(1)逻辑运算符

参与逻辑运算的都是逻辑表达式,结果也是true 或 false

&        两端都是true则结果为true,否则为false

|        只要有一个是true,那么结果就为true

!        取反,原来是true就返回false,原来是false就返回true

^        异或,两端相同则返回false,不同则返回true

&&        和& 的意思相同,但是短路(在有多个条件相与的时候,如果前面的条件不成立,则直接返回false,后面的表达式将不再执行)

||        和| 的意思相同,但短路

附:&&和& 还有一个区别是,& 可以用于位运算,但是&&只能用于逻辑运算,比如

public static void main(String[] args) {
    System.out.println(true && false);  //false
    System.out.println(7 & 9);  //1
}

知识点:

&        按位与

|        按位或

~        按位取反

^        按位异或

<<        逻辑左移  //每左移一次相当于将原来的数乘以2

>>        逻辑右移  //每右移一次相当于将原来的数除以2

>>>        无符号右移  //在右移的时候,无论原来的数是正是负米高为都补0

public static void main(String[] args) {
    System.out.println(7 | 9);  //15
    System.out.println(~Integer.MAX_VALUE);  //-2147483648,变成最小的负数
    System.out.println(7 ^ 9);  //14
    int a = -2;
    a = a<<1;
    System.out.println(a);  //-4,不改变符号
    int b = -8;
    b = b>>2;
    System.out.println(b);  //-2,不改变符号
}

注意:在进行移位的时候,对于byte, short, int型,真正移位的数是和32进行取余后的数,比如

public static void main(String[] args) {
    System.out.println(16<<33);  //32,相当于16<<(33%32)
    System.out.println(16>>33);  //8,相当于16>>(33%32)
}

而且移位运算的优先级很低,而且不是++  -- 这类的自增操作运算符,它不会改变原来的变量的值

(2)关系运算符

>        ==        <        >=        <=        !=

instanceof运算符  //判断一个对象是不是某一个类的实例

(3)条件运算符

三元运算符,比如

public static void main(String[] args) {
    int number = 30;
    int result = number>50?Integer.MAX_VALUE:Integer.MIN_VALUE;
    System.out.println(result);  //-2147483648
    int score = 60;
    String res = score>=60?"及格":"不及格";
    System.out.println(res);  //及格
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值