Chp2 Java语言基础
1.注释:对代码的解释,增强代码的可读性。
2.包
2.1 package语句
如果使用package语句,则该语句必须作为.java文件的第一个语句,写在任何类的外边
package的名字最好全部小写。
2.2import语句
import语句表示导入特定的类。
使用 import语句,这个语句必须放在任何类的外部,仅能在package语句之后。
如果想一次导入某个包下所有的类,可以使用 * 通配符,例如下边这个语句
imoprt java.util.*;
3.编码规范
3.1标识符命名
Java程序组件基本分为五大类:包、类、变量、函数、常量。
1)Java标识符由字母、数字、下划线(_)、货币符号($)组成 ,数字不能开头。
2)Java标识符区分大小写helloworld、HELLOWORLD、HelloWorld是三个不同的名字。
3)不能与关键字重名
3.2缩进
4.变量
4.1变量的含义
package corejava.chp2;
public class TestVariable {
public static void main(String[] args) {
int a ;
a = 10; #定义变量a,赋值为10
int b = 20; #定义变量b,赋值为20
int c, d; #定义变量c,d
int e = 30,f = 40; #定义变量e,赋值为30,定义变量f,赋值为40
c = a + b; #把a和b的值相加,并把结果存入c中
d = 5; #把d的值设为5
d = d + c; #把d和c的值相加,赋值给d
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
}
}
在Java中,变量是强类型的。所谓的强类型,指的是每一个变量都有自身的类型。不同的变量类型,大小不同,所能存放的数据也不同。
4.2变量的类型
基本类型总共分为8种:byte、short、int、long、float、double、char、boolean。
1)整数类型
有四种类型:byte、short、int、long
类型名称 所占空间 表示范围
byte 1个字节 -128~127
short 2个字节 -32768~32767
int 4个字节 -2147483648~2147483647
long 8个字符 -9223372036854775808
~9223372036854775807
字面值:
例如“int a = 5;”,在这个代码中a是变量,5是字面值
2)浮点数类型
float所占空间为4个字节;
double所占空间为8个字节。
字面值有两种。第一种是直接给出小数,例如1.5,-0.38等,这种是double类型
如果需要float类型,在后边加字母f(大小写均可),如:1.6f,-10.39F。
第二种是用科学计数法,例如:-1.5*10^23可以用-1.5e23表示,3.8*10^-5,可以用 3.8e-5表示。float类型的字面值在数值后边加f。例如:
double d = 2.67e13;
float f = 1.57e-3f;
3)字符类型
char所占空间为2个字节。
在计算机中,一个字符是由一个正整数表示,这个整数被称为字符的编码。
Java中char类型存放的就是字符的编码。'A'的编码为65,用16进制表示为0X41
给一个字符变量赋值的三种方式:字面值赋值,编码赋值,unicode赋值。三种赋值方式的语法如下:
char ch1 = 'A'; //字面值赋值
char ch2 = 65; //编码赋值
char ch3 = '\u0041'; //unicode赋值
字面值赋值:直接给出用单引号包围的单个字符。
编码赋值:直接给出字符的编码值
unicode赋值:在单引号之下给出\u和4位十六进制的unicode编码。
4)布尔类型
这个类型只有两种字面值true和false。
4.3变量的基本操作
1)强制类型转换
强制转化的语法如下 :
(类型)变量
b = (byte) a;
先分配一个byte类型的临时空间,然后把a的值转换成byte类型,然后放到这个临时空间 ,最后 把临时空间的值赋给b。
但是如果a中的数值的范围超过了b所表示的范围,使用强制类型转换也能正常编译,但是转换的结果会有问题。例如:
short s = 450;
byte b = (byte) s;
System.out.println(b);
一个short类型占据2个字节,一个字节是8个二进制位,所以一个short变量占据16个二进制位。这16个二进制位中,有15个字节表示数值,最高位表示数值的符号,也称之为符号位。如果是整数,为0,;负数则为1。
450为正数,所以符号位为0,然后把450转换成分二进制数,得到结果111000010,除了符号和数值之外,其他位补0,最后在内存中表示如下:
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
然后把s强制转换成byte类型,此时会开辟出一个字节的空间,并取short类型的低八位,得到结果如下:
1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
可以看到,转换过程中舍弃了short变量中的部分内容。
2)自动类型提升
Java在计算c=a+b这样的式子时,先计算a+b的值,然后赋值给变量c。
基本过程如下:
计算a+b的值→保存到临时变量→把临时变量的值赋给c
尽管a,b两个变量都是byte类型,但是Java为临时变量选择类型时,会自动提升为int类型 ,大小为4个字节。上述的第三步就变成了把int类型赋值给byte类型,从而产生了一个编译错误。
要避免这个问题,需要对其结果进行强制类型转换:
byte c = (byte) (a+b)
由于是对a+b的结果进行强制转换,因此要对a+b这个表达式加上括号。
Java自动类型提升的规则如下:
1.如果运算数中存在double,则自动类型提升为double
2.如果运算数中没有double但存在float,则自动提升类型为float
3.如果运算数中没有浮点类型,但存在long,则自动类型提升为long
4.其他所有情况,自动类型提升为int(byte+byte,byte+short之类的运算都会被自动提升为int类型。)
3)运算符
①赋值号=:计算右边的内容赋值给左边
②基本数学运算:加(+)减(-)乘(*)除(/)取余(%):例如3/2这样的表达式,由于3和2都是整数类型,则根据自动类型提升规则,结果也是一个整数类型,因此结果为1。若希望得到精确的结果1.5则需要使用3.0/2这样的表达式,来保证结果是double类型的。
③+=,-=,*=,/=:a=a+2的简写形式a+=2
④++与--:对于a+=1这种,还有更简单的写法:a++;a-=1可以用a--来代替。
⑤位运算符:按位与(&),按位或(|),按位异或(^),取反(~)。位运算符主要用于对数据的每个二进制位进行计算。
int i = 10;
i = ~i;
z这段代码中先定义了一个int类型变量i,这个变量占据32位(4个字节),在内存中表示如下:
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
然后~i表示按位取反,原数位的1变成0,0变成1,得到结果如下:
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 |
这个数表示十进制的数-11。
⑥移位操作:算术右移(>>),逻辑右移(>>>),左移(<<)。
左移可以理解为右边补0,右移可以理解为左边补0。
例如:
int n = 12;
System.out.println(n>>2); //结果为3
System.out.println(n>>>2); //结果也为3
n = -12;
System.out.println(n>>2); //结果为负
System.out.println(n>>>2); //结果为正!!
⑦布尔运算
首先把布尔运算分为两大类:
第一类运算符为:>(大于),>=(大于等于),<(小于),<=(小于等于),==(相等),!=(不相等)。这些运算符接受两个参数,返回一个布尔值,表示判断结果。
第二类运算符为:与(&&),或 (||),非(!)。这些运算符只能接受两个布尔类型的运算数。
⑧运算符的优先级
优先级 | 运算符 | 说明 |
1 | () | 最高优先级 |
2 | !,~,++,-- | |
3 | *,/,% | |
4 | +,- | 先乘除后加减 |
5 | <<,>>,>>> | 移位操作 |
6 | <,<=,>,>= | 比大小 |
7 | ==,!= | 判断是否相等 |
8 | & | 按位与 |
9 | ^ | 异或 |
10 | | | 按位或 |
11 | && | 逻辑与 |
12 | || | 逻辑或 |
13 | ?: | 三元操作 |
14 | =,+=,-=,*=,… | 所有的赋值操作 |
4)String类型初探
String类型的三个特点:
一、String类型有字面值:String类型的字面值为双引号(“”)中包含的内容,要注意单引号和双引号的区别
char ch1 = 'A'; //单引号用在字符类型字面值上
char ch2 = 'AB'; //错误!char类型不能表示多个字符
char ch3 = "A"; //错误
String str1 = "A"; //表示只有一个字符的字符串
String str2 = "ABC"; //表示有多个字符的字符串
String str3 = 'A'; //错误!
二、String类型支持加法运算
String str1 = "HelloWorld";
String str2 = "Welcome";
System.out.println(str1+str2);
System.out.println("a"+"b"); //字符串加法,输出ab
System.out.println('a'+'b'); //字符加法,将a与b的编码相加
三、任何类型与String类型相加,结果都为String类型
int i = 10;
System.out.println("1234"+i);
输出结果为123410。
5)局部变量
一、先赋值后使用
public static void main (String args[]){
int a;
System.out.println(a); //编译时错误!因为a没有赋值
}
二、局部变量有作用范围,其范围从定义的位置开始,到包含它的代码块结束。
三、重合范围内,两个局部变量不能有命名冲突