java基本语法
关键字和保留字:
关键字:对编译器有特殊含义的
保留字:版本尚未使用 以后版本的发展中可能会编程关键字
标识符: 定义 类 方法 变量 对象 的名字
标识符组成: 字母 数字 下划线(_) 美元符号($)
定义标识符不能使用数字开头,不能使用关键字和保留字!
标识符是严格区分大小写的!
标识符命名规则:
驼峰命名法:
对于类名 每个单词的首字母大写 比如:HelloWorld
对于变量名 方法名 对象名 第一个单词的首字母小写 比如:studentAge
注释: //单行注释
/*多行注释
/**文档注释 作用 1.显示信息 2.生成文档说明书(javadoc)
java中的数据类型: 基本数据类型 引用数据类型(抽象数据类型)
基本数据类型: 8种 必须都记住每一种类型的长度
整数型数据:byte(8位) 范围:-128-127
short(短整型 16位)
int(整型 32位)
long(长整型 64位)
浮点型(小数): float(32位): F f来表示
float f=23.4//会报错 要写为 float f=23.4f;
double(64位):D d来表示
小数不声明默认为double
字符型: char(16位)
在java中 中文占16位(占2个字节) 英文占8位(占1个字节)
boolean(一位): true false
在java中 byte short char的类型数据在运算时都会自动转换为int类型
进制: 二进制 十进制 八进制 16进制 60进制
八进制 16进制转换为十进制: 0表示八进制 0x表示16进制
例子:
int d=01010;--> 8^3+8^1=520
int f=0x1010;--> 16^3+16^1=4012
基本数据类型的数据类型的转换:
隐式数据类型的转换 强制类型的转换
小-->大 大-->小
byte a=10; int a=10;
int b=a; byte b=(byte)a;
类型转换可能会出现的问题:
例子:
int a=300;
byte b=(byte)a; --->b=44
原理: int: 32位
300:000000....100101100
byte: 8位
截取后 300变为 00101100 (截取又为高位截断)
第一位 符号位: 0 代表整数 1 负数
例子:
int a=200;
byte b=(byte)a;---->b=-56
原理:int : 00000...11001000
byte: 截取后得到 11001000(这个数是补码)
原码:10111000
截取其实获得的是补码 正数的补码和原码一致 负数的原码=(补码-1) 取反
获得int类型的二进制信息 String s=Integer.toBinaryString(a);
位运算: 按照二进制进行操作
与 &
int a=12; 01100
int b=15; 01111 与 (都是1返回1,其他返回0)
int c=a&b; 01100
结果c=12;
或 |
int a=12; 01100
int b=15; 01111 或 (有一个1返回1,都是0返回0)
int c=a|b; 01111
结果c=15;
按位异或 ^
int a=12; 01100
int b=15; 01111 异或 (相同返回0,不同返回1)
int c=a^b 00011
结果c=3;
按位取反 ~
int a=12; 00000....01100
int b=~a; 11111....10011 取反 这是补码
10000....01101 得到原码
结果b=-13
左移 <<
int a=12; 0000...001100
int m=a<<2;00...00110000 左移就是右边补零
结果m=48
右移 >>
int a=12; 0000...001100
int m=a>>2;000000...0011 右移就是左边补0或1
如果是负数 左移和右移操作的是补码 要先转换为补码
三目运算符:
变量 = 表达式(boolean)?x:y;
表达式返回的值为true时 x赋值给变量 返回的值为false时 y赋值给变量
逻辑运算符:返回值 boolean类型
短路的 不短路的
&& 与 & 与
|| 或 | 或
&&: 表达式a && 表达式b 结果
true true true
false true false
true false false
false false false
||: 表达式a && 表达式b 结果
true true true
false true true
true false true
false false false
! 非
证明|| && 是短路 | &是非短路的代码:
package com.guigu.test; public class Test4 { public static void f1(){ int a=100; int b=200; int c=10; boolean result=(a>90) || (++b>300) || (++c==10); System.out.println(result); System.out.println(a); System.out.println(b); System.out.println(c); } public static void f2(){ int a=100; int b=200; int c=10; boolean result=(a>90) && (++b>300) && (++c==10); System.out.println(result); System.out.println(a); System.out.println(b); System.out.println(c); } public static void f3(){ int a=100; int b=200; int c=10; boolean result=(a>90) & (++b>300) & (++c==10); System.out.println(result); System.out.println(a); System.out.println(b); System.out.println(c); } public static void f4(){ int a=100; int b=200; int c=10; boolean result=(a>90) | (++b>300) | (++c==10); System.out.println(result); System.out.println(a); System.out.println(b); System.out.println(c); } public static void main(String[] args) { f1(); System.out.println("-------------------------"); f2(); System.out.println("-------------------------"); f3(); System.out.println("-------------------------"); f4(); } }
输出结果为:
true
100
200
10
-------------------------
false
100
201
10
-------------------------
false
100
201
11
-------------------------
true
100
201
11
结论:&&当前面有一个为false时后面的就不执行了直接输出false ||当前面有一个为true时后面的就不执行了直接输出true
& 和 | 是全部都会执行一次的
流程控制:
顺序执行: 代码 从上到下执行
分支: if if..else if...else if..else switch()
循环:for while do...while()
分支: if(表达式 或者boolean变量){}
if(){}else
if(){}else if(){}
swich(值的类型):
参数可以传入 byte short int char jdk1.7 之后可以判断string
switch(a){
case 'A':
System.out.println();//这里是判断成功后要执行的东西
break;//一定要跳出不然会一直执行下去
case 'B':
System.out.println();
break;
.......//各种case
default://其他的意思
System.out.println(result);
break;
}
循环 迭代 遍历(是一个意思) :
for(表达式1;表达式2;表达式3){
循环体语句
}
执行过程:
开始先执行表达式1,但是他只执行一次,
然后执行表达式2返回一个boolean类型的值,
如果表达式2为真则执行循环体语句,
然后执行表达式3,
后面再重复表达式2的操作,
如果表达式2为假那么退出循环。
while(表达式或者boolean变量){
循环体
}
控制循环的执行:
break; //跳出当前的循环体
continue;//结束本次循环 执行下一次循环
return; // 代表的是方法的结束
题目:打印一个9*9乘法表
public class Test5 { public static void main(String[] args) { for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ System.out.print(j+"*"+i+"="+j*i); if(i*j>=10){ System.out.print(" "); }else{ System.out.print(" "); } } System.out.println(); } }