JAVA学习_Day02

Java第二天学习内容

学习笔记

一、数据类型转换
1.自动类型转换
特点:数据范围从小到大的转换【不会改变数据大小】
【byte是奔奔类型的停车位,short是小轿车类型的停车位,int是SUV类型的停车位,long是皮卡车类型的停车位,float是货车类型的停车位,double是大货车类型停车位
如果把奔奔停在小轿车等比自己大的类型的停车位是可以的,但是你要把大货车停止比自己小的停车位就不可以了,会发生溢出。】
byte<short<int<long<float<double

1)byte,short,char 之间不参与转换,它们参与运输的时候会直接转换为int类型
每一个字符都有与之对应的整数,char类型和int类型有一个对应关系(ASCII编码表)
在这里插入图片描述

2)有多种类型参与运算,结果以数据类型大的为准

2.强制类型转换
特点:数据范围从大到小的转换【有可能改变数据大小】
格式:目标数据类型 变量名=(目标数据类型)被转换的数据;
int a=127;
byte b=(byte)a; //把变量a强制转换为byte类型

强制类型转换时数据范围大小可能会被改变的原理:
在这里插入图片描述

3.编译器对常量的优化
常量优化:如果=右边都是常量,编译器会把常量先运算,再赋值
byte a=3+4; //正确: 等价于 byte a=7
byte b=a+1; //错误:a是变量,会自动提升为int,结果也是int类型,不能用byte接收

二、运算符
1.算数运算符: + - * /(除法) %(取模)
/(除法):整数相除,结果也是整数
%(取模):取余数

+符号的其他用途
1)+和数值运算: 【加法运算】
int a=3;
int b=a+4;
2)+和字符运算:【把字符转换为int,再做加法运算】
char x=‘a’;
int y=x+1; //把’a’转换为int类型的97,再+1,y=98
3)+和字符串运算:【字符串连接符】
String str=“hello”; //String表示字符串的类型
System.out.println(str+10+20); //hello1020
System.out.println(10+20+str); //30hello
System.out.println(str+(10+20));//hello30

++(自增)和–(自减)运算符
1)单独使用
++(自增)、–(自减)放在操作数前面和后面没有区别,都代表自增或者自减
int a=3;
a++; //a的值变为4
System.out.println(a); //4
int y=3;
–y; //y的值也变为2
System.out.println(y); //2

2)混合使用
前++(–):先加(减),后用
int a=3;
int b=++a; //先让a自增1,再把自增后的结果赋值给b
System.out.println(b); //4
System.out.println(a); //4

后++(–): 先用,后加(减)
int a=3;
int b=a++; //把a的值赋值b,之后a再自增1
System.out.println(b); //3
System.out.println(a); //4

总结:不管++(–)放在前面还是后,最终都得+1或者-1

2.赋值运算符
=:把右边的结果,赋值给左边
int a=10; //把整数10赋值给左边的int类型变量a

+= -= *= /= %=: 把左右两边的运算结果,重新赋值给左边
short a=3;
a+=3; //a+3后的结果,重新赋值给a
System.out.println(a); //6

注意:扩展的赋值运算,隐含有一个强制类型转换
short a=3;
a+=3; //等价于 a=(short)(a+3);

3.比较运算符
> >= < <= == !=

==和=的区别
==:判断两个数据是否相等
=: 把右边的值赋值给左边

4.逻辑运算符
&(与):左右两边都是true,结果才是true
|(或):左右两边都是false,结果才是false
!(非): 取反,true变false,false变true

短路效果:如果左边已经能决定整个式子的结果,右边不运算
&&(双与): 左边为false,右边不参与运算
||(双或): 左边为true,右边不参与 运算
【实际运用的时候,用的是&&和||】

注意:逻辑运算符的左右两边表达式结果必须是boolean

5.三元运算符
格式: 条件判断 ? 表达式1: 表示式2;
执行流程:
1) 先计算条件判断的结果是true还是false
2) 如果是true,就执行表达式1
如果是false,就执行表达式2

案例1:求两个整数的最大值
int a=4;
int b=3;
//三元运算的结果,必须被使用
int max=a>b?a:b;
System.out.println(“最大值为:”+max);
System.out.println(“最大值为:”+(a>b?a:b));

案例2:定义一个int类型的整数,判断整数是否>60,满足条件输出"及格",否则输出"不及格"
int score=98;
//把三元运算的结果赋值给result
String result=score>60?“及格”:“不及格”;
System.out.println(result);
//把三元运算的结果直接打印
System.out.println(score>60?“及格”:“不及格”);

三、方法入门
方法:用来对特定功能的代码进行封装,从而提高代码的复用性

方法格式:
public static void 方法名(){
方法体;
}

方法的调用格式:方法名();
注意:方法调用可以在任意位置调用

方法的注意事项
1)方法定义没有顺序
2)方法不调用,不执行
3)方法与方法之前是平级的,不能嵌套定义

测试代码:


public class Test02{
	public static void main(String[] args){
		
		//自动类型转换的复习
		byte a = 10;
		int b = 12;
		System.out.println(a+b);//22
		//加号+有运算和连接作用,当含有字符串,编译器自动把字符串即其后面的其他类型的内容默认为字符串并连接起来
		System.out.println("结果是:"+a+b);//结果是:1020
		System.out.println("结果是:"+(a+b));//结果是:22//小括号的优先级最高,所以运算时最先运算小括号的内容得到结果后再和前面的字符串做连接
		
		System.out.println("--------------------");
		
		//byte short char参与运算时会自动转为int型
		
		byte a1 = 10;
		short b1 = 11;
		char c1 = 98;//如果给char类型的变量赋值数字时,打印该char类型的结果就是在ASCII编码中该数字对应的字符
		System.out.println(c1);//b
		char c11 = 'b';
		System.out.println(c11);//b
		System.out.println(c1+c11);//196//如果两个字符类型的变量参与运算编译器就会自动按照ASCII编码表中字符和int类型数字对应的关系,转成相应的数字来做运算
		System.out.println(a1+b1+c1+c11);
		
		System.out.println("---------------");
		
		//有多种数据类型的变量参与运算其结果的类型是以其中最大的数据范围类型为准
		byte a2 = 12;
		int  b2 = 22;
		float c2 = 23.0F;
		double d2 = 3.14;
		System.out.println("结果为:"+(a2+b2+c2+d2));//double类型:60.14//多种数据类型参与运算,会自动转化为更大的数据类型
		byte a22 = 21;
		int b22 = a22;//较小的数据类型的变量可以直接赋值给数据类型较大的数据类型,无需强转
		System.out.println(b22);//21
		
		System.out.println("-----------------");
		//强制类型转换(可能会改变数据大小)
		int a3 = 22;//[-128,127]
		byte b3 = (byte)a3;//数据类型较大的变量赋值给较小的数据类型的变量要强制转换/数据大小不变因为int类型的数据值恰好在byte类型所表示的范围内
		System.out.println(b3);//22
		double c3 = 3.14;
		int d3 = (int)c3;//强制转换后数据大小可能会改变,double类型的数据转换为int类型的数据就是只保留了小数点前面的整数部分而舍弃小数部分
		System.out.println(d3);//3
		
		int e3 = 233;
		double f3 = 33.33;
		System.out.println(e3+f3);//266.33//运算结果的数据类型以参与运算的数据类型中的较大的数据类型为准
		double g3 = 21;//21.0把一个int类型的数赋值给double类型的变量结果是一个double类型//可以把较小的数值赋值给较大的数据类型的变量,只要不超过该数据类型所表示的范围就行了
		System.out.println(g3);
		
		System.out.println("---------------");
		//运算符:+ - * /(取商) %(取余或取余数)
		//1).加号做运算符
		int a4 = 3;
		char b4 = 'a';//编译器根据ASCII编码表上把字符a转成其对应的int类型的数值然后再参与运算
		System.out.println(a4+b4);
		//2).加号做连接符【字符串连接】
		String str4 = "hello";//String类型是引用数据类型
		int c4 = 232;
		System.out.println(str4+c4);//hello232
		int d4 = 8;
		//对一组变量进行操作时编译器会自动把字符串或字符串类型的变量的【后面的】数据类型默认成字符串类型再进行字符串连接操作
		System.out.println(str4+c4+d4);//hello2328
		System.out.println("helloWorld"+c4+d4);//helloWorld2338
		System.out.println(c4+d4+str4);//240hello
		System.out.println(c4+d4+"helloWorld");//240helloWorld
		System.out.println(str4+(c4+d4));//hello240
		
		System.out.println("---------------");
		//++(自增)、--(自减)运算符
		//1)单独使用(变量++,++变量区别不大都是变量加1,变量--和--变量都是变量减一)
		int a5 = 3;
		a5++;
		System.out.println(a5);//4
		a5--;
		System.out.println(a5);//3
		int b5 = 4;
		++b5;
		System.out.println(b5);//5
		--b5;
		System.out.println(b5);//4
		int c5 = 5;
		c5++;
		++c5;
		--c5;
		c5--;
		System.out.println(c5);//5
		System.out.println("---------------");
		//混合使用
		int d5 = 5;
		int e5 = d5++;//先赋值后自增(++在后就后自增)//--同理
		System.out.println(e5);//5
		System.out.println(d5);//6
		e5 = ++d5;//先自增再赋值(++在前就先自增)//--同理
		System.out.println(e5);//7
		System.out.println(d5);//7
		
		System.out.println("-----------------");
		
		//赋值运算=(含有隐式强制转换)
		int a6 = 10;//把等号=右边的数值赋值给等号左边的变量
		short b6 = 5;
		b6 +=10;//b6 = (short)(b6+10)
		System.out.println(b6);//15
		b6 -= 8.0;//b6 = (short)(b6-8)//在运算中结果先是double类型然后强转为short类型
		System.out.println(b6);//7
		b6 *=2.5;//b6 = (short)(b6*2)//运算工程中会转为double类型得到结果再强转为short类型
		System.out.println(b6);//17
		b6 /=3;//除法是整数类型的不会是浮点类型的结果
		System.out.println(b6);//4
		b6 %=3.0;//b6 = (short)(b6%3)//在运算中结果先是double类型然后强转为short类型
		System.out.println(b6);//1
		
		System.out.println("------------");
		//比较运算符:> >= < <= == !=
		//==判断两个数值类型的数据数据是否相等,在面向对象中是判断两个变量是否管理同一个对象
		//=:是赋值运算符
		//逻辑运算于短路逻辑运算
		//&(与),|(或),!(非),&&(短路与),||(短路或)
		System.out.println(3<4&4<5);//true//&两边的Boolean类型结果都是true才为true
		System.out.println(3>4&4<5);//false
		System.out.println(3<4&4>5);//false
		System.out.println(3>4&4>5);//false
		System.out.println("---------------");
		System.out.println(3<4|4<5);//true
		System.out.println(3<4|4>5);//true
		System.out.println(3>4|4<5);//true
		System.out.println(3>4|4>5);//false//|两边的Boolean类型的结果都是false才是false
		System.out.println("---------------");
		System.out.println(!(3>5));//true
		System.out.println("短路运算");
		int a7 = 10;
		int b7 = 8;
		System.out.println(a7<b7&&a7<b7);//false//&&两边同为true才为true,如果前半部分为false结果为false,不用判断后半部分是否为true
		
		System.out.println("---------------");
		System.out.println(a7>b7&&a7<b7);//false
	
		System.out.println(a7<b7&&a7>b7);//false
		
		System.out.println(a7>b7&&a7<b7);//false
		System.out.println("**************");
		int x=2;
		x--;
		System.out.println(a7<b7&&(1<x++));//前面为false结果为false不会执行后面的判断
		System.out.println(x);//1
		System.out.println(false||a7<b7);//false//||前后都为false结果为false
		System.out.println(true||(1<x++));//true//前面为true结果就为true,不用判断后面的
		System.out.println(x);//1
		System.out.println("+++++++++++++++++");
		int a8 = 10;
		int b8 = 20;
		int max = a8>b8?a8:b8;//如果为true就把a8赋值给max,否则就把b8赋值给max
		
		// a>b?a:b;//错误写法
		System.out.println(max);
		System.out.println("最大值为:"+(a8>b8?10:20));//直接打印三元运算符
		
		System.out.println("----------------------");
		
		int score = 100;
		String str = score>60?"你的成绩及格了":"你的成绩不及格";
		System.out.println("结果为:"+str);
		System.out.println(score>60?"你的成绩及格了":"你的成绩不及格");//直接打印三元运算符
		
		System.out.println("----------------------");
		
		int x1 = 23;
		char y1 = '美';//char类型参与运算会默认转换为int类型,转换规则见ACSII编码表
		double z = (float)(x1-y1);//低等的数据范围类型会默认转向高等的数据范围类型(向更大的数据范围类型转换)
		System.out.println(z);
		float str1 = x1-y1;
		
		System.out.println("--------------------------");
		
		System.out.println(str1);
		
	}
	
}

Java第三天学习内容链接:

https://blog.csdn.net/LJN951118/article/details/88703702

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值