Java003

Java03

类型转换

强制类型转换和自动类型转换

package base;
​
public class Typeconversion {
    public static void main(String[] args){
        int i=128;
        byte b=(byte)i;//内存溢出
        //强制类型转换  高到低 (类型)变量名
        System.out.println(i);//输出128
        System.out.println(b);//输出-128  byte只能表示-128到127之间的数
//自动类型转换  低到高
        double d=i;//由低到高,自动类型转换
        System.out.println(d);//输出128.0
//低到高
        //byte,short,char--int--long--float--double;
        /*
        1.不能对布尔值进行转换
        2.不能把对象类型转换为不相关的类型
        3.在把高容量转换为低容量的时候,需要强制类型转换
        4.转换的时候可能存在内存溢出和精度问题
         */
        System.out.println("_______________________");
        double d1=3.141;
        System.out.println(d1);//输出结果3.141
        System.out.println((int)3.141);//输出结果3,存在误差
        float f1=3.14159f;
        System.out.println(f1);//输出结果3.14159
        System.out.println((int)3.14159f);//输出结果3
​
        System.out.println("_______________________");
        char c='a';
        int i2=c+1;//低转高自动转换
        System.out.println((int)c);//输出结果97
        System.out.println(i2);//输出结果98
        System.out.println((char)i2);//输出结果b
​
    }
}
​

 

 

类型转换注意事项

package base;
​
public class TypeconversionExpand {
    public static void main(String[] args) {
        //操作比较大数字时,注意溢出问题
        //JDK7新特性,数字之间可以用下划线分割,易读性
        int money=1000000000;
        int money2=10_0000_0000;
        System.out.println(money);//输出结果1000000000
        System.out.println(money2);//输出结果同样是1000000000
int year=20;
        int total=money*year;
        System.out.println(total);//输出-1474836480,计算结果溢出导致错误
        long total2=money*year;//系统会先计算money*year的值,然后去赋予total2,计算时的值是int类型,在赋予之前就已经是错误的
        System.out.println(total2);//输出-1474836480,同样溢出
        long total3=money*((long)year);//先转换,在计算,成功
        System.out.println(total3);//成功输出20000000000
​
    }
}

 

变量和常量

变量

  • 变量就是可以变化的量

  • Java是一种强类型语言,每个变量都必须申明其类型

  • Java变量是程序中最基本的存储单元,要素包括变量名,变量类型和作用域;

Type varName=value;
//数据类型 变量名 值  
  • 每个变量都有类型,可以是基本类型,也可以是引用类型

  • 变量名必须是合法的标识符

  • 变量声明是一条完整的语句,每一个声明都必须以分号结束

package base;
​
public class Variable {
    //main方法
    //类里除了方法还能定义属性,变量
//类变量 static
    static String St="String111";
​
    //实例变量 从属于对象 如果不自行初始化,会变成这个类型的默认值 0 0.0
    //布尔类型的默认值是false
    //除了基本类型,其余的默认值都是null
    String name;
    int age;
    boolean Bb;
​
    public static void main(String[] args) {
        ///int a,b,c;
        //int a=1,b=2,c=3;
        int a=1;
        int b=2;
        int c=3;
        String myname="有枫";
        char cr='$';
        double p=3.14;
        boolean bl=false;
​
        //变量类型 变量名 值
        Variable v1=new Variable();
        System.out.println(v1.age);//输出0 age未初始化,所以是默认值0
        System.out.println(v1.name);//输出null
        if (v1.Bb){
            System.out.println("true");
        }else{
            System.out.println("false");
        }//输出false,布尔类型的默认值是false
​
        System.out.println(St);
    }
    //其他方法
    public void add(){
        //局部变量,必须申明和初始化值
        String s1="有枫枫";
    }
}

 

变量作用域

  • 类变量

  • 实例变量

  • 局部变量

常量

  • 常量(constant)就是初始化后不能再改变值!不会变动的值

  • 常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被修改

//final 类型 常量名=值;
final double PI=3.141;

 

  • 常量名一般使用大写字符

package base;
​
public class constant {
    //static final 都是修饰符,不区分前后
    //final static double PI=3.14;
    static final double PI=3.14;
    public static void main(String[] args) {
        System.out.println(PI);
​
    }
}

 

命名规范

  • 所有变量,方法,类名:见名知意

  • 类成员变量:首字母小写,驼峰原则

  • 局部变量:首字母小写,驼峰原则

  • 常量:大写字母和下划线 MAX_VALUE

  • 类名:首字母大写和驼峰原则

  • 方法名:首字母小写和驼峰原则

运算符

介绍

优先级()

  • 算数运算符: +,-,*,/,%(模运算,也就是求余运算),++,--

  • 赋值运算符:=

  • 关系运算符:> , < , ≥ , ≤,== , != ,instanceof

  • 逻辑运算符:&& , || , !

  • 位运算符:& , | , ^ , ~ , >> , << , >>>

  • 条件运算符 ? :

  • 扩展赋值运算符:+= , -= , *= , /=

算数运算符

package Operator;
​
public class Operator {
    public static void main(String[] args) {
        //二元运算符
        int a=10;
        int b=20;
        int c=25;
        int d=25;
        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);
        System.out.println(c%a);//输出结果5 25/10余数为5
//System.out.println(a/b);//结果输出为0,正确答案是小数,转int类型变成了0
        System.out.println(a/(double)b);//得出结果0.5
//关系运算符返回的结果是布尔值 true false
        System.out.println(a>b);//false
        System.out.println(a<b);//true
        System.out.println(a==b);//false
​
​
    }
}
​
自增

package Operator;
​
public class AutoOperator {
    public static void main(String[] args) {
        //++ 自增 -- 自减   一元运算符
        //a++ 就是 a+1
        //a-- 就是 a-1
        int a=1;
        int b=a++;//a=a+1 执行代码,先把a的值赋予b,然后再执行a++
        System.out.println(a);//输出结果2
        int c=++a;//执行时机的不同 a先进行自增,然后把值赋予c
​
        System.out.println(a);//输出结果3
        System.out.println(a);//输出结果3
        System.out.println(b);//输出结果1
        System.out.println(b);//输出结果1
        System.out.println(c);//输出结果3
        System.out.println(c);//输出结果3
​
​
    }
}
​

逻辑运算符和扩展赋值运算符

package Operator;
​
public class MoreOperator {
    public static void main(String[] args) {
        //逻辑运算符
        //与(&&)and   或(||)or   非(!)取反
        boolean a=true;
        boolean b=false;
        boolean c=true;
        boolean d=false;
​
        System.out.println("a&&b : "+(a&&b));//逻辑与运算 两个都为真,结果才为正
        System.out.println("a&&c : "+(a&&c));
        System.out.println("a||b : "+(a||b));//逻辑或运算 两个变量至少有一个为真,结果才是真
        System.out.println("a||c : "+(a||c));
        System.out.println("b||d : "+(b||d));
        System.out.println("!(a&&b) : "+!(a&&b));//逻辑非运算 把(a&&b)结果取反,(a&&b)结果为真则取反结果为假,反之亦然
​
​
        System.out.println("__________________________");
​
​
        //短路运算
        int i=5;
        boolean b1=(i<4)&&(i++<10);
        System.out.println(b1);
        System.out.println(i);
​
        // a&&b 如果开头的a就是错误的,那么b不再会进行比较和运算 短路运算
​
        System.out.println("__________________________");
        int j=5;
        boolean b2=(j++<10)&&(j<4);
        System.out.println(b2);
        System.out.println(j);
        System.out.println("_____________________");
​
​
        //扩展赋值运算符:+= , -= , *= , /=
        int num1=10;
        int num2=20;
        //num1+=num2;//num1=num1+num2 num1=30
        //num1-=num2;//num1=num1-num2 num1=-10
        //num1*=num2;//num1=num1*num2 num1=200
        //num1/=num2;//num1=num1/num2 num1=0.5 由于是转成了int类型,输出结果会变成0
        //字符串连接符 + System.out.println(""+num1+num2);得出结果1020 会把后面的转换为String类型进行字符串拼接
        //System.out.println(num1+num2+"");得出结果30 从左到右运算
​
​
    }
}

位运算符

package Operator;
​
public class BitOperator {
    public static void main(String[] args) {
        //位运算 & , | , ^ , ~
        /*
        A=00111100
        B=00001101
​
      A&B=00001100//对应位都为1结果才为1,否则为0
      A|B=00111101//对应位都为0结果才为0,否则为1
      A^B=00110001//对应位置相同结果才是0,否则为1
      ~B=11110010//0变1,1变0,取反
​
      <<左移 相当于把数字*2
      >>右移 相当于把数字/2
        2*8  2*2*2*2
        效率极高
        0000 0000    代表   0
        0000 0001           1
        0000 0010           2
        0000 0011           3
        0000 0100           4
        0000 0101           5
        0000 0110           6
        0000 0111           7
        0000 1000           8
        0000 1001           9
        0000 1010           10
        0000 1011           11
        0000 1100           12
        0000 1101           13
        0000 1110           14
        0000 1111           15
        0001 0000           16
​
         */
        System.out.println(2<<3);//输出16
    }
}
​

条件运算符

package Operator;
​
public class TernaryOperator {
    public static void main(String[] args) {
        //三元运算符
        // ? :
        //X?y:z
        //如果x==true,则结果为y,否则等于z
        int score=80;
        String type=score>60?"及格":"不及格";
        System.out.println(type);//及格
    }
}

扩展

package Operator;
​
public class OperatorExpand {
    public static void main(String[] args) {
        long a=1519440000L;
        int b=200;
        byte c=1;
        short d=10;
​
        System.out.println(a+b+c+d);//long类型 计算过程中含有long类型,那么结果也为long
        System.out.println(b+c+d);//int类型
        System.out.println(c+d);//int类型
        //计算过程中含有double类型的话,那么结果也为double
//幂运算 2^3 2*2*2 很多运算我们会使用工具类来操作
        double p=Math.pow(2,3);
        System.out.println(p);//输出结果8.0
​
    }
​
​
}
​
posted @ 2021-12-11 21:37  有枫  阅读(53)  评论(0)    收藏  举报