Java基础语法
约 3888 字大约 13 分钟
(1)基本数据类型
1. 整数类型
package model1.unit1;
public class Java01 {
public static void main(String[] args) {
// byte(8)、short(16)、int(32)、long(64)
// 相同点都可以存储整数。不同点是存储范围由小到大。
// byte字节(-128)(127)
byte a = 1;
System.out.println(a);
System.out.println(Byte.MIN_VALUE);
System.out.println(Byte.MAX_VALUE);
// short短整型(-32768)(32767)
short b = 2;
System.out.println(b);
System.out.println(Short.MIN_VALUE);
System.out.println(Short.MAX_VALUE);
// int整型(默认的整数类型)(-2147483648)(2147483647)
int c = 2147483647;
System.out.println(c);
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);
// long长整型(-9223372036854775808)(9223372036854775807)
long d = 4;
System.out.println(d);
System.out.println(Long.MIN_VALUE);
System.out.println(Long.MAX_VALUE);
}
}
2. 浮点数类型
package model1.unit1;
public class Java02 {
public static void main(String[] args) {
// float(32)、double(64)
// 相同点都可以存储小数、不同点存储范围由小到大。
// float单精度浮点数(1.4E-45)(3.4028235E38)
// 用float存储小数的时候必须以F或f结尾
float a = 1.23F;
System.out.println(a);
System.out.println(Float.MIN_VALUE);
System.out.println(Float.MAX_VALUE);
// double双精度浮点数(默认的浮点数类型)(4.9E-324)(1.7976931348623157E308)
double b = 1.2345;
System.out.println(b);
System.out.println(Double.MIN_VALUE);
System.out.println(Double.MAX_VALUE);
}
}
3. 字符类型和布尔类型
package model1.unit1;
public class Java03 {
public static void main(String[] args) {
// char单字字符
// 注意:单引号
// 注意:只能存储一个字符
char a = '你';
System.out.println(a);
// boolean布尔类型
// 布尔类型的数据只有2个true/false
// true:真、正确、成功
// false:假、错误、失败
boolean b = false;
System.out.println(b);
}
}
4. 变量
package model1.unit1;
public class Java04 {
public static void main(String[] args) {
// 数据类型 变量 = 数据
// 变量可以存储什么数据取决于它前边的数据类型。
// 可以把变量理解为一个容器、容器中存储的数据。
// 容器中的数据是可以被修改的。变化的量。
int a = 3;
System.out.println(a);
a = 4;
System.out.println(a);
a = 5;
System.out.println(a);
a = 6;
System.out.println(a);
}
}
5. 常量
package model1.unit1;
public class Java06 {
public static void main(String[] args) {
// 被final关键字修饰叫做常量。常量的值是不能被修改的!
final int b = 9;
b = 1;
}
}
6. 类型转换:同类型
package model1.unit1;
public class Java07 {
public static void main(String[] args) {
// 相同数据类型之间的类型转换
// 低精度转换为高精度没问题、高精度转换为低精度需要强制类型转换
int a = 2;
long b = 3;
// b = a;
a = (int)b;
float c = 3.0F;
double d = 6.0;
d = c;
c = (float) d;
}
}
7. 类型转换:不同类型
package model1.unit1;
public class Java08 {
public static void main(String[] args) {
// 整数类型和浮点数类型之间的类型转换
// 整数类型转换为浮点类型没问题、浮点型转换为整型必须强制类型转换
long a = 3;
float b = 5.5F;
b = a;
a = (long)b;
System.out.println(a);
}
}
8. 类型转换:自动
package model1.unit1;
public class Java09 {
public static void main(String[] args) {
// 自动类型转换
// 不同数据类型运算、Java自动把所有低精度的转换为最高精度再进行运算
int a = 2;// double 2.0
long b = 3;// double 3.0
double c = 5;// double 5.0
double d = a + b + c;
System.out.println(d);
System.out.println(3 / 2.0);
}
}
9. 类型转换:整数和字符
package model1.unit1;
public class Java10 {
public static void main(String[] args) {
// int(32)和char(16)之间的类型转换
// 编码了解:UTF-8、GBK、GB2312、ISO8859-1等
// char->int:字符对应的编码
// int->char:编码对应的字符
char c = 'A';
int i = c;
System.out.println(i);
int x = 65;
char y = (char)x;
System.out.println(y);
}
}
10. 大数类:BigInteger
package model1.unit1;
import java.math.BigInteger;
public class Java13 {
public static void main(String[] args) {
// 整数存储范围超出long
long a = 9223372036854775807L;
System.out.println(a);
System.out.println(Long.MAX_VALUE);
BigInteger b = new BigInteger("922337203685477580781234");
System.out.println(b);
}
}
11. 大数类:BigDecimal
package model1.unit1;
import java.math.BigDecimal;
public class Java11 {
public static void main(String[] args) {
// 浮点计算可能出现误差
double a = 1.0;
double b = 0.9;
System.out.println(a - b);
BigDecimal x = new BigDecimal("1.0");
BigDecimal y = new BigDecimal("0.9");
System.out.println(x.subtract(y));
}
}
12. 大数类:BigDecimal
package model1.unit1;
import java.math.BigDecimal;
public class Java12 {
public static void main(String[] args) {
// 超出double存储范围
double a = 1.7976931348623157E308;
System.out.println(Double.MAX_VALUE);
BigDecimal b = new BigDecimal("1.7976931348623157E30891234");
System.out.println(b);
}
}
13. 数字下划线
package unit1;
public class Java10 {
public static void main(String[] args) {
// 数值字面量
// 整数或浮点数都允许在数字之间插入任意多个下划线、不会对数值产生影响
int a = 1_000_000;
System.out.println(a);
double b = 123_456_789.5_5_5;
System.out.println(b);
}
}
(2)运算符
1. 算数运算符
package model1.unit2;
public class Java01 {
public static void main(String[] args) {
System.out.println(3 + 2);
System.out.println(3 - 2);
System.out.println(3 * 2);
System.out.println(3 / 2);// 除
System.out.println(3 % 2);// 余数
}
}
2. 比较运算符
package model1.unit2;
public class Java02 {
public static void main(String[] args) {
// 运算结果都是布尔值true/false
System.out.println(3 > 2);
System.out.println(3 >= 2);
System.out.println(3 < 2);
System.out.println(3 <= 2);
System.out.println(3 == 2);// 相等
System.out.println(3 != 2);// 不相等
}
}
3. 逻辑运算符
package model1.unit2;
public class Java03 {
public static void main(String[] args) {
// &&逻辑与:表示并且的意思、要求两边条件同时满足。
System.out.println(true && false);
System.out.println(false && true);
System.out.println(true && true);// true
System.out.println(false && false);
// ||逻辑或:表示或者的意思、要求满足一个条件即可。
System.out.println(true || false);
System.out.println(false || true);
System.out.println(true || true);
System.out.println(false || false);// false
// !逻辑非:表示取反的意思。
System.out.println(!true);
System.out.println(!false);
}
}
4. 赋值运算符
package model1.unit2;
public class Java04 {
public static void main(String[] args) {
int a = 3;
System.out.println(a);
//a = a + 2;
a += 2;
System.out.println(a);
a -= 2;
System.out.println(a);
a *= 2;
System.out.println(a);
a /= 2;
System.out.println(a);
a %= 2;
System.out.println(a);
// 赋值运算符优点:简洁、自动类型转换
int c = 2;
double d = 5.5;
c += d;
System.out.println(c);
}
}
5. 自增自减运算符
package model1.unit2;
public class Java06 {
public static void main(String[] args) {
// ++自增1、--自减1
int a = 2;
System.out.println(a);
// a = a + 1;
// a += 1;
a++;
System.out.println(a);
a--;
System.out.println(a);
// ++放在运算表达式的前边:先自增、再参与运算
// ++放在运算表达式的后边:先参与运算、再自增
int b = 2;
int c = b++;
System.out.println(c);
}
}
6. 三目运算符
package model1.unit2;
public class Java08 {
public static void main(String[] args) {
// (true/false) ? (true的结果A) : (false的结果B)
// int a = (false ? 2 : 3);
// System.out.println(a);
int a = 2;
int b = 3;
int c = (a > b) ? a : b;
System.out.println(c);
int x = Math.max(5, 6);
System.out.println(x);
}
}
(3)流程控制语句
1. if分支语句
package model1.unit3;
public class Java01 {
public static void main(String[] args) {
// 流程控制语句
// 分支语句:if分支、switch分支
// 循环语句:for循环、while循环、do while循环
// (1)if分支语句
// 根据布尔值true/false来执行不同的分支的语句块
// 单分支的if语句(有可能不执行)
if (true) {
System.out.println(10);
}
if (false) {
System.out.println(20);
}
// 两分支的if语句(至少执行其中一个分支)
if (false) {
System.out.println(30);
} else {
System.out.println(40);
}
// 多分支的if语句(只执行其中一个分支)
if (false) {
System.out.println(50);
} else if (false) {
System.out.println(60);
} else {
System.out.println(70);
}
}
}
2. switch分支语句
package model1.unit3;
public class Java02 {
public static void main(String[] args) {
// (2)switch分支语句
// 根据具体数值(byte、short、int、char)来执行不同的分支
// break关键字表示跳出switch语句
int a = 35;
switch (a) {
case 1:{
System.out.println(1);
break;
}
case 2:{
System.out.println(2);
break;
}
case 3:{
System.out.println(3);
break;
}
default:{
System.out.println(100);
}
}
}
}
3. for循环语句
package model1.unit3;
public class Java03 {
public static void main(String[] args) {
// (3)for循环语句
// 执行流程
// A-B(t)-D-C-B(t)-D-C-B(f)-退出
// for (A;B;C) { D }
// 1...10
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
// 10...1
for (int i = 10; i > 0; i--) {
System.out.println(i);
}
}
}
4. while循环
package model1.unit3;
public class Java04 {
public static void main(String[] args) {
// (4)while循环
// A(t)-B-A(t)-B-A(f)-退出
// while (A) { B }
int i = 1;
while (i < 10) {
System.out.println(i);
i++;
}
}
}
5. do while循环
package model1.unit3;
public class Java05 {
public static void main(String[] args) {
// (5)do while循环
// while循环先判断再执行
// do while循环先执行再判断。至少执行一次。
// 1...10
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 10);
}
}
6. continue和break
package model1.unit3;
public class Java06 {
public static void main(String[] args) {
// continue关键字:终止循环中的一次直接执行下一次。
// break关键字:终止整个循环结束循环。注意只能退出当前一个循环。
// return关键字:return;表示代码返回终止。可以退出多重循环嵌套。
while (true) {
for (int i = 1; i < 11; i++) {
if (i == 3) {
// continue;
// break;
return;
}
System.out.println(i);
}
}
}
}
7. continue/break/return区别
package unit1;
public class Java01 {
public static void main(String[] args) {
// continue、break、return3个关键字
// continue:用于循环表示终止当前这一次循环直接执行下一次
// break:用于循环表示跳出当前整个循环
// 注意:在循环嵌套中只能跳出一层循环。还可用于switch语句跳出分支语句
// return:用于没有返回值的方法表示代码结束执行、可以跳出多层循环
// return:用于有返回值的方法表示返回结果、把结果返回到方法的调用处
while (true) {
for (int i = 1; i <= 10; i++) {
if (i == 3) {
// continue;
// break;
return;
}
System.out.println(i);
}
}
// int max = m(2, 3);
// System.out.println(max);
}
private static int m(int a, int b) {
return a > b ? a : b;
}
}
(4)数组
1. 创建数组
package model1.unit4;
public class Java01 {
public static void main(String[] args) {
// (1)创建数组
// []表示数组类型
// 数组的长度一旦创建就不能更改!
// 方式一:
int[] a = {5, 3, 2, 6};
// 方式二:
// new关键字:表示创建一个新的数组。
// [4]:表示这个数组的长度是4、数组中存储元素的个数
// 默认值:整数0、浮点数0.0、布尔false
int[] b = new int[4];
}
}
2. 元素的存取
package model1.unit4;
public class Java02 {
public static void main(String[] args) {
// 数组中每个元素都有一个对应的下标、元素的存取都必须通过下标实现。
// 元素的下标是从零开始计数的。注意区分元素和下标!
int[] a = {5, 2, 8, 6};
// 0 1 2 3
int c = a[0];
a[0] = a[3];
a[3] = c;
System.out.println(a[0]);
System.out.println(a[3]);
// int b = a[2];
// System.out.println(b);
// a[2] = 9;
// System.out.println(a[2]);
}
}
3. 数组的遍历
package model1.unit4;
public class Java03 {
public static void main(String[] args) {
// (3)数组的遍历
int[] a = {1, 2, 3, 4, 5};
// 方式一:
// 数组长度的属性:数组.length
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
// 方式二:
for (int b : a) {
System.out.println(b);
}
}
}
(5)方法
1. 没有返回值的方法
package model1.unit5;
public class Java01 {
public static void m1() {
System.out.println(1);
}
public static void m2(int a, double b, char c){
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
// 打印2个整数中的最大值
public static void m3(int a, int b) {
if (a > b) {
System.out.println(a);
} else {
System.out.println(b);
}
}
public static void main(String[] args) {
// 方法的分类:2种
// 没有返回值的方法:只需要实现功能即可。
// 有返回值的方法:不但需要实现功能、还必须有一个返回结果。
// (1)没有返回值的方法
// 定义:
// public static void 方法名字(参数列表) { 方法实现 }
// 调用:
// 方法名字(参数列表);
// 注意:参数的个数、类型、顺序完全一致。
m1();
m2(2, 3.5, '你');
m3(5, 9);
int[] x = {};
char y = ' ';
m4(x, y);
}
public static void m4(int[] x, char y){
}
}
2. 有返回值的方法
package model1.unit5;
public class Java02 {
public static int m1() {
return 100;
}
public static boolean m2(float a, double b) {
System.out.println(a);
System.out.println(b);
if (a < 10) {
return true;
} else {
return false;
}
}
public static void main(String[] args) {
// 有返回值的方法
// 定义:
// public static 返回类型 方法名字(参数列表) { 方法的实现 return 返回结果;}
// return关键字:返回的意思、把结果返回到方法的调用处。
// 调用:
// 返回类型 变量 = 方法名字(参数列表);
int a = m1();
System.out.println(a);
boolean b = m2(3.4F, 6.7);
System.out.println(b);
int max = m3(7, 3);
System.out.println(max);
}
// 返回2个变量中的最大值
public static int m3(int a, int b){
return (a > b) ? a : b;
}
}
3. 方法角色
package model1.unit5;
public class Java03 {
// 自定义方法的角色:实现方法实现功能的人
public static int m1(int c, int d) {
if (c > d) {
System.out.println(c);
return c;
}
System.out.println(d);
return d;
}
// 有返回值的方法:必须有返回值!
public static int m2(){
// 第一步:定义存储结果的变量
int result = 0;
// 第二步:把结果存储到变量中
// 第三步:返回存储结果的变量
return result;
}
public static void main(String[] args) {
// 在主方法中编写代码的角色:用户、使用方法调用方法的人
// 找出2个变量中的最大值?
int a = 2;
int b = 4;
int c = m1(a, b);
System.out.println(c);
}
}
4. 可变参数
package unit2;
import java.util.Arrays;
public class Java19 {
// 可变参数的本质是数组int[]
static void m1(int...arr) {
for (int a: arr) {
System.out.println(a);
}
}
// 可变参数的本质是数组int[]
static void m2(int a, char c, String...arr) {
for (String s: arr) {
System.out.println(s);
}
}
public static void main(String[] args) {
// 可变参数:数据类型...参数名
// 如果可变参数和其它参数一起使用、可变参数只能作为方法的最后一个参数
// 方法名(参数列表)
// 参数注意事项:参数个数、参数类型、参数顺序都要完全一致。
// 问题:需求中参数个数不固定、可变参数解决
m1(1,2,3,4,5,6);
m2(100, '你', "1","abc","xyz");
}
}
5. 方法的分类
package model2.unit2;
public class Java10 {
public static void main(String[] args) {
// 方法总结归纳:方法的分类
// 方法是否有返回结果:没有返回值的方法(void)、有返回值的方法(返回类型)
// 方法是否有参数:无参、有参
// 方法是否静态:静态方法(类的方法)、非静态方法(对象的方法)
// 方法是否实现:抽象方法、实现方法
// 方法的可见性:private、默认、protected、public
}
}
(6)编程思想
1. 循环嵌套
package model1.unit6;
public class Java01 {
public static void main(String[] args) {
// 分步骤拆分思想:把一个复杂问题拆分成多个步骤一个一个去解决。
// 打印数字矩阵
// 1
// 121
// 12321
// 1234321
// 123454321
// (1)输出第1行到第5行
for (int i = 1; i <= 5; i++) {
// (2)打印第i行的数字、递增
for (int j = 1; j <= i; j++) {
System.out.print(j);
}
// (3)打印第i行的数字、递减
for (int j = (i-1); j >= 1 ; j--) {
System.out.print(j);
}
// (4)换行
System.out.println();
}
}
}
2. 多维数组
package model1.unit6;
public class Java02 {
public static void main(String[] args) {
// 用一维数组的思想来理解多维数组
// 二维数组
int[][] a = {{1,2}, {3,4,5}};
for (int[] x:a) {
// 遍历x数组
for (int y:x) {
System.out.println(y);
}
}
//System.out.println(a[1][0]);// 分为2步实现
// 三维数组
int[][][] b = { {{1,2}}, {{3},{4}} };
for (int[][] t:b) {
// 数组t
for (int[] f:t) {
// 数组f
for (int k:f) {
System.out.println(k);
}
}
}
//System.out.println(b[1][0][0]);// 分为3步实现
}
}
3. 测试驱动开发
package model1.unit6;
public class Java03 {
public static void main(String[] args) {
// 开发角色和测试角色灵活转换
// 如果没有思路、难点考虑很久
// 可以从一个功能的实现者身份转换为一个需求者的身份
int[] arr = {4,5,6,7,8,9};
// (1)求数组中元素的偶数和
// (2)求数组中质数和(只能被1和它本身整除的数)
int x = 0;
for (int a:arr) {
// 提需求:需要一个方法、判断是否是质数、如果是返回true、不是返回false
if (m(a)) {
x += a;
}
}
System.out.println(x);
}
// 需要一个方法、判断是否是质数、如果是返回true、不是返回false
// 判断b是否是质数
public static boolean m(int b) {
for (int i = 2; i < b; i++) {
if (b % i == 0) {
return false;
}
}
return true;
}
}
4. 方法复用
package model1.unit6;
public class Java04 {
public static void main(String[] args) {
// 方法的复用:方法的重复使用、重复调用
// 返回2个数中的最大值
int a = 2;
int b = 3;
int x = 5;
int c = m(m(a, b), x);
System.out.println(c);
}
private static int m(int a, int b) {
return a > b ? a : b;
}
}