Java基础知识

表达式自动提升类型

一个表达式中包含多种数据类型时,结果的数据类型会自动提升,规则如下:

  • byte、short、char自动提升为int
  • 整个表达式的类型提升到最高级的数据类型

注意

  • 直接写3.14这样的小数,默认类型为double
  • 直接写一个整数的数字,默认类型为int
  • char类型的数据转换为int型时输出的是ascii码对应的值
float f1 = 3.14f;//直接写3.14这样的小数,默认类型为double
int i1 = 263114;  //直接写一个整数的数字,默认类型为int

byte b1 = 3;
byte b2 = 2;
int sun1 = b1 + b2;  //b1 和 b2 自动提升类型为int

short s1 = 3;
short s2 = 2;
int sum2 = s1 + s2;  //s1,s2自动提升类型为int

char c1 ='1';
char c2 ='2';
int sum3 = c1 + c2;  //c1,c2自动提升类型为int
System.out.println(sum3);

long l1 = 6;
//因为表达式中有一个long类型的加数,所以这整个表达式的结果提升为long
long sum4 = l1 + s1 + b1;

//练习
short s3 =  5;
//s3 = a3 -2;
//表达式中的2是int,表达式的结果为int,这个结果是错误的

字面量(直接量)

在代码中直接出现的数字或者字符串,叫做字面量

//字面量
int m = 20;//20称为字面量
float f5 = 3.14F;//3.14称为字面量
String str1 = "字符串";//字符串称为字面量

自动装箱和自动拆箱

  • 每一种基本类型都对应一种包装类型(类),基本类型和包装类型之间可以自动转换

  • 从基本类型中转到包装类型称为自动装箱

  • 从包装类型中转到基本类型成为自动拆箱

基本类型包装器类型
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean
int i = 10;
Integer integer = i;//基本类型直接赋值给包装类型,自动装箱
int i2 = integer;//包装类型直接赋值给基本类型,自动拆箱

//包装类型的常用方法
String str = "123";
Integer value = integer.valueOf(str);//把字符串转换为Integer类型
System.out.println(1 + value);
int i1 = Integer.parseInt(str);//把字符中转为int类型
System.out.println(2 + i1);

Java里的数据类型

在这里插入图片描述

Java常见的运行时异常

  1. java.lang.NullPointerException

    这个异常的解释是 "程序遇上了空指针 (空指针异常),简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。

  2. java.lang.ClassNotFoundException

    异常的解释是"指定的类不存在",这里主要考虑一下类的名称和路径是否正确即可

  3. java.lang.ArrayIndexOutOfBoundsException

    这个异常的解释是"数组下标越界",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了.

  4. java.lang.NoSuchMethodError

    方法不存在错误。当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该错误。

  5. java.lang.IndexOutOfBoundsException

    索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。

  6. java.lang.NumberFormatException

    数字格式异常。当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常。

  7. java.sql.SQLException

    Sql语句执行异常

  8. java.io.IOException

    输入输出异常

  9. java.lang.IllegalArgumentException

    方法参数错误

  10. java.lang.IllegalAccessException

    无访问权限异常

运算符

运算符是一种特殊的符号,用于数据计算、赋值和比较。运算符将多个操作数连接在一起,就成为了表达式。

Java运算符包含以下几类:

  • 算数运算符
  • 赋值运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符
  • 三目运算符

算数运算符

Java里的算术运行算符包含: + - * / % ++ –

  • +运算符除了数学的相加作用外,还可以用于字符串的拼接

    int sum1 = 3 + 2;
    String str1="加法的和等于:"+ sum1;//+用于字符串,自动把后面int类型的数字转为字符串
    System.out.println(str1);
    
    String str2 = sum1 + "这是和";//字符串和其他类型拼接时顺序无关
    System.out.println(str2);
    
    String str3 = "字符串和布尔类型拼接" + true;//字符串可以和所有的基本数据类型拼接
    System.out.println(str3);
    
  • 做减法运算

  • *做乘法运算

  • /做除法运算

    整除的结果也为整数(舍弃小数部分);整除时不能用0做除数
    浮点数相除结果有小数;浮点数相除时河以用0作为除数,结果时lnfinity

    int res1;
    res1 =8 / 4;
    System.out.println("8/4:" + res1);
    res1=8/3;
    //两个整数相除,得到的结果是整数,舍弃小数部分 (整除)
    System.out.println("8/3:" + res1);
    /*
    res1 = 5 / 0;
    System.out.println("8 / 0" + res1);   //不能用0做除数,会出异常
    */
    double res2 = 8/2.5;
    //只要有一个操作数为小数,结果就是小数
    System.out.println("8/2.5 " + res2);
    res2 = 10 / 3.0;
    System.out.println("10/3.0 " + res2);
    res2 = 5.0 / 0;//浮点数除法,除数可以为零,得到的结果是Infinity(无穷大)
    System.out.println("5.0/0:" + res2);//5.0/0:Infinity
    
  • %模运算用于得到除法的余数

    整数取模,除数不能为0
    小数取模,除数可以为0,得到的结果是NaN(Not a Number)(表示不是一个数字)

    //取模运算
    res1 = 5 % 3;//结果是余数
    System.out.println("5%3:" + res1);
    /*
    res1 = 5 % 0;//模运算也不能用0作为除数
    System.out.println("5%0:" + res1);
    */
    res2 = 5.1 % 3;
    System.out.println("5.0%3:" + res2);//结果为NaN(表示结果不是一个数字)
    
  • ++称为单目运算符(只有一个操作数),自己加1,可以放在操作数左边或右边

  • –称为单目运算符,自己减1,可以放在操作数的左边或右边

//++ --单目运算符
        int k = 1;
        res1 = 5 + k++;
        /*自己加1,++在后面,操作数先参与运算,然后再加1
        *等效于:  res1=5+k;
        *        k =k +1;
        * */
        System.out.println(res1);

        int res3;
        int j = 1;
        res3= 5 + ++j;
        /*j自加1,++在前面,先自己加,再参与表达式运算
         * 等效于:  k =k +1;
         *         res1=5+k;
         */
        System.out.println(res3);
        System.out.println(j);

赋值运算符

  • = 赋值,把等号右边的值赋给左边的变量
 //赋值运算
 int n = 5;//赋值字面量
 n = 3 + 2;//赋值表达式
 n = k - j;//赋值含有变量的表达式
 Scanner scanner = new Scanner(System.in);
// n = scanner.nextInt();//赋值一个方法返回值
 System.out.println(n = 4 + 6);//赋值语句会返回结果
  • 扩展(组合)的赋值运算符

    += -= *= /= %=

    //组合运算符
    n = n+ 2;
    n += 2; // 等同于  n = n+ 2;
    n -= 2;// 等同于  n = n- 2;
    n *= 2;// 等同于  n = n* 2;
    n /= 2;// 等同于  n = n/ 2;
    n %= 2;// 等同于  n = n% 2;
    

比较运算符

用于判断两个操作数的大小是否相等,包含:

< > == >= <= !=

返回的结果是布尔(Boolean)型(true或者false)

//比较运算符
System.out.println(3 >2);//true
System.out.println(2 ==  2);//true
System.out.println(3 < 2);//false
System.out.println(2 != 2);//false
System.out.println(3 >= 3);//true
System.out.println(3 <= 2);//false

逻辑运算符

  • && 短路与

  • & 与

  • || 短路或

  • | 或

  • ! 非

  • ^ 异或

//逻辑运算符
System.out.println("--------逻辑运算------------");
//&&  短路与,两个操作数都为true,结果才为true
System.out.println(true && true);
System.out.println(true && false);
n = 1;
//如果根据第一个操作数就能觉得表达式的结果,那么第二个表达式不会再执行
System.out.println(false && (2 == ++n));//第一个操作数是于false,所以后面的表达式(2==++n)不会被执行,n还是1
System.out.println(n);

// &  与 ,有两个true才为true
System.out.println(true & true);
System.out.println(false & true);
int m = 1;
System.out.println(false & (2 == ++m));
System.out.println(m);

// || 短路或,有一个true即为true,有两个false才为false
//如果根据第一个操作数就能觉得表达式的结果,那么第二个表达式不会再执行
System.out.println(true || true);//true
System.out.println(false || true);//true
System.out.println(false || false);//false

//求反,true变false,false变true
System.out.println(!true);
System.out.println(!false);
System.out.println(!(2 == 2));

//  ^ 异或,只有两个操作数不同时返回true,相同(都true或者都false)返回false
System.out.println(true ^ false);//true
System.out.println(false ^ false);//false
System.out.println(true ^ true);//false

位运算符

  • & 按位与

  • | 按位或

  • ~ 按位非

  • ^ 按位异或

  • <<向左移位

  • >>向右移位

  • >>>无符号移位

    //位运算符
    System.out.println("-------位运算符----------------");
    int a = 5;//101
    int b = 7;//111
    System.out.println(a & b);//5    101
    
    System.out.println(a | b);//7    111
    
    a = -5;
    System.out.println(~a);// 4
    
    a = 5;
    System.out.println(a^b); //2,010
    /**
     * 面试题:请用性能最优的方式计算:2 * 8
     */
    a = 2;
    System.out.println(a << 3);   //16  ,  二进制10  左移3位得到二进制数 10000
    
    System.out.println(5 >> 2);
    
    System.out.println(5 >>> 2);
    
    System.out.println(-5 >>> 2);
    

三目运算符

三目运算符用于两分支的判断,等效于if else语句

语法:条件表达式? 为真值:为假值

条件表达式为真输出:前面的值 条件表达式为假输出:后面的值

//三目运算符
res1 = 3 > 2 ? 100 : 500;
System.out.println(res1);
  • 练习:从控制台输入两个整数,打印出较大的数
import java.util.Scanner;
public class Work {
    public static void main(String[] args) {
        //打印较大的数
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入两个整数:");
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int i1 = a > b ? a : b ;
        System.out.println( a + "和" + b + "其中较大的数为:" + i1);
    }
}

运算符的优先级

括号>单目运算符>算术运算>比较运算符>逻辑运算符>三目>赋值

在这里插入图片描述

//运算符优先级
/*
*第一步,计算括号: 5 * ++a == 8 ? true:false
*第二步,计算++: 5 * 6 == 8 ? trUe:false
*第三步,计算*: 30 == 8 ? trUe:false
*结果:false
*/
a = 5;
System.out.println((3 + 2) * ++a == 8 ? true : false);
 int i1 = a > b ? a : b ;
    System.out.println( a + "和" + b + "其中较大的数为:" + i1);
}

}


### 运算符的优先级

括号>单目运算符>算术运算>比较运算符>逻辑运算符>三目>赋值

[外链图片转存中...(img-aIiHMD7Z-1659346829465)]

```java
//运算符优先级
/*
*第一步,计算括号: 5 * ++a == 8 ? true:false
*第二步,计算++: 5 * 6 == 8 ? trUe:false
*第三步,计算*: 30 == 8 ? trUe:false
*结果:false
*/
a = 5;
System.out.println((3 + 2) * ++a == 8 ? true : false);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值