基本语法
关键字:特定含义的单词。组成关键字字母全部小写。goto和const作为保留关键字。
标识符:由英文和数字和$,_字符组成。不能数字开头,不可以是关键字。用于给包,类,接口,方法,变量,常量命名。
建议写法:包:全部小写。单级:hello。多级:section.hello。
类和接口:一个单词:每个单词首字母大写。多个单词:每个单词首字母大写。Name,TypeName
方法和变量:一个单词:单词首字母小写。多个单词:第二个单词开始每个单词首字母大写。name,typeName
常量:一个单词:全部大写。多个单词:每个字母大写并用下划线隔开。NAME,TYPE_NAME
注释: 将自己的思想通过注释写出来,在通过代码表现
单行注释://
多行注释:/* */
文档注释:/** */ (被javadoc解释生成一个说明书)
常量:字面值常量:字符串常量("abc"),整数常量(1),小数常量(1.2),字符常量('a'),布尔常量(ture,false),空常量(NULL)。
1. java对于整数常量有四种表达形式二进制(0b),八进制(0),十进制(默认数据),十六进制(0x)。
常用转换:
其他进制转十进制:位权展开法:系数*基数^权次幂。十进制转其他进制:除基取余,直到商为零,余数反转。
(系数:就是每一个位上的数值。基数:x进制的基数就是x。权:对每一个位上的数据)
快速转换:
十进制和二进制:BCD码:8421码时BCD的一种,将每一位二进制使用固定数值表示,将其相加就可以得到二进制对应的十进制数。
二进制转十六进制:4位组合。
二进制转八进制:3位组合。
2. 原码:最高位为符号位,其余为数值位。符号位为0表示正,符号位1表示负。
反码:正数的反码与原码相同。负数的反码是对其原码逐位取反,符号位不变。
补码: 正数的补码与原码相同。负数的补码是其反码加一。(计算机内部存储采用补码)
变量:变量本质是内存中的一块区域,使用变量名访问该区域。 定义变量(为变量申请空间),初始化变量(给对应空间赋值),Java中必须初始化变量才可以使用。
数据类型:
Java默认整数是int类型,定义long类型的变量要在字面常量后面加L。默认浮点数是double类型,定义一个float类型的变量要在字面常量后面加F。
long l_var = 123L; float f_var = 1.23F;
boolean类型不能进行强制类型转换。
Java没有无符号类型的数据,全部都是有符号类型的数据。
字符串类型与其他类型做加法是+被重载为字符串连接符,字符相加是做数值加法。
"hello" + 'a' + 1 --> "helloa1"
'a' + 1 + "hello" --> "98hello"
Java语言char类型占用两个字符,可以表示中文。Java语言采用Unicode编码。
默认类型转换:byte,short,char( 整型提升) ----> int ----> long ----> float ----> double (float占用四个字节但是其表示数字范围大于long类型的变量)
byte b1 = 0,b2 = 1,b3; b3 = b1 + b2; // error。当byte,short,char类型的变量进行运算时,不相互转换,会单独提升到默认类型int再运算。
b1 = 3 + 4; // ok 预处理器先将常量计算出来,查看结果是否在byte范围内,在的话就不报错。
b1 = 130; // 打印结果 -126。00000000 0000000 0000000 10000010(截断) --> 10000010(补码) -->100000001(反码) ---> 11111110(原码)。
b1 = (byte)130; //打印结果-126 。 0 --> 1 --> 127 --> -128 --> -1 --> 0。范围是循环 。
浮点数的存储:
17.625在内存中的存储:
首先要把17.625换算成二进制:10001.101 ( 整数部分,除以2,直到商为0,余数反转。小数部分,乘以2,直到乘位0,进位顺序取。)
在将10001.101右移,直到小数点前只剩1位:1.0001101 * 2^4 因为右移动了四位
底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011
符号部分是整数,所以是0
存储格式是:01000001 10001101 00000000 00000000
float存储规则:
一个浮点数有2部分组成:底数m和指数e
底数部分: 使用二进制数来表示此浮点数的实际值。(实际是占用24bit的一个值,但是最高位始终为1)
指数部分: 占用8bit的二进制数,可表示数值范围为0-255。(指数可正可负,此处算出的次方必须减去127才是真正的指数)
float格式:
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
S表示浮点数正负
E指数加上127后的值得二进制数据
M底数
运算符:
算术运算符:+ - * / % ++ -- +
赋值运算符:= += -= *= /= %=
关系运算符:== != < > <= >=
逻辑运算符:& | ^ ! && ||
位运算符:<< >> >>> & | ^ ~
三目运算符:() ? : ;
short s = 1; s = s + 1; // error 1是int类型字面常量
short s = 1; s += 1; // ok +=包含了强制类型转换。等价于 s = (short)(s + 1);
比较运算符,逻辑操作符表达式返回ture或则false。
当 & 左操作符和右操作符为逻辑表达式时做的是逻辑运算。当左操作数和右操作数为数值时做的是位运算。
^ 异或.某一个数据被同一个数据异或两次的结果是其本身a ^ b ^ b = a. 交换两个变量的值: a = a ^ b; b = a ^ b; a = a ^ b;
a = a + b; b = a - b; a = a - b;
b = (a + b) - (a = b);
<< 空位补零,被移除的高位丢弃.
>> 高位是0,右移后,高位补0 . 高位是1 ,右移后, 高位补1.
>>> 最高位不论是0还是1,都以0补齐.
键盘数据录入:
a. 导包。格式:import java.util.Scanner;
b. 创建录入对象。格式:Scanner sc = new Scanner(System.in);
c. 通过对象获取数据。格式:int x = sc.nextInt();
流程控制语句:顺序结构
选择结构:
if(关系表达式1) { } // 关系表达式是带有关系运算符和逻辑运算符的boolean表达式
else if(关系表达式2){ }
else if(关系表达式3){ }
else{ }
switch(表达式) // 表达式取值:byte,short,int,char,枚举(JDK5),String(JDK7)
{
case 值1:语句1;break; // 值只能是常量,值1和值2不可相同
case 值2:语句2;break;
default:语句n;break;// default不一定要放在最后
}
循环结构:
for(初始化语句;条件判断语句;控制条件语句) // 条件判断语句是boolean表达式
{ 循环体语句; }
while(条件判断语句) // 条件判断语句是boolean表达式
{ 循环体语句; }
do
{
循环体语句;
}while(条件判断语句); // boolean表达式
跳转控制语句:
break:跳转单层循环:break; // 跳出最近的一个循环。
跳出多层循环:格式:tag: 语句;
break tag; // 跳转到tag语句。
continue:不执行本次循环,执行下一次循环
不执行本次循环,执行想要的循环:格式: tag: 语句;
continue tag; // 从tag语句开始执行循环
return: 在return语句处直接返回函数。
wc:for(int x=0; x<3; x++) // 给循环加一个标签,方便跳转 { nc:for(int y=0; y<4; y++) // { if(y == 2) { break wc; } } }