------- android培训、java培训、期待与您交流! ----------
Java语法一
Java语句都是以”;”结尾的,语句都写在{}里面
进制转换
1. 什么是进制
进制就是进位制, 是人为规定的一种进位形式, x进制就是逢x进一
2. Java语言中整型的进制表现形式
常用的几种进制
二进制最大的是1, 逢二进一表示2就是10,在语法上前面加0b(jdk1.7新增)
十进制最大的是9, 逢十进一就是表示10就是10,语法上表示整型就是十进制
八进制最大的是7, 逢八进一表示8就是10,语法上前面加0
十六进制最大的是15, 0~9的表现形式是0~9, 10~15用A~F表示,逢十六进一表示十六就是10, 语法上前面加0x
进制越大表现形式越短
3. 其他到十进制的转换
其他进制包含二进制,八进制,十六进制
转换规则
先把数据的每一位上的系数乘以对应基数的次幂(低位从从零开始),然后相加即可
例如二进制数1010转换为十进制就是 0*2^0 + 1*2^1+0*2^2+1*2^3, 2^x表示2的x次方
4. 十进制到其他进制的转换
规则:除基取余,直到商为0,最后将余数反转
1) 十进制到二进制
除2取余,直到商为0,最后将余数反转
十进制13对应的二进制数据是1101
二进制到十进制的技巧(8421码)
2) 十进制到八进制
a) 除8取余,直到商为0,最后将余数反转
十进制13对应的把进制数据是15
b) 十进制--二进制--八进制
首先把十进制转成二进制
其次把二进制数据每三位组合。左边不够三位用0补位
然后把每个组合计算成对应的十进制数据
最后从左到右把数据相连接即可得到八进制
3) 十进制到十六进制
a) 除16取余,直到商为0,最后将余数反转
十进制13对应的把进制数据是D
b) 十进制--二进制--十六进制
首先把十进制转成二进制
其次把二进制数据每四位组合。左边不够四位用0补位
然后把每个组合计算成对应的十进制数据
最后从左到右把数据相连接即可得到十六进制
变量
1. 变量就是在指定返回变化的值, 是内存中的一个区域,用于存储数据
2. 定义变量, 给变量赋值
数据类型变量名 = 值;
byte b = 1; //声明变量b并将初始值1赋给了b
byte b; //声明变量b
b = 1; //将1赋给b
变量需要在使用前初始化
数据类型
1. Java中数据类型分为基本数据类型和引用数据类型(类,接口, 数组)
2. 基本数据类型(计算机最小的存储单位是字节(bit), 1kb = 1024 * 1bit, 1m = 1024 * 1kb)
a) 整型(存储整数)
byte 1个字节
short 2个字节
int 4个字节
long 8个字节,末尾用l或者L标识
b) 浮点型(存小数)
float 4个字节,末尾用f或F标识
double 8个字节
c) 字符型(存单个字符)
char 2个字节
d) 布尔型(存true或false)
boolean 理论上是占1bit,但是Java中没有明确规定
区别: 在内存中分配的空间大小不同,从而导致它表示的数据范围不同
默认情况下, 整数是int型,小数是double型
3. 数据参与运算
范围小的类型跟范围大的类型运算会自动将范围小的类型转为大的类型然后计算
char字符参与运算是找到ASCII码表里相应的数字然后计算
byte, short, char之间不会相互转换,它们都是先转换为int再进行计算
数据范围排序
byte,short,char->int->long->float->double
4. 强制转换
格式:(数据类型)(要被转换的数据) byte b = (byte)(130);
可以将范围大的类型转为范围小的类型,但是这样有可能会损失精度, 导致得到了不期望的数据
5. boolean类型不能参与运算, 字符串参与运算是将字符串和要计算的数据拼接成一个新的字符串
6. 思考:
byte b1=3,b2=4,b;
b = b1 + b2;
b = 3 + 4;
哪句是编译失败的, 为什么
b = b1 + b2; 是失败的,因为b1和b2是byte类型变量,计算时都会先提升到int类型再进行计算,将int类型直接赋值给byte变量编译时会出错
b = 3 + 4; 是正确的,因为3和4是常量,相加结果在byte范围内,所以jvm默认为byte
运算符
1. 算数运算符
+, -, *, /, %, ++, --
a) 前面4个是普通的四则运算符, +还用来做连接符
b) % 取模运算符
左边除以右边的余数, 正负取决于左边的符号
c) ++, --
自加,自减运算符
++变量,先将变量自加1再进行其他运算
变量++, 先运算再进行自加1
--跟++原理相同
2. 赋值运算符
= 在Java中是赋值运算符,将右边的值赋给左边, 两边为引用时,时间右边的对象地址指向左边
提示: short s = 1
s += 1 相当于 s = (short)(s + 1);
s = s + 1; 这个会报错, s + 1是提升为了int型,不能将int型的数据赋给byte的变量
3. 比较运算符
==, !=, >, <, >=, <=
a) == 是比较两边的值是否相等,!=是比较两边是否不相等,当两边是引用类型时, 表示比较两边的地址
b) >, <, >=, <= 分别表示大于, 小于,大于等于, 小于等于
c) ! 表示非, 前面加上!表示与原来相反的结果
4. 逻辑运算符
&, |, &&, ||, ^, !
a) 逻辑与运算符 &
第一个条件 第二个条件 结果
true true true
false true false
true false false
false false false
简单记:同时为true,结果为true。
b) 逻辑或运算符 |
第一个条件 第二个条件 结果
true true true
false true true
true false true
false false false
简单记:同时为false,结果为false。
c) 逻辑异或运算符 ^
第一个条件 第二个条件 结果
true true false
false true true
true false true
false false false
简单记:同时为同一种情况,结果为false。
d) 逻辑非运算符 !
表达式 结果
!true false
!false true
!!true true
e) &&, ||
&&短路与,第一个条件为false时,第二个条件不会判断, 直接返回false,单个&第一个条件为false时还会继续判断第二个,返回false
||短路或,与短路与原理相同
例如
int i = 0; int j = 1;
i++ > j && j++ > 0 //返回false
i先跟j比较大小返回false, i的值自增1变成了1,由于是短路&&, 右边的不会进行运算, j的值还是1
提示: &,|,^可以进行运算,比如6&3=2, 结果是由两个数的二进制比较而来的,任何数&15得到的都是这个数的十六进制数,一个数异或相同的数两次等于它自己
例如: 不适用第三个变量将两个变量的值互换
inta = 10, int b =10; a = a ^ b; b = a ^ b; a = a ^ b;这样就将两个变量的值互换了
位运算符
<<一个数向左移动几位就乘以2的几次幂
>>一个数向右移动几位就除以2的几次幂
>>>无符号右移无论最高位的符号位是0还是1,用无符号右移后高位符号位都是补0
思考: 最快的方法得出2和8的乘积
2 << 3, 向左位移3为就是2乘以2的3次幂,相当于2*8
三元运算符
变量 = 表达式 ?值 : 另一个值;
例如 int a = 10, b = 2, c
c = a < b ? a : b; //判断a是否小于b如果小于就把a的值赋给c,否则把b的值赋给c
三元运算符必须有一个返回值.
条件判断语句
1. if(){}
判断括号里的语句, 如果是true, 执行块里的语句,执行完成后继续执行外面的语句, 否则直接执行下面的语句
2. if(){} else{}
判断括号里的语句, 如果是true, 执行块里的语句,执行完成后继续下面的语句, 否则执行else块里的语句,然后再执行下面的语句
3. if(){} else if(){}
判断括号里的语句, 如果是true, 执行块里的语句,停止判断, 继续执行else if判断条件外面的语句,否则判断else if() 括号里的条件,如果到最后一个else if语句都不满足,执行else里的语句或者执行下面的语句
提示: if语句可以胡须昂嵌套,如果判断语句块内只执行一条语句, 可以不用{}
If条件语句代码示例:
class SwitchDemo {
public static void main(String[] args) {
int x = 7;
switch (x) {
default:
System.out.println("d");
case 4:
System.out.println("a");
// break;
case 3:
System.out.println("b");
// break;
case 5:
System.out.println("c");
// break;
// 终止switch语句有两个条件
// 1,如果遇到break;程序就会跳出
// 2,当程序执行到了末尾程序终止
}
}
}
循环语句
1. while循环
语法
while(条件表达式){
执行语句;
控制循环次数;
}
代码示例:
class WhileDemo {
public static void main(String[] args) {
int x = 5; // 定义一个int型变量
while (x < 8) { // 循环条件是x小于8
System.out.println(x);
x++; // x自增1
}
}
}
2. do while();
语法
do{
循环体;
控制循环次数
}
while (条件表达式);
注意: while和do while的区别:
do while语句会先执行循环体,再去判断条件,也就是说无论条件是否满足他都至少要执行一次循环体,先执行
再判断
while 先判断条件,只要条件不满足就不在执行循环体了,先判断,再执行.
代码示例
class DoWhileDemo {
public static void main(String[] args) {
int x = 5;
do {
System.out.println(x); // 打印结果: 5
x++;
} while (x < 5);
/*
* while (x < 5){ //条件不满足, 不循环 System.out.println(x); x++; }
*/
// do while 无论条件是否满足都执行循环体
// while 先进行判断如果条件不满足不执行循环体
// 如果条件都满足结果是一样的
}
}
3. for循环
语法
for(初始化表达式;循环条件表达式;循环后的操作表达式){
执行语句;(循环体)
}
注意: 初始化表达式只在循环内部有效,一旦循环结束, 这个表达式就没有意义了
代码示例
class ForDemo {
public static void main(String[] args) {
// 每次循环x的值会加2, 得到小于10的奇数
for (int x = 1; x <= 10; x += 2) {
// 1-10的奇数
System.out.println(x);
}
}
}