1.标识符
(1)标识符由大小写字母、数字、下划线“_”和美元符“$”组成,但是不能以数字开头
(2)Java严格区分大小写java和Java是完全不一样的2个标识符
(3)标识符不能使用Java的关键字
标识符命名习惯:
包名:使用小写字母a-z
类名和接口名:所有字母首字母大写如HelloWorld
方法名:第一个单词的首字母小写,其他单词首字母大写如getAge
变量名:成员变量和方法相同,局部变量全部使用小写
常量名:全部使用大写,最好使用下划线分隔单词
2.注释
Java有三种注释方式分别是
(1)单行注释
//哈哈你好
(2)多行注释
/*
你好
哈哈
*/
(3)文档注释
/**
哈哈
你好
*/
(2)和(3)的主要区别是(3)会写入 javadoc文档,一般用于类说明,作者信息等地方注释
3.基本数据类型
(1)整数类型
类型 | 位数 | 取值范围 | 默认值 |
字节型 byte | 8 | -2^7~2^7-1 | 0 |
短整型 short | 16 | -2^15~2^15-1 | 0 |
整型 int | 32 | -2^31~2^31-1 | 0 |
长整型 long | 64 | -2^63~2^63-1 | 0 |
注意(如果定义长整型时需在数字后面加“L”或者"l",如long a=10L;)
Java中八进制以0开头,011代表的是十进制的9而不是11。十六进制以0x开头,0x11表示的是十进制的17而不是11,注意区分。
(2)浮点类型
类型 | 位数 | 取值范围 | 默认值 |
单精度浮点类型 float | 32 | 1.4013E-45~3.4028E+38 | 0.0F |
双精度浮点类型 double | 64 | 4.9E-324~1.7977E+308 | 0.0D |
注意(使用单精度浮点类型必须在数值后面跟上f或者F如 float f=3.14 f; 这和long是一样的,双精度浮点类型可加D或者d,也可以不加,因为双精度浮点类型是默认形式)
(3)布尔类型(boolean)
真:true,假:false 用于判断逻辑条件
注意(C、C++常用1和0来表示真假,在java里面不适用)
(4)字符类型(char)
字符类型数据用于表示单个字符,注意与字符串区分开,字符用单引号表示如'a',而字符串用双引号表示如"a"
字符类型可以和数值类型相互赋值,如为了输出字符’a',可以用以下2种方式
char ch=97;//因为字符'a'在unicode编码是97通过赋值直接打印出来
System.out.println(ch);
转义字符输出
System.out.println('\u0061');//‘a’的16进制是0x61
System.out.println('\141');//‘a’的8进制是0141
转义字符 | 含义 |
\ddd | 1~3位8进制数所表示的unicode字符,如\141是字符a |
\uXXXX | 4位16进制所表示的unicode字符,如\u0061是字符a |
\' | 单引号字符 |
\\ | 反斜杠字符 |
\t | 垂直制表符,将光标移到下一个制表符的位置 |
\r | 回车 |
\n | 换行 |
\b | 退格 |
\f | 换页 |
4.数据类型转换
(1)自动类型转换
必须满足2个条件,1、转换数据类型必须兼容2、自动转换总是从低位类型到高位类型(这里的低位类型和高位类型分别指小的取值范围和大的取值范围)
public class MyTest
{
public static void main(String[] args)
{
short sInt=5;//定义一个short类型变量
int iInt=sInt;//short自动类型转换为int
System.out.println("short自动类型转换为int后的值="+sInt);
float f=1.0f;//定义一个float类型变量
double d1=f;//float自动类型转换为double
System.out.println("float自动类型转换为double的值="+d1);
long l=542L;//定义一个long类型变量
double d2=l;//long自动类型转换为double
System.out.println("long自动类型转换为double的值="+d2);
int i=54211000;//定义一个int类型变量
float d=i;//int自动类型转换为float
System.out.println("int自动类型转换为float的值="+d);
}
}
输出
short自动类型转换为int后的值=5
float自动类型转换为double的值=1.0
long自动类型转换为double的值=542.0
int自动类型转换为float的值=5.4211E7
(2)强制类型转换
强制类型转换的转换数据类型也必须兼容,转换类型变成了从高位类型到低位类型,转换形式是(type)value;其中type是要强制转换后的数据类型
注意(进行强制转换因为是从大范围转换为小范围,所以当数值可能大于小范围最大值时就要特别注意数据可能会丢失)
public class MyTest
{
public static void main(String[] args)
{
int i1=128;//定义一个Int类型
byte b=(byte)i1;//强制类型转换byte
System.out.println("int 强制类型转换byte后值等于"+b);
double d=123.456;//定义一个double类型
int i2=(int)d; //强制类型转换int
System.out.println("double 强制类型转换int后值等于"+i2);
char c1='A';//定义一个char类型
int i=c1+1;//char类型和int类型计算
char c2=(char)i;//进行强制类型转换
System.out.println("int 强制类型转换 char 后值等于"+c2);
}
}
输出
int 强制类型转换byte后值等于-128
double 强制类型转换int后值等于123
int 强制类型转换 char 后值等于B
(3)隐含强制类型转换
byte=123;
整数的默认数据类型是int,隐含强制转换为byte类型,由Java系统自动完成,而浮点类型是不存在这种情况的所以float后面必须跟上F或者f
5.运算符和表达式
public class MyTest
{
public static void main(String[] args)
{
int i1=8;
int i2=8;
//加减乘除求余运算
int jia=i1+i2;//进行加运算
int jian=i1-i2;//进行减运算
int cheng=i1*i2;//进行乘运算
int chu=i1/i2; //进行除运算
int qiuyu=i1%i2;//进行求余运算
System.out.println("进行加运算后值等于"+jia);
System.out.println("进行减运算后值等于"+jian);
System.out.println("进行乘运算后值等于"+cheng);
System.out.println("进行除运算后值等于"+chu);
System.out.println("进行求余运算后值等于"+qiuyu);
//自增自减运算符
int a=3;
System.out.println("a的值等于"+a);
//a++先调用a值再++
System.out.println("a++的值等于"+(a++)+" a++后a的值等于"+a);
//++a先++再调用a值
System.out.println("++a的值等于"+(++a)+" ++a后a的值等于"+a);
//a--先调用a值再--
System.out.println("a--的值等于"+(a--)+" a--后a的值等于"+a);
//--a先--再调用a值
System.out.println("--a的值等于"+(--a)+" --a后a的值等于"+a);
//位运算符
int m=3;//二进制为0000..0011因为是int是32位所以0011前面还有28个0
int n=5;//二进制为0000..0101因为是int是32位所以0101前面还有28个0
//与&运算如果相对应位都是1则结果为1否则0,m & n为0000..0001
System.out.println("m & n等于"+(m & n));
//或|运算如果相对应位都是0则结果为0否则1,m | n为0000..0111
System.out.println("m | n等于"+(m | n));
//异或^运算如果相对应位值相同则结果为0否则1,m ^ n为0000..0110
System.out.println("m ^ n等于"+(m ^ n));
/*
非~将操作数每一位按位取反,~m为1111..1100 ~n为1111..1010
因为负数是以补码形式存储的,以1111..1100为例符号位不变求反1000..0011,
再加1得到的补码是1000..0100即-4
*/
System.out.println("~m等于"+~m+" ~n等于"+~n);
//移位运算符
/*
左移运算符将第一个操作数的比特位向左移动第二个操作数
指定的位数右边空缺的位用0补充
右移运算符将第一个操作数的比特位向右移动第二个操作数
指定的位数,移位后第一个操作数负数还是负数,正数还是正数
无符号右移运算符将第一个操作数的比特位向右移动第二个操作数
指定的位数,移位后不管原来是正还是负都用0填充
*/
int num=6;//0000..0110
//6左移1位变成0000..1100
System.out.println("6左移1位等于"+(num<<1));
//6右移1位变成0000..0011
System.out.println("6右移1位等于"+(num>>1));
num=-8;
//-8即1111..1000无符号右移1位变成0111..1100
System.out.println("-8无符号右移1等于"+(num>>>1));
/*
逻辑运算符
非短路逻辑操作符:&(与运算),^(异或运算),|(或运算)。
进行逻辑&或者|运算时,不管操作符两边的条件表达式成不成立,
都进行运算判断
短路逻辑操作符:&&(并且),||(或者).
如果操作符左侧就可以判断出结果就不会再进行右侧的判断
*/
//到1<0已经知道逻辑为假了就不会再进行右侧的判断
boolean b1=((1<0)&&(1/0>0));
if(b1==true)
System.out.println("结果为真");
else
System.out.println("结果为假");
//这个会报错,不管操作符两边的条件表达式成不成立,都进行运算
/*boolean b2=((1<0)&(1/0>0));
if(b2==true)
System.out.println("结果为真");
else
System.out.println("结果为假");
*/
/*
三元运算符
expression?statement1:statement2
条件?真时执行操作:假时执行操作
*/
System.out.println("5大于3吗?"+(5>3 ? "大于" : "不大于"));
}
}
最高优先级 | |||
() | [ ] | . | |
++ | -- | ~ | ! |
* | / | % | |
+ | - | ||
>> | >>> | << | |
> | >= | < | <= |
== | != | ||
& | |||
^ | |||
| | |||
&& | |||
|| | |||
?: | |||
= | += | -= | *= |
最低优先级 |
参考文献:
Java从入门到精通 高宏静
Java面向对象编程 孙卫琴