JAVA第三课

跟日记本一起学JAVA!相信你可以的,加油~

本课闯关内容:1.照猫画虎(0/6)

                         2.熟悉基础知识(0/6????)

                                                                                                                                                         

基础知识1:

数据的自动类型提升:

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);

整数类型的变量中的数据合理,数据强转结果完整

照猫画虎1:

代码:

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);
		
	}
}

                                                                                                                                                        

基础知识2:

这一块主要是表达式的运算规则

表达式的概念:由变量、运算符、字面值等组成一个式子,通常会有一个结果产生。

两变量参与运算,表达式的结果类型规则如下:

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类型。

照猫画虎2:

代码:

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);
	}
}

                                                                                                                                                           

基础知识3:

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");//编译报错

照猫画虎3:

代码:

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
	}
	
}

                                                                                                                                                           

基础知识4:

关系运算符大于: >

大于等于 >=

小于: <

小于等于:<= 不等于: !=

如果 用关系运算符连接两个变量,用于判断关系是否成立,关系成立-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,后面的布尔表达式必须执行。

条件运算符(三元运算符、三目运算符)

  1. 布尔表达式 ? 表达式1:表达式 2
  2. 执行的原理:如果布尔表达式结果为 true,执行 表达式1,如果为false,执行表达式2

运行结果:

false
true
false
true
false
false
true
true
false
true
及格
25

不是c语言的1和0

照猫画虎4:

代码:

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
	}
}

                                                                                                                                                          

基础知识5:

一元运算符:

++(自增) --(自减)

(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

照猫画虎5:

代码:

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);
	}
}

                                                                                                                                                           

基础知识6:

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));

照猫画虎6:

代码:

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));
	}
}
		

跟我一步步学,慢慢走,踏实学。

未完待续。。。

你可能感兴趣的:(java,开发语言)