关于Java语言基础知识同学们需要学会什么?
一.类型转换
1.自动类型转换
什么是自动类型转换,为什么要学习自动类型转换?
类型范围小的变量,可以直接赋值给类型范围大的变量。
package com.wjh.hello;
public class Hello {
public static void main(String[] args) {
byte a = 55;
int b=a; //发生了自动类型转换
System.out.println(a); //55
System.out.println(b); //55
}
}
package com.wjh.hello;
public class Hello {
public static void main(String[] args) {
byte a = 55;
int b=a; //发生了自动类型转换
System.out.println(a); //55
System.out.println(b); //55
int age=23;
double age2=age; //发生了自动类型转换
System.out.println(age); //23
System.out.println(age2); //23.0
char c='a'; //00000000 01100001
int c2=c; //00000000 00000000 00000000 01100001
System.out.println(c); //a
System.out.println(c2); //97
}
}
2.表达式的自动类型转换
表达式的自动类型转换
在表达式中,小范围类型的变量会自动转换成当前较大范围的类型再运算。
注意事项:
表达式的最终结果类型由表达式中的最高类型决定。
在表达式中,byte、short、char是直接转换成int类型参与运算的。
package com.wjh.hello;
public class Hello {
public static void main(String[] args) {
int a = 10;
int b = 20;
double c = 1.0;
double d = a + b + c; //发生了表达式类型转换
//int d2=a+b+c; //报错;原因:上面有double,大的范围的类型不能转换小的范围
System.out.println(d); //31.0
double e = a + b - 2.3;
System.out.println(e); //27.7
//面试题
byte i = 10;
byte j = 20;
//byte k = i+j; //报错,原因:byte是以int类型存储的,后面用byte是小的,应该用int及以上的
int k = i + j;
long kl=i+j;
double k2 = i + j;
System.out.println(k); //30
System.out.println(kl); //30
System.out.println(k2); //30.0
}
}
3.强制类型转换
场景
int a = 功能1();
功能2(byte b);
int a = 20;
byte b = a;//报错
问题
类型范围大的数据或者变量,不能直接赋值给类型范围小的变量,会报错。
数据类型变量2=(数据类型)变量1、数据
package com.wjh.hello;
public class Hello {
public static void main(String[] args) {
int a=20;
byte b=(byte)a;
int i=200;
byte j=(byte)i;
System.out.println(a); //20
System.out.println(b); //20
System.out.println(i); //200
System.out.println(j); //-56 //原因见下图
}
}
110011100 开头位为1,所以是负数(0正 1负)
注意事项
强制类型转换可能造成数据(丢失)溢出;
浮点型强转成整型,直接丢掉小数部分,保留整数部分返回。
package com.wjh.hello;
public class Hello {
public static void main(String[] args) {
double a=99.5;
int b=(int)a;
System.out.println(a); //99.5
System.out.println(b); //99 //强制类型转换,丢掉了小数部分
}
}
二.运算符
1.基本算数运算符
运算符
运算符:对字面量或者变量进行操作的符号。
package com.wjh.hello;
public class Hello {
public static void main(String[] args) {
int a=10;
int b=3;
System.out.println(a+b); //加
System.out.println(a-b); //减
System.out.println(a*b); //乘
System.out.println(a/b); //除
System.out.println(a%b); //取余
System.out.println(3/2); //1
System.out.println(3*1.0/2); //1.5
}
}
2.+符号做连接符
编程案例:三位数分别打印个位,十位,百位
package com.wjh.hello;
public class Hello {
public static void main(String[] args) {
//三位数分别打印个位,十位,百位
int a=123;
int g=a%10;
int s=a/10%10;
int b=a/100;
System.out.println(+a); //123
System.out.println("个位:"+g); //3
System.out.println("十位:"+s); //2
System.out.println("百位:"+b); //1
}
}
"+”做连接符
“+”符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串
3.自增自减运算符
注意:
++和--既可以放在变量的后边,也可以放在变量的前边。
++、--只能操作变量,不能操作字面量的。
package com.wjh.hello;
public class Hello {
public static void main(String[] args) {
int a=10;
a=a+1;
System.out.println(a);
a++;
System.out.println(a+"\n");
int b=5;
b=b-1;
System.out.println(b);
b--;
System.out.println(b);
}
}
自增自减的使用注意事项
++、--如果不是单独使用(如在表达式中、有问的月共白床1F) ,n人n一">放在变量的前面,先对变量进行+1、-1,再拿变量的值进行运算。
int a = 10;
int rs = ++a;
放在变量的后面,先拿变量的值进行运算,再对变量的值进行+1、-1
int b = 10;
int rs = b++j
package com.wjh.hello;
public class Hello {
public static void main(String[] args) {
//++ --在变量的后面 先+1 -1再使用
int i=10;
int j=++i;
System.out.println(i); //11
System.out.println(j); //11
System.out.println("--------------");
//++ --在变量的后面 先使用再+1 -1
int a=10;
int b=a++;
System.out.println(a); //11
System.out.println(b); //10
}
}
package com.wjh.hello;
public class Hello {
public static void main(String[] args) {
//拓展案例
int k=3;
int p=5;
//k 3
//p 5
//s
int s=k++ + ++k - --p - p-- - k-- + ++p + 2;
System.out.println(k); //3 4 5 4 //4
System.out.println(p); //5 4 3 4 //4
System.out.println(s); //3+5-4-4-5+4+2 //1
}
}
4.赋值运算符
基本赋值运算符
就是“=”
int a=10; //先看“=”右边,把数据10赋值给左边变量a存储
package com.wjh.hello;
public class Hello {
public static void main(String[] args) {
//学会使用赋值运算符:+= -= *= /=
int a=10;
int b=200;
//a=a+b;
a+=b;
System.out.println(a); //210
byte i=10;
byte j=20;
//i=(byte)(i+j);
i+=j;
System.out.println(i); //30
int m=10;
int n=5;
System.out.println(m*=n); //50
m=10;
n=5;
System.out.println(m-=n); //5
m=10;
n=5;
System.out.println(m/=n); //2
m=10;
n=5;
System.out.println(m%=n); //0
}
}
5.关系运算符
是对数据进行条件判断的符号,最终会返回一个比较的布尔结果(false,true)。
package com.wjh.hello;
public class Hello {
public static void main(String[] args) {
//学会使用赋值运算符:+= -= *= /=
int a=10;
int b=10;
boolean rs =a==b;
System.out.println(rs); //true
System.out.println(a==b); //true
System.out.println(a>b); //false
System.out.println(a<b); //false
System.out.println(a>=b); //true
System.out.println(a<=b); //true
System.out.println(a!=b); //false
int i=10;
int j=5;
System.out.println(i=j); //5
}
}
6.逻辑运算符
逻辑运算符概述
可以把多个条件的布尔结果放在一起运算,最终返回一个布尔结果。
全部结果〉屏幕尺寸:6.95英寸及以上×运行内存:8GB ×"手机"
package com.wjh.hello;
public class Hello {
public static void main(String[] args) {
double size=9.8;
double strong = 16;
System.out.println(size >= 6.95 & strong >= 8); //true
System.out.println(size >= 10 | strong >= 8); //true
System.out.println(false); //false
System.out.println(true); //true
System.out.println(!false); //true
System.out.println(!true); //false
System.out.println("-----------------&&-----------------");
int a = 10;
int b = 20;
System.out.println(a>100 && ++b>10); //false
System.out.println(b); //20 因为 && 左边为false,右边不执行
System.out.println("------------------||---------------");
int i = 10;
int j = 20;
System.out.println(i>2 || ++j > 10); //true
System.out.println(j); //20 因为 || 左边为true,右边不执行
}
}
短路逻辑运算符
注意∶逻辑与“ & ”、逻辑或“ | ”:无论左边是false还是true,右边都要执行。
7.三元运算符
三元运算符介绍
格式:
条件表达式?值1:值2;
执行流程:首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2。
package com.wjh.hello;
public class Hello {
public static void main(String[] args) {
System.out.println("-----定义三个整数,找出最大值在控制台上");
int temp;
int num1 = 78;
int num2 = 15;
int num3 = 75;
int max = num1 > num2 ? num1 : num2;
temp = max;
int max2 = max > num3 ? max : num3;
System.out.println(max2); //78
System.out.println("----------拓展知识---------");
int max1 = num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3 ? num2:num3);
System.out.println(max1); //78
}
}
8.运算符优先级
运算符优先级
在表达式中,哪个运算符先执行后执行是要看优先级的,例如“*、/”的优先级高于”+、-”。
package com.wjh.hello;
public class Hello {
public static void main(String[] args) {
//优先级
System.out.println(10 > 3 || 10 > 3 && 10 < 3); //true
System.out.println((10 > 3 || 10 > 3 )&& 10 < 3); //false
}
}
三.案例知识:键盘录入技术
需求:
请完成Java程序与用户交互,比如录入用户输入的名称、年龄,怎么办?。
APl (Application Programming Interface,应用程序编程接口)
Java写好的程序(功能代码),咱们可以直接调用。
Oracle 也为Java写好的程序提供了相应的API文档(技术使用说明书)。
下载API文档:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
键盘录入功能实现的三个步骤:
①:导包:告诉程序去JDK的哪个包中找扫描器技术
②:写一行代码代表得到键盘扫描器对象。
③:等待接收用户输入数据。
注意:
System、String在JDK中的Java.lang包下
lang包不需要我们导包,是默认的包。
package com.wjh.Scanner;
//1.导包操作(并不需要自己写,以后通过工具导入更方便)
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
//学会使用键盘录入技术
//2.得到一个键盘扫描对象
Scanner sc = new Scanner(System.in);
//3.调用sc对象的功能等待接受用户输入的数据
//这个代码会等待用户输入数据,直到用户输入并按回车键就会把数据拿到
System.out.println("请输入您的年龄:");
int age = sc.nextInt(); //nextInt返回一个int类型
System.out.println("年龄是:"+age);
System.out.println("请输入您的姓名:");
String name = sc.next(); //nextInt返回一个String类型
System.out.println("您的姓名是:"+name);
}
}