变量,数据类型转换,运算符

来源:B站尚硅谷

模块二. 变量 数据类型转换 运算符

第一章. 常量和变量

1. 什么是常量、变量?

  • 常量:不可以变化的量,即常量值不能改变

  • 变量:可以变化的量,即变量的值可以改变

2. 定义,初始化常量、变量

1. 常量初始化

final 数据类型 常量名 =;

2. 变量定义,初始化

三种格式:

	a. 数据类型 变量名 =;

	b. 数据类型 变量名;
   	   变量名 =;
   
    c.连续定义三个相同类型的变量:
		 数据类型 变量名1,变量名2;变量名3;
		 变量名1 =;
		 变量名2 =;
		 变量名3 =;
		
		比如 int i,j,k;
			i = 10;
			j = 20;
			k = 30;

		数据类型 变量名1 =,变量名2 =,变量名3 =;

		比如 int i = 10, j = 20, k = 30;
正确读法:

  先看等号右边的,再看等号左边的 -> 将等号右边的数据赋值给等号左边的变量
  哪怕等号右边有运算,都得先将等号右边的运算算出一个值来,最后赋值给等号左边的变量
解释
1. final 代表常量,且常量是特殊的变量

2. final, staticpublic 都属于修饰符 不用区分先后顺序 都行都一样
 	例如:    
 	static final int PI = 3.14;//加static是为了方便调用!
		final static double PI = 3.14;
		//static final double PI = 3.14;

3. 数据类型:可以是基本数据类型,也可以是引用类型。

4. 注意完整的语句最后要加英文分号;

3. 变量的数据类型

1. 变量的数据类型

基本数据类型: 48种 
	整型:byte short int long
	浮点型:float  double
	字符型:char
	布尔型:boolean

2. 引用数据类型

类 数组 接口 枚举 注解 字符串String
  Java中除了八大基本数据类型,剩下的都是引用数据类型        

在这里插入图片描述

说明
1. 字符串不属于基本数据类型,属于引用数据类型,用 String 表示
	String 是一个类,只不过在定义的时候可以和基本数据类型格式一样
       
2. float (单精度)7位 和 double (双精度)16位	的区别
	代表的小数点后面的位数不同,能表示小数位越多,则更精确
		float 的小数位只有23位二进制,能表示的最大十进制为223次方,是7位数,
			所以 float 型的小数位能表示7double 的小数位只有52位二进制 ,是252次方, 
   			double 型的小数位数能表示163. 开发时不要用 floatdouble 直接参与运算,会有精度损失问题

4. 变量作用域和分类

1. 变量作用域

  • 成员变量:写在类里面,方法外面的变量。生命周期与类相同
    如: 类变量,实例变量
  • 局部变量:写在类里面,方法里面的变量。生命周期就是这个方法体

2. 变量的分类

  根据声明的位置分类:
  	a. 成员变量

  	b. 局部变量
说明
1. 变量不初始化(第一次赋值)不能赋值
	在同一个作用域(一对大括号{}就是一个作用域)中不能定义重名的变量
	只要是变量名前带具体的数据类型就是重新定义
	{
  		int a = 1;
		int a = 2;
		System.out.println(a);
	}
	这是报错的

2. 不同作用域中的数据尽量不要随意互相访问。
 	在小作用域中能直接访问大作用域中的变量,但在大作用域中不能直接访问小作用域中的变量 

5. 详解各个变量

1. 成员变量

声明在类里面,方法体外面的变量就是成员变量。(如类变量、实例变量)
a. 类变量(静态变量) (被static修饰的变量、类属性)写在类里面,方法外面,类变量作用域很大

static int a = 0; 

b. 实例变量(前面不加static):写在类中间,写在类里面,方法外面。

2. 局部变量

声明在类里面,方法体里面的变量就是局部变量 。

a. 局部变量需要声明以及初始化
b. 局部变量的作用域就是这个方法体的括号

说明
1. 如果实例对象不初始化值,就是这个类型对应的默认值

2. 除了基本类型  其余的默认值都是null

3. 全局变量

Java中没有全局变量的概念

全局变量是面向过程语言(如C语言)中的概念。由static修饰的变量称为静态变量,其实质上就是一个全局变量。
成员变量又被称为全局变量
初学阶段,变量前都写上static 作为类变量(跟随类共同存亡)方便调用
学了new之后 再去考虑不加static的情况 也就是实例变量

6. 变量命名规范

  • 所有变量、方法、类名:见名知意
  • 常量:一般所有字母都大写,可以有下划线 MAX_VALUE
  • 类名:首字母大写和驼峰原则 Hello HelloWorld
  • 方法名:首字母小写和驼峰原则:run() runRun()
  • 类成员变量:首字母小写和驼峰原则 monthSalary (除了第一个单词,后面的 单词首字母大写)
  • 局部变量:首字母小写和驼峰原则

7. 注意

  1. Java是一种强类型语言,每个变量都必须声明其类型。
  2. Java变量是程序中最基本的存储单元,其要素有:变量名 变量类型 作用域。

8. 代码演示

在这里插入图片描述

代码示例
public class Demo05 {

 public static void main(String[] args) {
     byte b = 8;(-128~127)
     short s = 10;
     char c = '2';
     int i = 23;
     long l = 211321312312L;
     float f = 21.3f;
     double d = 21.5;
     double d1 = 21.6d;
 }
}

第二章. 数据类型转换

1. 什么时候发生类型转换

  • 等号两边类型不一致
  • 不同类型的数据做运算

2. 自动转换和强制转换

  • 自动转换
取值范围小的类型赋值给大的			 小自动转大
取值范围小的类型 和 大的做运算		小自动转大
  • 强制转换
取值范围大的类型赋值给小的		大强制转小

强制类型转换注意事项:
  a.不要随意写成强转的格式,因为会有精度损失问题以及数据溢出现象,除非没有办法
  b.byte,short 定义的时候如果等号右边是整数常量,且不超出byteshort范围,则不需要我们自己强制转换,jvm会自动强制转换
  	byte b = 10;//看似没转,实则虚拟机自动转
		System.out.println(b);
	c.byte,short 如果等号右边有变量参与,byteshort自动提升为int,然后结果再次赋值给byteshort的变量,需要我们自己强制转换
      byte b1 = 10;//此时b1为byte类型
		b1 = (byte)(b1 + 1);//等号右边的b1自动转换为byte = int + int 需要强制转换
		System.out.println(b1);
	d.char类型数据如果参与运算,会自动提升为int型,如果char类型的字符提升为int,回去ASCII码表范围查询字符对应的int值
      如果在ASCII码表中没有对应的int值,会去unicode码表(万国码)中找,比如中文

3. 取值范围排序

取值范围从小到大

byte,short,char	->	int ->	long -> float	->  double

4. 注意

整数默认类型 int
小数默认类型 double	float num1 = 2.5; (此时等号右边的2.5后面没有加f,所以默认位double型,需要强制转换为float)float num1 = (float)2.5;
					或者直接定义为floatfloat num1 = 2.5f;

第三章. 进制的转换(了解)

第四章. 位运算符(了解)

在这里插入图片描述
在这里插入图片描述

第五章. 运算符的优先级(了解)

在这里插入图片描述

说明
1. 表达式不要太复杂
2. 先算的使用(),记住,如果想让哪个表达式先运行,就给它加小括号就可以了
运算符(注意运算的优先级)
/优先级低-->byte  short   char  int   long    float  double
规律:
 根据优先级:
 1.操作数中无int类型,结果为int
 2.操作数中优先级最高的为int,结果为int
 3.操作数中类型优先级大于int的 ,结果类型为操作数中最高的类型
 
 System.out.println((String)(c+d));//报错 cast 'int' to 'java.lang.String'
 可以前面加String 根据提示来看是什么类型。
说明
public class Demo05 {
public static void main(String[] args) {
      byte b = 8;(-128~127)
      short s = 10;
      char c = '2';
      int i = 23;
 	  long l = 211321312312L;
      float f = 21.3f;
      double d = 21.5;
      double d1 = 21.6d;
       //变量类型不同进行运算
       System.out.println((b + s));//byte + short = int
       System.out.println((b + c));//byte + char = int
       System.out.println((b + i));//byte + int = int
       System.out.println((b + l));//byte + long =long
       System.out.println((b + f));//byte + float = float
       System.out.println((b + d));//byte + double = double
       }
}

1. 算术运算符

+	 -	 * 	/ 	% 	++	 --

2. 赋值运算符

=

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

代码演示

public class Demo07 {
	public static void main(String[] args) {
 		int a = 10;
  		int b = 20;
   		a += b; //a = a + b;
    	System.out.println(a);
     	a -= b; //a = a - b;  //注意此时a为30 30-20 = 10
     	System.out.println(a);
     	System.out.println("--------------------------------------------");
      	//字符串连接符 +
       	int c = 10;
        int d = 20;
        System.out.println("cd的和为:" + c + d);
         //面试题
        System.out.println("ddd" + c + d);//前面有String类型   就会把后面得 c 和 d 都转化为String类型
        System.out.println(c + d + "ddd");//这是后面有String类型  先c+d得出结果30  然后与后面的String类型连接
        System.out.println("Hello World !");
        }
}

3. 关系运算符

< >= <= == !=
//关系运算符比较变量当中保存的值的比较
代码演示
public class Demo03 {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		int c = 21;
     	System.out.println(a > b);  //false
     	System.out.println(a < b);  //true
     	System.out.println(a == b); //false
      	System.out.println(a !=b);
      	System.out.println(a = b);  //赋值
      	System.out.println(a != b); //返回值为布尔类型 false true       //true
      	System.out.println(c % a);  //1
      	System.out.println("Hello World !");       
          }
}

4. 逻辑运算符

&逻辑与 | 逻辑或  !逻辑非  ^逻辑异或
&& || !&&    and  
或 ||    or
非 !     取反
短路运算
public class Demo05 {
	public static void main(String[] args){
		boolean a = true;
		boolean b = false;
		System.out.println(a && b);
		System.out.println(a || b);
		System.out.println(!(a && b));
		//短路运算
		int c = 5;
		boolean d = (c < 4) && (c++ < 4);
		System.out.println(d);
		System.out.println(c);
		 /*
		* c的值没有变为6  仍为5
		* 是因为boolean d = (c < 4) && (c++ < 4); 判断(c <4 )为假  直接输出结果为假    没有执行 (c++ < 4)
		 * */
 		System.out.println("--------------------");
 		int c1 = 3;
 		boolean d1 = (c1++ < 4);// 先3<4 true  后 c1= c1+1=4
 		System.out.println(d1);
 		System.out.println(c1);
 		int c2 = 3;
  		boolean d2 = (++c2 < 4);// 先c2自加为4   后比较 false
  		System.out.println(d2);
  		System.out.println(c2);
  		System.out.println("Hello World");
   }

5. 位运算 有面试题

& 	|	^	 ~	>> 	<<	 >>>(了解!!!)
代码示例
public class Demo06 {
   public static void main(String[] args) {
       /*
       位运算***
       A = 0011 1100
       B = 0000 1101
       --------------------------------------------
       A&B 0000 1100    (A与B 对应位都为1得1 有0得0)
       A|B 0011 1101    (A或B 对应位都为0得0 有1得1)
       A^B 0011 0001    (取反/异或 对应位相同得0 不同得1)
       ~B  1111 0010    (B对应位为1得0 为0得1 都取反)

       问2 * 8 = 16 计算机怎么算最快        2 * 2 * 2 * 2 = 16
        */

       /*
       <<  左移  相当于把数字*2
       >>  右移  相当于把数字/2
       2 << 3  0000 0010   对应十进制2
               1左移三位
               0001 0000   对应十进制16
        */
       System.out.println(2 << 3);//2*2*2*2
       System.out.println("Hello World !");
   }
}

6. 条件运算符(三元运算符)

? :
x ? y : z
当x为true 则结果为y 否则结果为z
代码示例
//三元运算符 条件运算符 ? :               //必须会
public class Demo08 {
    public static void main(String[] args) {
        // x ? y : z
        //当x为true 则结果为y 否则结果为z
        int score = 80;
        String type = score > 60 ? "及格" : "不及格";
        System.out.println(type);
        System.out.println("Hello World !");
    }
}
  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值