目标
1、基本数据类型(四类八种)
2、掌握数值型(byte short int long)数值范围
3、变量如何定义
4、运算符使用
快捷键:
ctrl+shift+o 可以用来引包也可以用来去除无用的包
ctrl+c copy
ctrl+v paste
ctrl+z 撤销
ctrl+x 剪切
ctrl+a 全选
ctrl+s 保存
alt+/ 帮助
ctrl+/ 注释一行
ctrl+shift+/ 注释多行
ctrl+shift+f 格式化代码段
关键字(了解)
public static private class void
跟数据类型相关的
class void interface
byte short int long (整数)
float double (小数)
char(单个字)
boolean(布尔型 只有true/false两个值)
用于给变量赋值的。
true false null
用于定义流程的
if else for while case switch do break continue default return (跟第3章流程控制相关的)
保留字(了解)
goto备用
标识符
Java中的包、类、方法、参数和变量的名称总称为标识符
**标识符的命名规则
必须以字母、下划线(_)或美元符号($)开头;
余下的字符可以是下划线、美元符号或任何的字母或数字,长度不限;
标识符中不能有空格;
不能使用Java中的关键字或者保留字做为标识符;
总结一下:(a-zA-Z_$)(a-zA-Z_$0-9)
0WER
#AAA
W2ER
$2ER
_2ER
大驼峰(所有单词首字母全大写)
小驼峰(首个单词首字母小写,以后每个)
一般命名规则:
工程(建议):全小写
包(package):全小写
类(class):大驼峰
方法名:小驼峰‘
常量名:全大写(暂时了解)
常量指程序里持续不变的值,在整个程序运行过程中它是不可改变的
练习下面哪些是合法的标识符:
identifier 、userName 、class(关键字) 、98.3(数字开头) 、Data#(#号)
user_name 、_sys_var1 、$change 、blue bird(空格)
常量变量和数据类型
常量指程序里持续不变的值,在整个程序运行过程中它是不可改变的
pi=3.14
常量:
整型
浮点型(有小数的)
布尔型(true/false 开关和标识)
字符型:一个字符 用单引号括起来
字符串:超过一个字符的,叫字符串 用双引号
特殊的引用型常量:null
变量
是会变量的量。
变量的声明:
定义时不赋值:变量类型 变量名;
int i;
i=0;
定义时赋初值:变量类型 变量名=变量值;
int i=0;
练习:
int x = 3 ;
double b = 0.123;
char ch;
ch = ‘a’;
数据类型
基本数据类型
数值型 (整数:byte short int long 浮点数:float double)
字符型(char)
布尔型(boolean)
引用类型(类 接口 数组)
拓展:
堆栈(sgt)(了解)
基本数据类型(简单类型):都存在栈内存里
引用类型(把地址存在栈里,把实际值存在堆里)
范围
byte(8) short(16) int(32) long(64)
无符号的情况下:
byte 最大值: 2的8次方
short最大值: 2的16次方
int 最大值: 2的32次方
long最大值: 2的64次方
有符号:
8,16,32,64是按二进制位数 (01)
有符号的情况 8位二进制 11111111 ---左边第一位表示正负 0 表示正数 1-表示负数
https://blog.csdn.net/u013140345/article/details/79748888
0111 1111 +127
1111 1111 -127
1000 0000 -128
如果是无符号数:
byte --0~255
short 0-65535
如果是有符号:
byte 1字节 -128-127
short 2字节 -215~215-1
int 4字节 -231~231-1
long 8字节 -263~263-1
数字的进制
二进制 0B 0b开头
十进制123
八进制 0开头 0123
十六进制 0x开头
Java中不同进制整型的表示形式
十进制整数:0~ 9
–注:第一位不能是0
十六进制数:0~ 9 A ~ F
–注:必须以0x或0X开头
–例如: 0X8A 0x12
八进制整数:0
~ 7
–注:必须以0开头
–例如: 0123 012
二进制整数:0
1
–JDK7以前版本,没有二进制的整型常量写法,一般用十六进制代替
–注:JDK7以后版本,必须以0b或0B开头
–例如:
»0b01010000101 0B01010000101
»由于JDK7以后版本数值常量增加对下划线支持,也可以写成:0B0101_0000_1010_0010_1101_0000_1010_0010;
进制转换
其他进制转十进制
0X00 6 1 转换方式 从低位开始算也就是从右往左算
0-9 10-15用abcdef
1---1*16的0次方---1
6----6*16的1次方-----96
两者相加1+96=97
0141--八进制 1*1+4*8+1*64=1+32+64=33+64=97
十进制转其他进制
十进制转16进制
257 /16=16...1 最低位为1
16/16=1...0 倒数第二位为0
1/16=0....1
十进制257转16进制101
十进制转8进制
257/8=32......1 最低位为1
32/8=4......0 倒数第二位为0
4/4=0......4
取各个位数上的余数
十进制257=8进制401
浮点数float和double
类型 比特数 有效数字 数值范围
float 32 6-7 -3.4*10(-38)~3.4*10(38)
double 64 15-16 -1.7*10(-308)~1.7*10(308)
注意:给float类型变量赋值时,值后面加f或F
char 字符型:单字符,用单引号括起来。
‘a’ ‘中’
‘\u03A6’ 代表一个字符
练习:哪些是合法的字符常量?
A.‘AB’ 两个
B.‘b’
C.“123” 字符串
D.‘\u123f’
转译字符
\后的字符原样输出
特殊的转译字符
\r 回车
\n 换行
\t tab
\b back space
\' \" \\(目录)
boolean 布尔类型(true/false 用于做判断 或开关)
练习:打印出带引号的信息如输出:你好”中国”
拓展:
运算时
byte short char之间运算时转成int
错误写法:
byte b1=125;
byte b2=b1-1;
正确写法:
byte b1=125;
int b2=b1-1;
运算符
算术运算符:
+、﹣、*、/、%(取余)、++ (+1)、 -- (-1)
++i和i++
练习1:
public class Demo {
public static void main(String[]args) {
int i=0;
int a = i++;
System.out.println(a + ", " + i); //a=0,i=1
a = ++i;
System.out.println(a + ", " + i); //a=2,i=2
i=i++;
System.out.println(i); //i=2
}
}
练习2:
class Hello{
public static void main( Stringargs[ ]) {
//将常量1和2相加,将结果3赋值给变量a
int a = 1+2;
int b = a*4;
System.out.println(b/2); //6
System.out.println(a%2); //1
}
}
练习3:
5%3 2
-5%3 -2
-5%-3 -2
5%-3 2
5/2 2
-5/2 -2
赋值运算符:
=、
+=、 i+=2 等价于i=i+2
﹣=、 i-=2 i=i-2;
*=、 i*=2 i=i*2;
/=、 i/=2 i=i/2
%= i%=2 i=i%2
比较运算符:
>、<、>=、 <=、!=、instanceof、= =、
逻辑运算符
!(取反)、
&&(与 and 两个同时满足才返回真)、
|| (或 or 满足其中之一)
按位运算符
& 按位与(二进制运算)
两个数位,指定位数都为1,返回结果为1
| 按拉或 只要一位为1,就为1
^ 异或 相同位置的数相同就为0,不同就为1
~ 取反 1-0 0-1
<< 左移n位 实际结果=原值*2的n次方
>> 右移n位 实际结果=原值/2的n次方
示例: 算2的4次方最快的方式是将2左移3位
练习4
@Test
public void test08() {
int a = 2;
int b = 2 << 3;
System.out.println(b);//16
}
y=++i y=i+1 (这个数先加后运算 ) i=i+1
y= i++ y=i (先运算后加 ) i=i+1
逻辑与或与按位与或区别
与--》and 逻辑与&&(shift+7两次) 按位与&(shift+7一次)
逻辑与用的多,用来判断2-n个条件同否同时满足
a&&b&&c.... true/false
a&b 用来做位操作,也可以用来做逻辑判断
where a>b and b>c
示例:练习5
@Test
public void testAnd() {
int i = 2;
// 逻辑与第一个条件为true,第二个会被执行
// boolean flag = ((i == 2) && ((i++) == 3));// i=3
// 逻辑与第一个条件为false,第二个不会被执行
// boolean flag=((i!=2)&&((i++)==3));//i=2
// 按位与 第一个条件为true,第二个会被执行
// boolean flag=((i==2)&((i++)==3)); //i=3
// 按位与第一个条件为false,第二个条件也会被执行
boolean flag = ((i != 2) & ((i++) == 3)); // i=3
System.out.println("flag--->" + flag);
System.out.println("i--->" + i);
}
结论:
逻辑与或同按位与或是有一定区别的:
相同点是:都能参与逻辑运算,按位与或完全可以代替逻辑与或;
区别是:按位与或可以参与位运算,逻辑与或只能参与逻辑运算,逻辑与或可以“短路”,按位与或不能“短路”。
a&&b(有短路操作)
a=true b需要判断是true/false 然后才能返回
a=false b不用判断 肯定返回false
a&b
a=true b需要判断是true/false 然后才能返回
a=false b还会被执行
三元运算符/条件运算符
if(expr1,expr2,expr3) mysql里,如果expr1成立,返回值为expr2,如果不成立就返回expr3
java 里用三元运算符 ? :
表达式1?表达式2:表达式3;
表示式1成立吗?成立返回表示式2:不成立返回表达式3
boolean b=(1>2)?true:false; b=false
int i=(2>3)?1:0; i=0;
练习6
int x = 1;
int y = 2;
int z;
z = x > y ? x : y;
System.out.println(z); //2
练习7
int x=5;
System.out.println((x%2==0?"偶数":"奇数")); //奇数
Junit
引jar 包 右键工程-build path-config build path-libraires-add library-junit-junit4-finish
课堂练习引入junit4的包
类型转换
自动类型转换:
有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后进行计算
1)boolean类型不可以转换为其他的数据类型
2)整型、字符型、浮点型的数据在混合运算中相互转换,转换时遵守以下原则
3)其中的byte、short、char之间不会相互转换,他们三者在计算时首先会转换为int类型
@Test
public void conver02(){
int a=1003043;
long b=29999999999l;
//int c=a+b;//编译不错
long c=a+b;//正确
}
@Test
public void convert(){
byte b1=1,b2=2,b3;
//b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,
//b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。
b3=(b1+b2);
System.out.println(b3);
}
//int转换成long,如果不超过int最大值,转换正确,超过时转换结果错误。
@Test
public void conver03(){
System.out.println(Integer.MAX_VALUE);
long i=(long)(2147483641+1); //转换正确,没有超过int最大值
System.out.println(i);
}
@Test
public void conver03(){
System.out.println(Integer.MAX_VALUE);
long i=(long)(2147483647+100); //结果错误 相加的结果超过了最大值
System.out.println(i);
}
以后会学正确的,用包装类来转换
@Test
public void conver03(){
Integer a=Integer.MAX_VALUE;
Long i=a.longValue()+1;
System.out.println(i);
}
作业:
课后练习答案:
@Test
public void test1(){
int i=2;
int j=3;
System.out.println("i="+i+"j="+j);
int temp;
temp=i;
i=j;
j=temp;
System.out.println("i="+i+"j="+j);
}
@Test
public void test2(){
System.out.println("请输入一个整数:");
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();
System.out.println("您输入的是:"+i);
//System.out.println(i/100);
System.out.println(i/100%10);
//345/10=34 34%10=4
//System.out.println(i/10);
System.out.println(i/10%10);
//345%10=5
System.out.println(i%10);
}
@Test
public void test3(){
float c = 45.0f;
float f = 113.0f;
float cTof = (f-32) * 5/9;
float fToc = c*9/5+32;
System.out.println("摄氏转华氏= "+cTof );
System.out.println("华氏转摄氏 = "+fToc );
}
@Test
public void test4(){
char c = 'A';
//加32即小写对应字母
System.out.println((char) (c + 32) );
}
## 判断一个数是几位数 ##
@Test
public void test03(){
System.out.println("请输入一个整数");
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();
int count=0;
while(i!=0){
count++;
i=i/10;
}
System.out.println(count);
}