JavaSE基础2

简介: JavaSE基础

JavaSE基础1:https://developer.aliyun.com/article/1580042

2.3 数据类型转换

2.3.1 为什么进行数据类型转换

在Java中要求等号左边和等号右边的类型要一致。如果出现不一致,就需要进行数据类型转换

2.3.2 自动类型转换

在数据类型兼容的情况下, 小转大就是自动类型转换

自动类型转换也称之为隐式类型转换,即不需要做任何操作

class one{
  public static void main(String[] args){
    //自动类型转换
    byte b = 19;
    //i的类型为int b的类型为byte
    int i = b;
    System.out.println(i);     //19
    
    int num1 = 100;
    double num2 = num1;
    System.out.println(num2);    //100.0
    //char类型的自动类型转换
    char c1 = 'a';
    int c2 = c1; 
    System.out.println(c2);     //97
  }
}
2.3.3 强制类型转换

在数据类型兼容的情况下, 大转小就是强制类型转换

自动类型转换也称之为显式类型转换,需要添加对应语法

语法:(转换类型)变量

public class Demo05{
    public static void main(String[] args){
        //强制类型转换
        double n1 = 100;
        //n1的类型为double n2的类型为int
        int n2 = (int)n1;
        System.out.println(n2);     //100
        int c3 = 97;
        char c4 = (char)c3;
        System.out.println(c4);     //a
        //对表达式进行类型转换
        double d1 = 10;
        double d2 = 12;
        int d3 = (int)(d1 + d2);
        System.out.println(d3);   //22
  }
}
2.3.4 数据类型转换注意点
  • 1、boolean不能参与任何数据类型转换
  • 2、基本类型中范围(大小) byte short|char int long float double
  • 3、强制类型转换可能会造成数据丢失
  • 4、数据类型提升
  • 表达式中有double,结果double
  • 有float,结果float
  • 有long,结果long
  • 有int,结果int
  • 有char、byte、short,结果为int
  • 5、在Java中,任何一个整数默认都当做是int类型,
  • 在Java中,任何一个小数默认都是double类型
public class Demo05{
    /*
    数据类型转换的注意点:
            1、boolean不能参与任何数据类型转换
            2、基本类型中范围(大小) byte short|char int long float double
            3、强制类型转换可能会造成数据丢失
            4、数据类型提升
               表达式中有double,结果double
                        有float,结果float
                        有long,结果long
                        有int,结果int
                        有char、byte、short,结果为int
          5、在java中,任何一个整数默认都当做是int类型,
       v     在java中,任何一个小数默认都是double类型
        */
    int m1 = 129; //0000 0000 0000 0000 0000 0000 1000 0001
    byte m2 = (byte)m1;
    System.out.println(m2);
    double m3 = 10.2;
    int m4 = (int)m3;
    System.out.println(m4);
    short s1 = 1;
    short s2 = 1;
    //short s3 = s1 + s2; 错误
    //System.out.println(s3);
    char x1 = 'a';
    System.out.println(x1+1);
}
}

2.4 运算符

2.4.1 算数运算符
+   -   *    /    %    ++  --
  1. +号在java中有两个作用:1、字符串的拼接 2、加法运算
    字符串拼接的时候,任何类型与字符串拼接最终的结果是字符串类型
  2. ++表示自身+1
    –表示自身-1
    ++在前,先加+1再使用;++在后,先使用再加+1

两个操作数进行计算

操作符 描述
+ 加、求和
- 减、求差
* 乘、求积
/ 除、求商
% 模、求余
int n1 = 10;
byte n2 =4;
System.out.println(n1/n2);  //2
//如果两个数字都是int整数,结果还是int整数
double r =n1/n2;
System.out.println(r); //2.0
double r1 =(double)n1/n2;
System.out.println(r1);  //2.5
System.out.println(5.2%3);  // 2.2
System.out.println(-5.2%3);  // -2.2
System.out.println(3%5);  //3  无法整除的,商0余3
System.out.println(6%10);  //  6
System.out.println(-6%10);  //  -6
System.out.println(5%-10);  //  5
System.out.println(1%10);  //  1
//4687,求各个位上数字的和25
    public static void main(String[] args) {
        int num = 4678;
        int ge = num%10;
        int shi = num/10%10;
        int bai = num/100%10;
        int qian = num/1000;
        int sum = ge +shi +bai +qian;
        System.out.println(sum);
    }
2.4.2 赋值运算符
= += -= *= /= %=
  • = += -= *= /= %=
  • += 例如 a +=b 即为 a = a +b;
  • 等号右边值赋值给等号左边的变量。
操作符 描述
= 直接赋值
+= 求和后赋值
-= 求差后赋值
*= 求积后赋值
/= 求商后赋值
%= 求余后赋值
//+=和+的区别
byte b = 127;
b+=1;  //输出-128  不会类型提升
b++; //输出-128  也不会类型提升
//b=b+1;  //编译不通过,会类型提升Incompatible types. Found: 'int', required: 'byte'

注意:运算后赋值(复合运算)的,不会自动类型提升(++ – += -= /= %= *=)

short s1 = 1;

short s2 = 1;

s2 = s1 + s2; //错误

s2 = short ( s1 + s2 ); //正确

s2 += s1; //正确

2.4.3 关系运算符
> < >= <= != ==
  • 两个操作数进行比较,结果是一个布尔值(true / false)
  • == 一般用比较基本数据类型,在基本数据类型中只要值相等,就会返回true
  • ==和equals的区别
  • 重写equals比的是内容
操作符 描述
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于

注意 float double 不要直接使用关系运算符比较(存储方式,精度丢失,近似存储,会出现误差)

用包装类double float提供的方法

2.4.4 逻辑运算符
&& || !

两个boolean类型的操作数或表达式进行逻辑比较,返回Boolean结果

操作符 语义 描述
&& 短路与(并且) 两个操作数,同时为真,结果为真
|| 短路或(或者) 两个操作数,有一个为真,结果为真
! 取反(非) 意为“不是”,真即是假,假即是真
int n1 =10;
int n2 =8;
System.out.println(n1<n2&&++n1>10);   //false &&短路与之后的不执行
System.out.println(n1);    //10 
System.out.println(n1>n2||++n1>10);   //ture ||短路或之后的不执行
System.out.println(n1);    //10 
  • && 短路与, 即在整个运算式中只要有一个结果返回了false,就不会再执行后面的表达式
  • & 非短路与,逻辑与, 不管整个运算式如何,都会执行玩所有的表达式
  • || 短路或, 即在整个运算式中只要有一个结果返回了true,就不会再执行后面的表达式
  • | 非短路或,逻辑或, 不管整个运算式如何,都会执行玩所有的表达式

总结:&&和||效率更高,开发常用

2.4.5 三目运算符
boolean类型表达式 ? 结果1 : 结果2;
  • 布尔表达式 ? 结果1 : 结果2
  • 当表达式结果为真,获得结果1当表达式结果为假,获得结果2

将判断后的结果赋值给变量

操作符 语义 描述
? : 布尔表达式 ?结果1:结果2 当表达式结果为真,获得结果1当表达式结果为假,获得结果2
int java = 87;
String level = java>=90?"优秀":java>=80?"良好":"一般";
System.out.println(level);
//或者直接sout嵌套
int java = 92;
System.out.println(java>=90?"优秀":java>=80?"良好":"一般");
public class Demo {
    public static void main(String[] args) {
        //提示用户输入两个正整数并使用变量记录
        System.out.println("请输入两个整数");
        Scanner sc = new Scanner(System.in);
        int a =sc.nextInt();
        int b =sc.nextInt();
        //使用三目运算符找到最大值并打印
        int max = a > b ? a : b;
        System.out.println("最大值是 " + max);
        System.out.println("最大值是 " + (a > b ? a : b));
    }
}

2.5 控制台录入

控制台录入指的是通过键盘输入数据与程序之间进行交互

程序运行中,可在控制台(终端)手动录入数据,再让程序继续运行。

导包语法:import 包名.类名; //将外部class文件的功能引入到自身文件中。

步骤:

  1. 导入Scanner类,import java.util.Scanner,
  2. 创建Scanner类型的变量(对象)
  3. 使用Scanner类的方法
  • .nextInt(); //获得整数
  • .nextDouble(); //获得小数
  • .next(); //获得字符串,只要出现空格,只截取空格前的内容

.nextLine(); //获得字符串,以enter为标记截取前面所有的内容(可以输入空格)

        Scanner sc  =new Scanner(System.in);
        System.out.println("请输入第一个字符串s");
        String s = sc.next();
        System.out.println("你输入的第一个字符串s为"+s);   //输入jack rose,输出:你输入的字符串为jack
        System.out.println("请输入第二个字符串s2");
        String s2 = sc.nextLine();
        System.out.println("你输入的第二个字符s2串为"+s2);  //直接跳过

        sc.nextLine();  //读取刚才的回车
        System.out.println("请输入第三个字符串s3");
        String s3 = sc.nextLine();
        System.out.println("你输入的第二个字符串s3为"+s3);

/*
请输入第一个字符串s
s a 
你输入的第一个字符串s为s
请输入第二个字符串s2
你输入的第二个字符s2串为 a 
d f g 
请输入第三个字符串s3
h j k 
你输入的第二个字符串s3为h j k 
 */
  • .ext().charAt(0);//获得单个字符 char x = input.next().charAt(0);

如果输入了不匹配的数据,则会产生 java.util.InputMismatchException

  • 变量接收方法的返回值
  • 快捷键自动生成返回值 方法.var
//alt + enter 手动导包
// 1、创建Scanner对象
Scanner sc = new Scanner(System.in);
//3、使用Scanner对象提供的方法来使用获取键盘录入的内容
System.out.println(" 请输入... ");
// .var
int  num = sc.nextInt();  //阻塞式的方法,即这个方法不执行代码就不会往下走
System.out.println("你输入的为"+num );
//格式类型
import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int age = input.nextInt();    //int
        System.out.println("请输入一个小数");
        double num = input.nextDouble();    //double
        System.out.println("请输入一个字符串");
        String name = input.next();   //String
        System.out.println("请输入一个字符");
        char x = input.next().charAt(0);    //字符串char
    }
}
//需求:控制台输入输出三门课程成绩,统计总分和平均分
import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入java成绩");
        int java = input.nextInt();
        System.out.println("请输入sql成绩");
        int sql = input.nextInt();
        System.out.println("请输入html成绩");
        int html = input.nextInt();
        System.out.println("总成绩为" + (java + sql + html));
        System.out.printf("平均分是%.2f",(java + sql + html) / 3.0);//保留两位小数
        System.out.printf("平均分是:"+"%.2f",(java + sql + html) / 3.0);
    }
}

案例:从键盘输入三角形的底和高,并输出三角形的面积。

//2、引入Scanner类型
import java.util.Scanner;
public class Demo03{  
  public static void main(String[] args){
    //从键盘输入三角形的底和高,并输出三角形的面积。
    //1、创建键盘录入对象Scanner
    Scanner sc = new Scanner(System.in);
    
    System.out.println("请输入三角形的低");
    double di = sc.nextDouble();
    System.out.println("请输入三角形的高");
    double gao = sc.nextDouble();
    System.out.println("三角形的面积为:"+di*gao/2);
  }
}

3.流程控制语句(分支)

目录
相关文章
|
自然语言处理 Java 编译器
【javaSE】 方法的使用
【javaSE】 方法的使用
|
3月前
|
Java Linux 编译器
JavaSE基础1
JavaSE基础
52 4
|
Java 编译器
|
安全 Java 程序员
|
6月前
|
安全 算法 Java
JavaSE 进阶-javase进阶(三)
JavaSE 进阶-javase进阶
58 0
|
6月前
|
安全 Java API
JavaSE 进阶-javase进阶(二)
JavaSE 进阶-javase进阶
50 0
|
6月前
|
存储 人工智能 算法
JavaSE 进阶-javase进阶(一)
JavaSE 进阶-javase进阶
61 0
|
Java
总 JavaSE课程体系
总 JavaSE课程体系
57 0
|
11月前
|
机器学习/深度学习 自然语言处理 Java
【JavaSE】方法的使用
【JavaSE】方法的使用
|
机器学习/深度学习 Java 编译器
方法的使用【JavaSE】
方法的使用【JavaSE】
34 0