跟日记本一起学JAVA!相信你可以的,加油~
本课闯关内容:1.照猫画虎(0/6)
2.熟悉基础知识(0/6????)
数据的自动类型提升:
1.两个变量之间相互赋值。自动类型提升规则如下:
(1)byte -> short ->int ->long -> float -> double
小数据类型的变量 可以直接赋值为大数据类型的变量,就自动提升为大数据类型:
(2)char - >int ->long ->float->double
解析:下面的
byte s =23;
int C = s;
s的类型是byte,把s赋给int的C
解析:下面的
char cs ='A';
int is = cs;
cs的类型是char,把cs赋给int的is
2.强制类型转换:
(1).大数据类型的变量赋值给小数据类型,需要用到强制类型转换
强制类型转换问语法:
目标类型+空格+ 变量名 = (目标类型) 源数据类型的变量名;
例如: double d = 12.5;
int i = (int)d;
System.out.println(i);
注意!!!这里由小数换为整数,不会四舍五入,而是直接显示的是12!!!!好啦这就是之后要讲的“后果”了。
(2)强制转换的结果:
1.整数类型的变量中的数据合理,数据强转结果完整
例如: int i = 15;
byte b = (byte) i ; // 结果打印 15
2.整数类型的变量中的数据不合理,数据强转结果截断
例如: int i = 257;
byte b = (byte)i; // 结果 1
3.小数据类型变量强制转换为整数类型:直接截断,取整数部分
例如: double d = 12.9;
int i = (int)d ; // 结果 12
注意: boolean 类型的变量不能参与 数据类型的提升。
解析:下面的
double d = 23.7;//源类型
int x = (int)d;//目标类型:int ->强制类型转换
System.out.println(x);//显示的是23
小数据类型变量强制转换为整数类型:直接截断,取整数部分
解析:下面的
int b2 = 35;//4B
byte y = (byte)b2;//1B
System.out.println(y);
整数类型的变量中的数据合理,数据强转结果完整
代码:
package demo;
public class Test4{
public static void main(String[]args){
int a = 2;
int b = a;
System.out.println(a);
System.out.println(b);
byte s =23;//存储1B
int C = s;//存储4B,自动类型提升,4B>1B,小类型放到大类型
System.out.println(C);
char cs ='A';//65
int is = cs;
System.out.println(cs);
System.out.println(is);
double d = 23.7;//源类型
int x = (int)d;//目标类型:int ->强制类型转换
System.out.println(x);//显示的是23
int b2 = 35;//4B
byte y = (byte)b2;//1B
System.out.println(y);
}
}
这一块主要是表达式的运算规则
表达式的概念:由变量、运算符、字面值等组成一个式子,通常会有一个结果产生。
两变量参与运算,表达式的结果类型规则如下:
1.如果参与运算的变量有一个为double类型 ,结果就是double类型;
2.如果参与运算的变量没有double 类型,有一个为 float 类型 ,结果类型为 float;
3.如果参与运算的变量没有 double/float,有一个 为 long类型,结果类型为 long
4.其余的情况全都是 int 类型的结果。
例如: byte b = 1;
byte b2 = b + 1; // 编译报错,违反了两个变量参与运算的提升规则,结果应为 int 类型
这里b2之前的byte,应该改成int,因为没有特殊的类型,所以就按int类型。
解析:下面的
int a = 3;
int b = 5;
System.out.println(a+b);
int r = a+b;
System.out.println(r);
全都是 int 类型的结果,也为int类型。
解析:下面的
double d = 12.6;
int x =2;
double d2=x+d;
System.out.println(d2);
如果参与运算的变量有一个为double类型 ,结果就是double类型;
解析:下面的
byte bs1 = 1;
byte bs2 = 2;
int bs3 = bs1+bs2;//注意:不能存储在byte中
System.out.println(bs3);
因为没有特殊的类型,所以就按int类型。
代码:
package demo;
public class Test5{
public static void main(String[]args){
int a = 3;
int b = 5;
System.out.println(a+b);
int r = a+b;
System.out.println(r);
double d = 12.6;
int x =2;
double d2=x+d;
System.out.println(d2);
byte bs1 = 1;
byte bs2 = 2;
int bs3 = bs1+bs2;//注意:不能存储在byte中
System.out.println(bs3);
}
}
1.算数运算符: +(加) -(减) *(乘) / (除) %(取模、取余数)注意: 如果 +两端有一个 数类型为 String(字符串类型),则代表字符串的拼接或是连接。
2.赋值运算符 : = += *= -= /= %=
注意 :+= 等综合运算符没有自动类型提升。
练习:
① byte b = 1;
b = b+1; //编译不通过,结果类型应为 int 类型
② byte b = 1;
b += 1; //编译通过,结果为 2
从左往右计算!
解析:
int a = 5;
int b = 2;
System.out.println(a+b);//7
System.out.println(a-b);//3
System.out.println(a*b);//10
System.out.println(a%b);//1
System.out.println(a/b);//2(5除2为2.5,因为都是整型,直接截断结果为2)
System.out.println(a/b*1.0);//2.0(从左往右计算,5除2为2.5,因为都是整型,直接截断结果为2,后面又乘1.0,有小数点了,是double类型,(如果参与运算的变量有一个为double类型 ,结果就是double类型;)结果为2.0,知识串起来了~~~~~~啊啊啊啊啊!)
System.out.println(1.0*a/b);//2.5(从左往右计算,a变成double类型为5.0,再除b,结果为2.5)
System.out.println((double)a/b);//2.5(把a转换成double类型(小类型直接转换大类型),再去除)
!!!注意: 如果 +两端有一个 数类型为 String(字符串类型),则代表字符串的拼接或是连接。
!!!java中的+两种用法:
1.加法运算: +两端都为 数据类型
2.字符串的拼接, +两端只要有一段为字符串,+为字符串的拼接
只要“+”两端有一 个数类型为 String(字符串类型),碰上它的都会变成字符串(很强大啊!) 解析:
int a = 5;
int b = 2;
String s1 = "hello";
String s2 = "world";
System.out.println(s1+s2);
System.out.println(s2+a);//world5
System.out.println(s2+true);//worldtrue
//System.out.println(a+true);//编译报错
//System.out.println(a+true);
System.out.println("hello"+3+5);
System.out.println(3+5+"hello");
System.out.println("hello"+(3+5));
System.out.println("hello"+true+3+5);
//System.out.println(true+3+5+"hello");//编译报错
//思考a+b=7
System.out.println("a+b="=(a+b));
int x = 3;
int y = 5;
System.out.println("x+y="=(x+y));//x+y=8
System.out.println(x+"+"+y+"="+(x+y));//3+5=8,但是结果需要随着x,y中的数据发生改变,如果x=5,x=9 ->5+9=14, 错误的写法:“3+5=”+8
}
}
从左往右计算,数据类型会由前面的数据类型决定,当然如果你想不由前面决定,可以加括号。
就像 System.out.println("hello"+(3+5));
结果:hello8
运行结果:
helloworld
world5
worldtrue
hello35
8hello
hello8
hellotrue35
a+b7
x+y8
8xy
编译报错的原因:一个int类型,一个布尔类型,这个加号是加法,不是拼接
重点:(布尔类型不参与加法运算,可以参与字符串的拼接)
System.out.println(a+true);//编译报错
编译报错的原因:一样,从左往右看,布尔类型不参与加法运算
System.out.println(true+3+5+"hello");//编译报错
代码:
package demo;
public class Test6{
public static void main(String[]args){
int a = 5;
int b = 2;
System.out.println(a+b);//7
System.out.println(a-b);//3
System.out.println(a*b);//10
System.out.println(a%b);//1
System.out.println(a/b);//2,因为都是整型
System.out.println(a/b*1.0);//2.0
System.out.println(1.0*a/b);//2.5
System.out.println((double)a/b);//2.5
/*java中的+两种用法:
1.加法运算: +两端都为 数据类型
2.字符串的拼接, +两端只要有一段为字符串,+为字符串的拼接
*/
String s1 = "hello";
String s2 = "world";
System.out.println(s1+s2);
System.out.println(s2+a);//world5
System.out.println(s2+true);//worldtrue
//System.out.println(a+true);//编译报错
//System.out.println(a+true);
System.out.println("hello"+3+5);
System.out.println(3+5+"hello");
System.out.println("hello"+(3+5));
System.out.println("hello"+true+3+5);
//System.out.println(true+3+5+"hello");//编译报错
//思考a+b=7
System.out.println("a+b="=(a+b));
int x = 3;
int y = 5;
System.out.println("x+y="=(x+y));//x+y=8
System.out.println(x+"+"+y+"="+(x+y));//3+5=8,但是结果需要随着x,y中的数据发生改变,如果x=5,x=9 ->5+9=14, 错误的写法:“3+5=”+8
}
}
关系运算符大于: >
大于等于 :>=
小于: <
小于等于:<= 不等于: !=
如果 用关系运算符连接两个变量,用于判断关系是否成立,关系成立-true,关系不成立-flase, 结果类型为boolean类型的表达式称为布尔表达式。
逻辑运算符
1.&& :逻辑与,只有当两边都为true的情况下,结果才为true。有一个为false,结果就是false; (短路)
2.||:逻辑或,只有两端有一个为true,结果就是为true,同时为false,结果才为false.(短路)
3.! : 逻辑非,对结果取反。
4.& :与,只有当两边都为true的情况下,结果才为true。(非短路)
5.| :或,只有两端有一个为true,结果就是为true,同时为false,结果才为false.(非短路)
&& 和 & 的区别
相同点:与的关系,两边布尔表达式同时 为 true,结果才为 true.
不同点: && :短路运算符,一旦第一个布尔表达式的结果为 false,后面的布尔表达式不在运算
& :非短路运算符,不管前面的布尔表达式是否为 false,后面的布尔表达式必须执行。
条件运算符(三元运算符、三目运算符)
运行结果:
false
true
false
true
false
false
true
true
false
true
及格
25
不是c语言的1和0
代码:
package demo;
public class Test7{
public static void main(String[]args){
int a = 3;
int b = 5;
System.out.println(a>b);//3>5,关系不成立,结果是false
System.out.println(b<8);//关系成立,结果是true
System.out.println(a>3);//false
System.out.println(a>=3);//true,60临界值
System.out.println(a!=3);//false
//&&:逻辑与,两端都为布尔类型或布尔类型的字面值,只有当两端都为true,结果才为true
System.out.println(a>b&&b<8);//f
System.out.println(a>1&&b<8);//t
//||:逻辑或:两端都为布尔类型或布尔类型的字面值,只有一端为true,结果就为true
System.out.println(a>b||b<8);//3>5||5<8
System.out.println(a>b||b<3);//3>5||5<3
// !:逻辑非:在结果上取反
System.out.println(!(a>b||b<3));
double score = 78.5;
String r= score>=60 ? "及格":"不及格";
System.out.println(r);
int x = 35;
System.out.println(x>50?x+10:x-10);//25
}
}
一元运算符:
++(自增) --(自减)
(1)a++ : 先 使用 a 原始数据作为表达式的结果,再 将 a 自身加 1;
先使用,再加
int a = 1;
int c = a++ ;
(便于理解)也可以写成:
int c = a ;
a = a+1;
结果都为: c = 1; a = 2;
(2)++a:先将 a 的数据加1运算,再使用 a 中的数据作为表达式的结果。
先加,再使用
运行结果:
a=5
b=2
c=2
假如改变代码变为:
int b = 1;
int c=b++;//先使用,再加1,int c =1; b=b+1;
//int c =++b;//先加1,在使用:b=b+1=2,int c =b=2
System.out.println("b="+b);
System.out.println("c="+c);
结果为:
b=2
c=1
这就是因为先把b=1给c,c=1
然后再把b自加1,b变为2
代码:
package demo;
public class Test{
public static void main(String[]args){
int a = 3;
//++:自身加1 --:自身减1
//a++/++a a--/--a
a++;//等价于a=a+1
a++;
++a;
++a;
a--;
--a;
System.out.println("a="+a);
int b = 1;
//int c=b++;//先使用,再加1,int c =1; b=b+1;
int c =++b;//先加1,在使用:b=b+1=2,int c =b=2
System.out.println("b="+b);
System.out.println("c="+c);
}
}
Scanner(扫描仪)
使用的步骤:创建扫描仪
创建就写入这个代码:java.util.Scanner sc = new java.util.Scanner(System.in);
使用:
输入一个整数: int a = sc.nextInt();
输入一个小数: double s = sc.nextDouble();
输入一个字符串:String s = sc.next(); // String s = sc.nextLine();
输入一个字符:char c = sc.next().charAt(0);
在输入前你需要给输入者一个提示:
System.out.println("请输入一个XX");
练习:
定义两个int类型的变量x,y,利用Scanner输入数据,计算x+y的结果,并格式化打印
代码:
System.out.println("请输入两个整数");
int x = sc.nextInt();
int y = sc.nextInt();
System.out.println(x+"+"+y+"="+(x+y));
代码:
package demo;
import java.util.Scanner;//1.导入包
public class Test9{
public static void main(String[]args){
int a = 7;
System.out.println("a="+a);
//2.创建Scanner对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数");
int n = sc.nextInt();
System.out.println("n="+n);
System.out.println("输入一个小数:");
double d = sc.nextDouble();
System.out.println("d="+d);
System.out.println("输入一个字符串:");
String str= sc.next();
System.out.println("str="+str);
System.out.println("输入一个字符:");
char cs = sc.next().charAt(0);
System.out.println("cs="+cs);
/*定义两个int类型的变量x,y,利用Scanner输入数据,计算x+y的结果,并格式化打印
例如: x=5 y=9,输出 5+9=14
x=2 y=7,输出 2+7=9
*/
System.out.println("请输入两个整数");
int x = sc.nextInt();
int y = sc.nextInt();
System.out.println(x+"+"+y+"="+(x+y));
}
}
跟我一步步学,慢慢走,踏实学。
未完待续。。。