栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础语法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础语法

文章目录
  • Java基础语法 重点
  • 类型转换
    • 1,基本数据类型转换(Conversion)
    • 2,自动类型转换(隐式类型转换)
    • 3,强制类型转换(显示类型转换)
    • 4,特殊的数据类型转换
    • 5、练习
    • ==double与float**的区别**==
    • 6,补充 :Java的基本数据类型的存储范围
        • 1、整型系列
        • 2、浮点型系列(小数)
        • 3、单字符类型:char
        • 4、布尔类型
  • 运算符(Operator)
    • 1,**求余数运算**
    • 2,“+”号的两种用法
      • 练习
      • 练习:判断如下程序的运行结果
      • 面试题
      • 面试题
    • 条件运算符
  • 补充一些习题
    • 判断闰年

Java基础语法 重点 类型转换 1,基本数据类型转换(Conversion)

在Java程序中,不同的基本数据类型的值经常需要进行相互转换。Java语言所提供的七种数值类型之间可以相互转换,基本数据类型转换有两种转换方式:自动类型转换和强制类型转换。

2,自动类型转换(隐式类型转换)

自动转换:

  • 将取值范围小的类型自动提升为取值范围大的类型 。

基本数据类型的转换规则

小结:通过上面案例我们可以得出数据类型的转换关系(取值范围从小到大),如图所示:

(1)当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围大的变量时,

int i = 'A';//char自动升级为int
double d = 10;//int自动升级为double

byte b = 127; //右边的整数常量值必须在-128~127范围内
//byte bigB = 130;//错误,右边的整数常量值超过byte范围
long num = 1234567; //右边的整数常量值如果在int范围呢,编译和运行都可以通过,这里涉及到数据类型转换
long bigNum = 12345678912L;//右边的整数常量值如果超过int范围,必须加L,否则编译不通过

(2)当存储范围小的数据类型与存储范围大的数据类型一起混合运算时,会按照其中最大的类型运算

int i = 1;
byte b = 1;
double d = 1.0;

double sum = i + b + d;//混合运算,升级为double

(3)当byte,short,char数据类型进行算术运算时,按照int类型处理

byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2;//编译报错,b1 + b2自动升级为int

char c1 = '0';
char c2 = 'A';
System.out.println(c1 + c2);//113 

(4)boolean类型不参与

3,强制类型转换(显示类型转换)

将1.5 赋值到int 类型变量会发生什么?产生编译失败,肯定无法赋值。

int i = 3.14; // 错误

想要赋值成功,只有通过强制类型转换,将double 类型强制转换成int 类型才能赋值。

  • 强制类型转换:将取值范围大的类型强制转换成取值范围小的类型。

比较而言,自动转换是Java自动执行的,而强制转换需要我们自己手动执行。

转换格式:

数据类型 变量名 = (数据类型)被强转数据值;

(1)当把存储范围大的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围小的变量时,需要强制类型转换,提示:有风险,可能会损失精度或溢出

int i = (int)3.14;//强制类型转换,损失精度

double d = 1.2;
int num = (int)d;//损失精度

int i = 200;
byte b = (byte)i;//溢出

(2)boolean类型不参与

(3)当某个值想要提升数据类型时,也可以使用强制类型转换

int i = 1;
int j = 2;
double shang = (double)i/j;

提示:这个情况的强制类型转换是没有风险的。

4,特殊的数据类型转换

1、任意数据类型的数据与String类型进行“+”运算时,结果一定是String类型

System.out.println("" + 1 + 2);//12

2、但是String类型不能通过强制类型()转换,转为其他的类型

String str = "123";
int num = (int)str;//错误的
int num = Integer.parseInt(str);//后面才能讲到,借助包装类的方法才能转
5、练习
1、练习题:判断如下代码是否编译通过,如果能,结果是多少?
short s1 = 12;
short s2 = 8;
short s3 = s1 + s2; //编译报错,s1 + s2自动升级为int

不能 原因是 当byte,short,char数据类型进行算术运算时,按照int类型处理
		short s1 = 12;
        short s2 = 8;
        short s3 = (short) (s1 + s2);

2、练习题:判断如下代码是否编译通过,如果能,结果是多少?
short s1 = 12;
short s2 = 8;
byte s3 = (byte)(s1 + s2);

//          byte
//          占内存:1个字节
//          存储范围:-128~127 属于大转小
输出结果20



3、练习题:判断如下代码是否编译通过,如果能,结果是多少?
char c1 = '0';
char c2 = '1';
char c3 = c1 + c2;

不能通过 字符相加运算转变为int类型 需要转化为char 或者 int 输出 a  和 97 
		char c1 = '0';
        char c2 = '1';
        char c3 = (char)(c1 + c2);
        int  C3 = c1 + c2;
        System.out.println(c3);
        System.out.println(C3);
        


4、练习题:判断如下代码是否编译通过,如果能,结果是多少?
char c1 = '0';
char c2 = '1';
System.out.println(c1 + c2);

这种直接输出运算结果97 因为默认转换 为int 类型运算

5、练习题:判断如下代码是否编译通过,如果能,结果是多少?
int i = 4;
long j = 120; //因为右边120默认是int类型,int的值赋值给long类型是可以的,会自动类型转换,但是要求这个int值不能超过int的存储范围,如果超过int的存储范围必须加L.
double d = 34;
float f = 1.2;//因为右边1.2默认是double类型,double的值是不能直接赋值给float的,要么加F要么使用强制类型转换。

System.out.println(i + j + d + f);//最后是double






6、练习题:判断如下代码是否编译通过,如果能,结果是多少?
int i = 1;
int j = 2;
double d = i/j;
System.out.println(d);

输出结果 0.0



double与float的区别

由于第五题有些疑惑 原来是因为写小数默认为double类型

Java中的小数可以是double和float,默认是double,

默认小数为 double 类型,后面也可以加 D 或 d,但这纯属多此一举,如:1.0d,但因为是默认所以可以不加直接写出1.0

小数,如果要指明是float,须在后面加f ,如:1.0f

6,补充 :Java的基本数据类型的存储范围 1、整型系列

(1)byte:字节类型

  • 占内存:1个字节

  • 存储范围:-128~127

(2)short:短整型类型

  • 占内存:2个字节

  • 存储范围:-32768~32767

(3)int:整型

  • 占内存:4个字节

  • 存储范围:-2的31次方 ~ 2的31次方-1

(4)long:整型

  • 占内存:8个字节

  • 存储范围:-2的63次方 ~ 2的63次方-1

注意:如果要表示某个超过int范围的常量整数它是long类型,那么需要在数字后面加L

2、浮点型系列(小数)

(1)float:单精度浮点型

  • 占内存:4个字节

  • 精度:科学记数法的小数点后6~7位

注意:如果要表示某个常量小数是float类型,那么需要在数字后面加F或f,否则就是double类型

(2)double:双精度浮点型

  • 占内存:8个字节

  • 精度:科学记数法的小数点后15~16位

float f = 12.0F;//右边如果赋值小数常量值,那么必须加F或f
3、单字符类型:char
  • 占内存:2个字节
4、布尔类型

boolean:只能存储true或false

虽然计算机底层使用0和1表示false和true,但是在代码中不能给boolean类型的变量赋值0和1,只能赋值false和true

运算符(Operator) 1,求余数运算

模运算是指取模运算,即求m/n的余数。

 
 		System.out.println(3 % 4);// 3  4乘以0再加1等于3
 		System.out.println(5%2);//1    2乘以2再加1等于5
		System.out.println(5%-2);//1  -2乘以-2再加1等于5
		System.out.println(-5%2);//-1  
		System.out.println(-5%-2);//-1	
这个怎么有点绕
		//商*除数 + 余数 = 被除数
		//5%-2  ==>商是-2,余数时1    (-2)*(-2)+1 = 5
		//-5%2  ==>商是-2,余数是-1   (-2)*2+(-1) = -4-1=-5


2,“+”号的两种用法
  • 第一种:对于+两边都是数值的话,+就是加法的意思
  • 第二种:对于+两边至少有一边是字符串得话,+就是拼接的意思
public class OperatorDemo02 {
	public static void main(String[] args) {
		// 字符串类型的变量基本使用
		// 数据类型 变量名称 = 数据值;
		String str1 = "Hello";
		System.out.println(str1); // Hello
		
		System.out.println("Hello" + "World"); // HelloWorld
		
		String str2 = "Java";
		// String + int --> String
		System.out.println(str2 + 520); // Java520
		// String + int + int
		// String		+ int
		// String
		System.out.println(str2 + 5 + 20); // Java520
	}
}
练习

(1)获取一个四位数的个位,十位,百位,千位

解题要点 :充分利用 / 和 %

/消除最后一位数

%求得最后一位数

public class LianXi {

    public static void main(String[] args) {

        //1.定义一个四位数,例如1234
        int num = 1234;

        //2.通过运算操作求出个位,十位,百位,千位
        int ge = num%10;  //直接求出最后一位4
        int shi = num/10%10; //先把左后一位干掉 这时变为123 再用%求得最后一位3
        int bai = num/100%10; //同理 先把左后一位干掉 这时变为12 再用%求得最后一位2
        int qian = num/1000; //12 干掉2 就剩下1了

        System.out.println(num + "这个四位数个位上的数字是:" + ge);
        System.out.println(num + "这个四位数十位上的数字是:" + shi);
        System.out.println(num + "这个四位数百位上的数字是:" + bai);
        System.out.println(num + "这个四位数千位上的数字是:" + qian);
    }
}

练习:判断如下程序的运行结果
public static void main(String[] args){
	int a = 1;
	int b = 2;
	int c = 0;
	boolean flag = false;
	if(flag=true){
		c = a++ + b;
	}

	if(flag=false){
		c = ++a - b;
	}
	System.out.println("a = " + a);
	System.out.println("b = " + b);
	System.out.println("c = " + c);
}	

##  3,&&和&区别,||和|区别

  • **&&和&**区别:
    • &&和&结果一样,&&有短路效果,左边为false,右边不执行;&左边无论是什么,右边都会执行。
  • **||和|**区别:
    • ||和|结果一样,||有短路效果,左边为true,右边不执行;|左边无论是什么,右边都会执行。
面试题

注意 if语句进去了 但是不符合条件 就直接输出了

public class LogicExer1{
	public static void main(String[] args){
		int x = 1;
		int y = 1;

		//x==2 ,x++  false  x = 2 左边为false
		//右边继续
		//++y  y==2  y=2  y==2成立  右边为true
		//false & true 结果false
		if(x++==2 & ++y==2){
			x =7;
		}
		System.out.println("x="+x+",y="+y);//x=2,y=2
	}
}
public class LogicExer2{
	public static void main(String[] args){
		int x = 1,y = 1;

		//x==2,x++  左边条件为false,x=2
		//因为短路与,右边不算
		//false && ? 结果是false
		if(x++==2 && ++y==2){
			x =7;
		}
		System.out.println("x="+x+",y="+y);//x=2,y=1
	}
}
public class LogicExer3{
	public static void main(String[] args){
		int x = 1,y = 1;

		//x==1,x++  左边为true,x=2
		//因为是逻辑与,右边继续  
		//++y, y==1  y=2 右边为false
		//条件true | false,最终为true
		if(x++==1 | ++y==1){
			x =7;
		}
		System.out.println("x="+x+",y="+y);//x=7,y=2
	}
}	
public class LogicExer4{
	public static void main(String[] args){
		int x = 1,y = 1;

		//x==1,x++  左边为true,x=2
		//因为是短路或,左边为true,右边就不看了
		//整个条件为true
		if(x++==1 || ++y==1){
			x =7;
		}
		System.out.println("x="+x+",y="+y);//x=7,y=1

	}
}
面试题
class  Test4_2  {
	public static void main (String []  args)  {
		boolean x = true;
		boolean y = false;
		short z = 42;
		
		//如果if(y=true)条件成立,接着判断if((z++==42)&&(y==true))	z++;	
		//如果不成立,if((z++==42)&&(y==true))	z++;	不看的
		
		
		//标准
		//y=true赋值,y就被修改为true,if(true)成立
		if(y=true){
			//左边:z==42,z++  成立,z变成43
			//&&短路与,不满足短路的情况,右边继续
			//y==true 成立
			//true && true,结果为true
			if((z++==42)&&(y==true)){
				//z++变成44
				z++;
			}
		}
		//左边:x=false不成立
		//中间虽然是短路或,但是没满足短路的情况,右边继续
		//++z,z==45  ++z变成45,z==45成立
		if((x=false) || (++z==45)){
			//z++,变成46
			z++;
		}
		System. out.println("z="+z);//46
	}
}
条件运算符
  • 条件运算符格式:
条件表达式?结果1:结果2
  • 条件运算符计算方式:
    • 条件判断的结果是true,条件运算符整体结果为结果1,赋值给变量。
    • 判断条件的结果是false,条件运算符整体结果为结果2,赋值给变量。
public static void main(String[] args) {
    int i = (1==2 ? 100 : 200);
    System.out.println(i);//200
    int j = (3<=4 ? 500 : 600);
    System.out.println(j);//500
}
补充一些习题 判断闰年
public class Test09 {

	public static void main(String[] args) {
		int year = 2018;
		boolean result = year%4==0 && year%100!=0 || year%400==0;
		System.out.println(year + (result ? "是闰年" : "不是闰年"));
	}

}

i=0.2; 等于0*

如下代码的计算结果是:
int i = 1;
i *= 0.2;  
i++;
System.out.println("i=" + i);//i=1
如下代码的运算结果是:
int i = 2;
i *= i++;

int j = 2;
j *= j+1; 

int k = 2;
k *= ++k;

System.out.println("i=" + i);//i=4
System.out.println("j=" + j);//i=6
System.out.println("k=" + k);//i=6
	public static void main(String[] args) {
		int a = 8, b = 3;
		System.out.println(a>>>b);//1
		System.out.println(a>>>b | 2);//2
	}

8;
boolean result = year%40 && year%100!=0 || year%4000;
System.out.println(year + (result ? “是闰年” : “不是闰年”));
}

}

**i*=0.2;  等于0**

如下代码的计算结果是:
int i = 1;
i *= 0.2;
i++;
System.out.println(“i=” + i);//i=1





```java
如下代码的运算结果是:
int i = 2;
i *= i++;

int j = 2;
j *= j+1; 

int k = 2;
k *= ++k;

System.out.println("i=" + i);//i=4
System.out.println("j=" + j);//i=6
System.out.println("k=" + k);//i=6
	public static void main(String[] args) {
		int a = 8, b = 3;
		System.out.println(a>>>b);//1
		System.out.println(a>>>b | 2);//2
	}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572264.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号