本章节用于回顾Java基础,包含了Java特性、数据类型、运算符和控制流语句相关知识。
一、Java特性
1.什么是Java?
Java是Sun公司于1995年发布的一种面向对象的编程语言和计算平台。
Java语言三个平台版本:
- JavaSE(J2SE)(Java2 Platform Standard Edition,Java 平台标准版)
- JavaEE(J2EE)(Java2 Platform, Enterprise Edition,Java平台企业版)
- JavaME(J2ME)(Java2 Platform Micro Edition,Java平台微型版)
2.Java特性
简单性 安全性 面向对象 高性能 编译性 解释性 分布式处理 健壮性 开源 跨平台
- 面向对象
万物皆对象!面向对象是一种以过程为中心的编程思想。举例说明:如果把学生当作一个对象,那么可以通过相关的属性和功能进行描述,通过相关的编码进行实现。属性:姓名、年龄、性别、年级.......功能比如:吃饭、上课、考试........
- 跨平台
一次编写,处处运行。
Java的程序源文件是.java文件,Eclipse或者IDEA将Java文件编译成.class字节码文件,然后把.class字节码文件打成.jar文件,那么就可以在Windows、Mac OS、Linux系统下运行了。不同的操作系统有不同的JVM实现,但是在切换平台的时候,是不需要再重新编译Java代码了。
3.Java环境配置
- JDK:Java开发工具包-----开发的最小单位;
- JRE:Java运行是环境-----运行的最小单位;
- JVM:Java虚拟机----负责加载并运行.class字节码文件。
环境配置比较简单,可参考教程很多,注意好路径就好了。
二、Java基本语法
1.数据类型
Java的数据类型分为两种,基本数据类型和引用数据类型,基本数据类型有四类八种,剩下的都属于引用类型。
(1)基本数据类型
类型名称
|
字节空间
|
取值范围
|
默认值
| |
整数型
| byte |
1位=8bits
|
-2^7~2^7 -1或-128~127
|
0
|
short
|
2位=16bits
|
-2^15 ~2^15 -1
|
0
| |
int
|
4位=32bits
|
-2^31 ~2^31 -1
|
0
| |
long
|
8位=64bits
|
-2^63 ~2^63 -1
|
0L
| |
浮点型
|
double
|
4位=32bits
|
单精度,对小数部分精度要求不高
|
0.0f
|
float
|
8位=64bites
|
双精度,对小数部分要求高且操作值大
|
0.0d
| |
字符型
|
char
|
2位=16bits
|
0~65535
|
\u0000
|
布尔类型
|
boolean
|
1位=8bits
|
真true 假false
|
false
|
(2)基本类型的字面值
- 整数类型的字面值类型是int类型;
- 浮点数类型的字面值类型是double类型;
- byte、short、char三种比int小的整数可以用范围内的值直接赋值;
- 字面值后缀L D F;
- 进制前缀-----0b 二进制;0 八进制; 0x 16进制
/**本类用于测试基本类型的字面值规则*/
public class Demo1 {
public static void main(String[] args) {
/**1.整数类型的字面值类型为int*/
int x = 9999;
//byte y = 300;
long g = 99999999999999L;//如果要定义long类型的数据,需要在后面加后缀L
/**2.浮点型类型的字面值类型为double*/
double d = 3.14;
//float f = 3.14;报错,3.14认为自己是double类型
float f = 3.14F;
double d2 = 3D;//如果整型数字向要表示自己为小数,可以加后缀D
System.out.println(d2);
/**3.byte short char三种比int小的类型,可以使用范围内的值直接赋值*/
/** 4.字面值后缀L-long D-double F-float*/
long m = 99999999L;//字面值为int,加了后缀L变为long
float n = 3.26F;//字面值为double,后加了后缀F变为float
double q = 4D;//字面值为int,后加了后缀D变为double类型
/**5.进制的前缀:2进制:0b 8进制:0 16进制:0x*/
System.out.println(100);
System.out.println(0b100);
System.out.println(0100);
System.out.println(0x100);
}
}
2.数据类型的转换
(1)转换规则
隐式转换:小到大,直接转 byte->short->int->long->(float)->double char->int->float->double
显示转换:大到小,强制转
注意:
- 转换过程中可以导致溢出或者精度损失;
- 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入;
- 不能对boolean类型转换;
/**本类用于测试类型转换*/
public class Demo2 {
public static void main(String[] args) {
/**1.小到大,直接转*/
byte a = 120;
int b = a;
/**2.大到小,强制转*/
float f = 3.14F;
double d = f;
int x1 = 120;
int x2 = 128;
byte y1 = (byte)x1;
byte y2 = (byte)x2;//超出范围,会溢出
System.out.println(y1);
System.out.println(y2);
/**3.浮点数,小数没*/
double dd = 9.99;
int ii = (int)dd;
System.out.println(ii);
}
}
(2)运算规则
- 计算结果的数据类型,与最大数据类型一致---int/double=double;
- byte short char 三种比int小的整数,运算时会先自动转换成int;
- 整数运算溢出(超过数据类型的范围);
- 浮点数运算不精确;
- 浮点数运算的特殊值 infinity NaN;
/**本类用于测试运算规则*/
public class Demo3 {
public static void main(String[] args) {
/**1.运算结果的数据类型,与参与的最大类型保持一致*/
System.out.println(3/2);//1
System.out.println(3/2D);//1.5
/**2.byte short char 3种比int小的类型,运算时会先自动提升成int,再参与运算*/
byte b1 = 1;
byte b2 = 2;
byte b3 = (byte)(b1+b2);
System.out.println(b3);//3
/**3.整数运算溢出问题*/
//光跑一年跑多远
System.out.println(3000000000L*3600*24*365);//94608000000000000
/**4.浮点数运算不精确的现象*/
System.out.println(1-0.8);//0.19999999999999996
/**5.浮点数的特殊值*/
System.out.println(3.14/0);//Infinity
System.out.println(0.0/0);//不是数NaN
}
}
3.运算符
运算符
| ||
运算符种类
|
写法
|
作用
|
算术运算符
|
+ - * /
|
基本四则运算;
|
%
|
取余数;
| |
--
|
自减运算,a--或者--a,两种都相当于a=a-1;但是执行时机不一样;
| |
++
|
自增运算,a++或者++a,两种都相当于a= a+1执行 时机不同。
| |
比较运算符
|
>、<、>=、<=
|
基本比较运算符;
|
==
|
比较两个操作数是否相当,若相等,返回true,不等返回false;
| |
!=
|
比较两个值是否不等,不等就返回true,相等结果false;
| |
逻辑运算符
|
&
|
逻辑与,两边真才真;
|
&&
|
短路与,一边为false,结果返回false,但是如果 左边返回false, 结果直接false,右边不再进行判断;
| |
|
|
逻辑或,一边为true,结果为true;
| |
||
|
短路或,一边为true,结果为true, 返回true,停止运行;
| |
+
|
字符串连接;
| |
!
|
非,非真是假, 非假是真;
| |
三目运算符
|
?:
|
1 ? 2 :3
|
1的位置是表达式,2和3作为选择条件
| ||
如果1为真则取2,1为假取3;
| ||
=
|
赋值语句
| |
+= -=
|
复合运算;
| |
*= /=
|
复合运算;
|
三、控制流语句
1.条件语句
(1)if条件语句
import java.util.Scanner;
/**本类用作运算符的综合案例*/
//需求:接收用户输入的年份,判断是平年还是闰年
//补充:闰年的判断条件
//条件1:能被4整除,并且不能被100整除
//条件2:能被400整除
public class TestYear {
public static void main(String[] args) {
System.out.print("请输入要判断的年份:");
int year = new Scanner(System.in).nextInt();
String result = "平年";
// if(year % 400 ==0) {
// result = "闰年";
// }
// if(year % 4 ==0) {
// if(year %100 !=0) {
// result = "闰年";
// }
// }
if(year % 400 ==0 || year % 4 == 0 & year % 100 != 0) {
result = "闰年";
}
System.out.println(year+"年是"+result);
}
}
(2)if......else条件语句
/**本类用于复习分支结构*/
public class TestIF {
public static void main(String[] args) {
/**多分支结构*/
char gender = '男';
if(gender == '男') {
System.out.println("是男生");
}else{
System.out.println("是女生");
}
}
}
(3)if.....else if多分支语句
import java.util.Scanner;
/**此类用于练习嵌套分支结构*/
public class TestScore {
public static void main(String[] args) {
System.out.print("请输入该同学的成绩:");
int score = new Scanner(System.in).nextInt();
//数据的合理性校验
if(score < 0 || score > 100) {
System.out.println("您输入的数据不合法!");
}else {
if(score >= 90) {
System.out.println("该同学分数为"+score+",优秀");
}else if(score >= 80 ) {
System.out.println("该同学分数为"+score+",好");
}else if(score >= 70) {
System.out.println("该同学分数为"+score+",良好");
}else if(score >= 60) {
System.out.println("该同学分数为"+score+",及格");
}else{
System.out.println("该同学分数为"+score+",不及格");
}
}
}
}
(4)switch多分支语句
/**本类用于练习选择结构switch*/
/**变量a的类型支持byte short char int string
* 1.执行顺序:会拿着变量a的值依次与每个case后的值做比较
* 2.如果相等,会执行当前case后的操作,包括default选项
* 3.也就是说如果不加break,只要匹配到case,就会一直执行剩余
* 所有的选项,包括default,我们把这个现象称为"穿透"现象
* 4.如果设置了default,并且没有任何case被匹配到,就会执行default保底选项*/
public class TestSwitch {
public static void main(String[] args) {
int a = 2;
switch(a) {
case 1: System.out.println(1); break;
case 2: System.out.println(2); break;
case 3: System.out.println(3); break;
case 4: System.out.println(4); break;
case 5: System.out.println(5); break;
default : System.out.println(0);
}
}
}
2.循环语句
(1)while循环
import java.util.Random;
import java.util.Scanner;
/**本类用于测试循环结构while*/
public class TestWhile {
public static void main(String[] args) {
int r = new Random().nextInt(100);
System.out.println(r);
while(true) {
System.out.print("猜猜看:");
int input = new Scanner(System.in).nextInt();
if(input > r) {
System.out.println("猜大了,继续猜猜看~");
}else if(input < r) {
System.out.println("猜小了,大胆点儿");
}else if(input == r) {
System.out.println("恭喜你,猜对了!!!");
break;
}
}
}
}
(2)do .....while循环
import java.util.Random;
/**本类用于测试循环结构do - while*/
public class TestDoWhile {
public static void main(String[] args) {
int n;
do {
System.out.println("循环体");
n = new Random().nextInt(300);
System.out.println(n);
}while(n > 100);
}
}
(3)for循环
/**本类用于测试99乘法表*/
public class TestFor99Excel {
public static void main(String[] args) {
for(int i = 1; i <=9 ;i++) {
for(int j = 1; j <= i;j++) {
System.out.print(i+"*"+j+"="+(i*j)+"\t");
}
System.out.println();
}
}
}
注意:
循环之间的比较:
- 如果想明确知道循环的次数/需要设置循环变量的的变化情况时--使用for循环;
- 如果想写死循环---while(true){};
- 如果需要先执行一次,再做判断----do-while;
- 循环之间是可以互相替代的,但是最好使用比较合适的循环结构。
3.跳转语句
(1)continue
退出本轮循环,进入下一次循环,循环并未完全结束。
(2)break
强行退出当前循环。
(3)return
是一个方法的返回,并把控制权交给调用它的语句。