Java-第一章-编程基础
Java作为计算机学生的必修课,我们将以一种基础且简单的方式,向大家介绍Java,带领大家一步一步学习Java语言!
因为Java与C语言的基础语法相似,我们之前已经学习过C语言,所以我们将会以很简单的方式和简单的示例来讲解Java的相关基础语法,但是在开始前我们还是要提醒各位,Java最难的部分并非基础语法,而是后续的JDBC、网络、面向对象这些内容,但是基础语法是基础中的基础,所以一定要认真学习哦!
Java是什么?
Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James Gosling和同事们共同研发,并在 1995 年正式推出。
后来 Sun 公司被 Oracle (甲骨文)公司收购,Java 也随之成为 Oracle 公司的产品。
Java分为三个体系:
- JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)
- JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版)
- JavaME(J2ME)(Java 2 Platform Micro Edition,java平台微型版)。
2005 年 6 月,JavaOne 大会召开,SUN 公司公开 Java SE 6。此时,Java 的各种版本已经更名,以取消其中的数字 “2”:J2EE 更名为 Java EE,J2SE 更名为Java SE,J2ME 更名为 Java ME。
Java的特点是什么?
- Java 语言是简单的:Java 语言的语法与 C 语言和 C++ 语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java 丢弃了 C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java 语言不使用指针,而是引用。并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧。
- Java 语言是面向对象的:Java 语言提供类、接口和继承等面向对象的特性,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为 implements)。Java 语言全面支持动态绑定,而 C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。
- Java语言是分布式的:Java 语言支持 Internet 应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括 URL、URLConnection、Socket、ServerSocket 等。Java 的 RMI(远程方法激活)机制也是开发分布式应用的重要手段。
- Java 语言是健壮的:Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。对指针的丢弃是 Java 的明智选择。Java 的安全检查机制使得 Java 更具健壮性。
- Java语言是安全的:Java通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。除了Java 语言具有的许多安全特性以外,Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。
- Java 语言是体系结构中立的:Java 程序(后缀为 java 的文件)在 Java 平台上被编译为体系结构中立的字节码格式(后缀为 class 的文件),然后可以在实现这个 Java 平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。
- Java 语言是可移植的:这种可移植性来源于体系结构中立性,另外,Java 还严格规定了各个基本数据类型的长度。Java 系统本身也具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。
- Java 语言是解释型的:如前所述,Java 程序在 Java 平台上被编译为字节码格式,然后可以在实现这个 Java 平台的任何系统中运行。在运行时,Java 平台中的 Java 解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
- Java 是高性能的:与那些解释型的高级脚本语言相比,Java 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越接近于 C++。
- Java 语言是多线程的:在 Java 语言中,线程是一种特殊的对象,它必须由 Thread 类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为 Thread(Runnable) 的构造子类将一个实现了 Runnable 接口的对象包装成一个线程,其二,从 Thread 类派生出子类并重写 run 方法,使用该子类创建的对象即为线程。值得注意的是 Thread 类已经实现了 Runnable 接口,因此,任何一个线程均有它的 run 方法,而 run 方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java 语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为 synchronized)。
- Java 语言是动态的:Java 语言的设计目标之一是适应于动态变化的环境。Java 程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java 中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
Java 程序的基本结构
Java 程序有固定的编写规范,一个最基础的可运行 Java 程序结构如下:
1.语法规则
- Java 程序的基本单位是类(class),代码必须写在类里面
- 类名必须和文件名一致(大小写也要相同),且首字母建议大写
- 程序入口是
main方法(固定格式:public static void main(String[] args)) - 语句以分号
;结束,代码块用大括号{}包裹
示例
// 单行注释:这是一个基础的Java程序结构示例/* * 多行注释: * HelloWorld 是类名,必须和文件名 HelloWorld.java 一致 */public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, Java!"); }}运行说明
- 将代码保存为
HelloWorld.java - 打开命令行,进入文件所在目录
- 执行编译命令:
javac HelloWorld.java(生成字节码文件) - 执行运行命令:
java HelloWorld(输出:Hello, Java!)
运行效果
Hello, Java!基本数据类型
Java 数据类型分为基本数据类型(8种)和引用数据类型,基本数据类型是构成程序的基础,直接存储数值。
1.byte 类型
基础语法:byte 是8位有符号整数类型,取值范围 -128 ~ 127,占用1个字节,常用于节省内存(如存储文件流、网络数据)。
示例:
public class ByteDemo { public static void main(String[] args) { byte age = 20; System.out.println("byte类型变量age的值:" + age); // 测试取值范围(超过范围会编译报错) // byte error = 128; // 编译报错:数值超出byte范围 }}运行效果:
byte类型变量age的值:202.short 类型
基础语法:short 是16位有符号整数类型,取值范围 -32768 ~ 32767,占用2个字节,适用于小整数场景。
示例:
public class ShortDemo { public static void main(String[] args) { short score = 95; System.out.println("short类型变量score的值:" + score); }}运行效果:
short类型变量score的值:953.int 类型
基础语法:int 是32位有符号整数类型,取值范围 -2^31 ~ 2^31-1(约±21亿),占用4个字节,是Java中最常用的整数类型。
示例:
public class IntDemo { public static void main(String[] args) { int num = 100000; System.out.println("int类型变量num的值:" + num); }}运行效果:
int类型变量num的值:1000004.long 类型
基础语法:long 是64位有符号整数类型,取值范围 -2^63 ~ 2^63-1,占用8个字节,用于存储大整数(如时间戳),定义时需加后缀 L/l。
示例:
public class LongDemo { public static void main(String[] args) { long timestamp = 1741000000000L; System.out.println("long类型变量timestamp的值:" + timestamp); }}运行效果:
long类型变量timestamp的值:17410000000005.float 类型
基础语法:float 是32位单精度浮点数,占用4个字节,定义时需加后缀 F/f,适用于精度要求不高的小数场景。
示例:
public class FloatDemo { public static void main(String[] args) { float price = 9.9F; System.out.println("float类型变量price的值:" + price); }}运行效果:
float类型变量price的值:9.96.double 类型
基础语法:double 是64位双精度浮点数,占用8个字节,是Java默认的小数类型,精度高于float。
示例:
public class DoubleDemo { public static void main(String[] args) { double pi = 3.1415926535; System.out.println("double类型变量pi的值:" + pi); }}运行效果:
double类型变量pi的值:3.14159265357.char 类型
基础语法:char 是16位字符类型,占用2个字节,存储单个字符(Unicode编码),用单引号 '' 包裹。
示例:
public class CharDemo { public static void main(String[] args) { char ch = 'A'; System.out.println("char类型变量ch的值:" + ch); }}运行效果:
char类型变量ch的值:A8.boolean 类型
基础语法:boolean 表示布尔值,只有 true(真)和 false(假)两个值,占用1个字节,常用于条件判断。
示例:
public class BooleanDemo { public static void main(String[] args) { boolean isSuccess = true; System.out.println("boolean类型变量isSuccess的值:" + isSuccess); }}运行效果:
boolean类型变量isSuccess的值:true运算符
运算符是用于执行运算的符号,Java 运算符主要分为算术、赋值、比较、逻辑、位运算符等,以下是常用类型:
1.算术运算符
基础语法:包括 +(加)、-(减)、*(乘)、/(除)、%(取余)、++(自增)、--(自减)。
示例:
public class ArithmeticDemo { public static void main(String[] args) { int a = 10, b = 3; System.out.println("a + b = " + (a + b)); System.out.println("a - b = " + (a - b)); System.out.println("a * b = " + (a * b)); System.out.println("a / b = " + (a / b)); System.out.println("a % b = " + (a % b)); System.out.println("a++ = " + (a++)); System.out.println("++a = " + (++a)); }}运行效果:
a + b = 13a - b = 7a * b = 30a / b = 3a % b = 1a++ = 10++a = 122.赋值运算符
基础语法:基础赋值 =,复合赋值 +=、-=、*=、/=、%=。
示例:
public class AssignDemo { public static void main(String[] args) { int x = 5; x += 3; // 等价于 x = x + 3 System.out.println("x += 3 后的值:" + x); x *= 2; // 等价于 x = x * 2 System.out.println("x *= 2 后的值:" + x); }}运行效果:
x += 3 后的值:8x *= 2 后的值:163.比较运算符
基础语法:==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于),返回布尔值。
示例:
public class CompareDemo { public static void main(String[] args) { int m = 8, n = 8; System.out.println("m == n:" + (m == n)); System.out.println("m > n:" + (m > n)); }}运行效果:
m == n:truem > n:false4.逻辑运算符
基础语法:&&(短路与)、||(短路或)、!(非),操作布尔值,短路特性:&& 左边为false时右边不执行,|| 左边为true时右边不执行。
示例:
public class LogicDemo { public static void main(String[] args) { boolean flag1 = true, flag2 = false; System.out.println("flag1 && flag2:" + (flag1 && flag2)); System.out.println("flag1 || flag2:" + (flag1 || flag2)); System.out.println("!flag1:" + (!flag1)); }}运行效果:
flag1 && flag2:falseflag1 || flag2:true!flag1:false输入与输出(I/O)
1.输出
最常用的两种输出方式:
| 语法 | 说明 | 示例 |
|---|---|---|
System.out.println() | 输出内容后换行 | System.out.println("换行输出"); |
System.out.print() | 输出内容后不换行 | System.out.print("不换行输出"); |
System.out.printf() | 输出格式化内容后不换行 | System.out.printf("%d\n",a); |
2.输入
需要导入 java.util.Scanner 类,步骤:
- 导入 Scanner 类(写在类定义上方)
- 创建 Scanner 对象
- 使用 Scanner 的方法读取不同类型的数据
- 关闭 Scanner
示例
import java.util.Scanner;
public class InputOutputDemo { public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("=== Java输入输出示例 ===");
System.out.print("请输入你的姓名:"); String name = scanner.next();
System.out.print("请输入你的年龄:"); int age = scanner.nextInt();
System.out.print("请输入你的身高(米):"); double height = scanner.nextDouble();
System.out.println("\n你的信息:"); System.out.println("姓名:" + name); System.out.println("年龄:" + age + "岁"); System.out.println("身高:" + height + "米");
scanner.close(); }}运行效果
=== Java输入输出示例 ===请输入你的姓名:张三请输入你的年龄:20请输入你的身高(米):1.75
你的信息:姓名:张三年龄:20岁身高:1.75米条件判断结构
1.if 语句
基础语法
if (条件表达式) { // 条件为true时执行的代码}示例
public class IfDemo { public static void main(String[] args) { int score = 85;
if (score >= 60) { System.out.println("成绩及格!"); System.out.println("你的分数是:" + score); } }}运行效果
成绩及格!你的分数是:852. if-else 语句
语法
if (条件表达式) { // 条件为true时执行} else { // 条件为false时执行}示例
public class IfElseDemo { public static void main(String[] args) { int score = 55;
if (score >= 60) { System.out.println("成绩及格!"); } else { System.out.println("成绩不及格,需要补考!"); } }}运行效果
成绩不及格,需要补考!3.if-else if-else 语句
语法
if (条件1) { // 条件1为true时执行} else if (条件2) { // 条件2为true时执行} else { // 所有条件都为false时执行}示例
public class IfElseIfDemo { public static void main(String[] args) { int score = 88;
if (score >= 90) { System.out.println("优秀"); } else if (score >= 80) { System.out.println("良好"); } else if (score >= 70) { System.out.println("中等"); } else if (score >= 60) { System.out.println("及格"); } else { System.out.println("不及格"); } }}运行效果
良好4.switch 语句
适用于固定值匹配的场景(如:数字、字符串),比多层 if-else 更简洁。
语法
switch (表达式) { case 值1: // 表达式等于值1时执行 break; // 跳出switch(必须加,否则会穿透到下一个case) case 值2: // 表达式等于值2时执行 break; // 更多case... default: // 表达式不匹配任何case时执行 break;}示例
public class SwitchDemo { public static void main(String[] args) { int week = 3;
switch (week) { case 1: System.out.println("星期一:开始上班"); break; case 2: System.out.println("星期二:努力搬砖"); break; case 3: System.out.println("星期三:再坚持两天"); break; case 4: System.out.println("星期四:快周末了"); break; case 5: System.out.println("星期五:准备放假"); break; case 6: case 7: System.out.println("周末:休息啦!"); break; default: System.out.println("输入的星期数无效!"); break; } }}运行效果
星期三:再坚持两天循环结构
1. while 循环
适合循环次数不确定的场景,先判断条件,满足才执行循环体。
语法
while (条件表达式) { // 循环体:条件为true时重复执行的代码 // 必须有让条件变为false的语句,否则会无限循环}示例
public class WhileDemo { public static void main(String[] args) { int i = 1;
while (i <= 5) { System.out.println("当前数字:" + i); i++; }
System.out.println("循环结束!"); }}运行效果
当前数字:1当前数字:2当前数字:3当前数字:4当前数字:5循环结束!2. do-while 循环
至少执行一次循环体,适合必须先做一次的场景。
语法
do { // 循环体} while (条件表达式);示例
import java.util.Scanner;
public class DoWhileDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int target = 7; int guess;
do { System.out.print("猜一个1-10之间的数字:"); guess = scanner.nextInt();
if (guess < target) { System.out.println("猜小了,再试试!"); } else if (guess > target) { System.out.println("猜大了,再试试!"); } } while (guess != target);
System.out.println("恭喜你,猜对了!"); scanner.close(); }}运行效果
猜一个1-10之间的数字:1猜小了,再试试!猜一个1-10之间的数字:9猜大了,再试试!猜一个1-10之间的数字:7恭喜你,猜对了!3. for 循环
最常用的循环,适合循环次数明确的场景,语法更简洁。
语法
for (初始化表达式; 条件表达式; 更新表达式) { // 循环体}示例
public class ForDemo { public static void main(String[] args) { int sum = 0;
for (int i = 1; i <= 5; i++) { sum += i; System.out.println("累加 " + i + " 后,和为:" + sum); }
System.out.println("\n1-5的总和是:" + sum); }}运行效果
累加1后,和为:1累加2后,和为:3累加3后,和为:6累加4后,和为:10累加5后,和为:15
1-5的总和是:154. 循环控制关键字
break:跳出当前循环(结束整个循环)continue:跳过本次循环,直接进入下一次循环
示例
public class LoopControlDemo { public static void main(String[] args) { System.out.println("=== break示例 ==="); for (int i = 1; i <= 5; i++) { if (i == 3) { break; } System.out.println("i = " + i); }
System.out.println("\n=== continue示例 ==="); for (int i = 1; i <= 5; i++) { if (i == 3) { continue; } System.out.println("i = " + i); } }}运行效果
=== break示例 ===i = 1i = 2
=== continue示例 ===i = 1i = 2i = 4i = 5Java 数组
数组是存储相同类型数据的有序集合,分为一维、二维、多维数组,数组长度固定,索引从0开始。
1.一维数组
基础语法:
- 声明:
数据类型[] 数组名;或数据类型 数组名[];(推荐前者) - 初始化:静态初始化
数据类型[] 数组名 = {值1, 值2, ...};;动态初始化数据类型[] 数组名 = new 数据类型[长度];示例:
public class OneDArrayDemo { public static void main(String[] args) { int[] nums = {1, 2, 3, 4, 5}; System.out.println("一维数组元素:"); for (int i = 0; i < nums.length; i++) { System.out.print(nums[i] + " "); }
String[] names = new String[3]; names[0] = "Java"; names[1] = "Python"; names[2] = "C++"; System.out.println("\n动态初始化数组元素:"); for (String name : names) { System.out.print(name + " "); } }}运行效果:
一维数组元素:1 2 3 4 5动态初始化数组元素:Java Python C++2.二维数组
基础语法:本质是“数组的数组”,声明 数据类型[][] 数组名;,初始化分为规则二维数组和不规则二维数组。
示例:
public class TwoDArrayDemo { public static void main(String[] args) { int[][] matrix = {{1, 2}, {3, 4}, {5, 6}}; System.out.println("规则二维数组元素:"); for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { System.out.print(matrix[i][j] + " "); } System.out.println(); }
int[][] irregularArr = new int[2][]; irregularArr[0] = new int[2]; irregularArr[1] = new int[3]; irregularArr[0][0] = 10; irregularArr[1][1] = 20; System.out.println("不规则二维数组指定元素:"); System.out.println(irregularArr[0][0] + " " + irregularArr[1][1]); }}运行效果:
规则二维数组元素:1 23 45 6不规则二维数组指定元素:10 203.多维数组
基础语法:三维及以上数组,本质是嵌套的二维数组,语法 数据类型[][][] 数组名;,使用场景较少(如三维坐标、多维数据建模)。
示例:
public class MultiDArrayDemo { public static void main(String[] args) { int[][][] cube = { {{1, 2}, {3, 4}, {5, 6}}, {{7, 8}, {9, 10}, {11, 12}} }; System.out.println("三维数组中cube[1][2][1]的值:" + cube[1][2][1]); }}运行效果:
三维数组中cube[1][2][1]的值:12Java 方法
方法(函数)是封装特定功能的代码块,可重复调用,提高代码复用性和可读性。
1.方法的定义与调用
基础语法:
修饰符 返回值类型 方法名(参数类型1 参数名1, 参数类型2 参数名2, ...) { // 方法体(功能逻辑) return 返回值; // 无返回值时(void)无需return}示例:
public class MethodDemo { public static void sayHello() { System.out.println("Hello, Java!"); }
public static int add(int num1, int num2) { return num1 + num2; }
public static void main(String[] args) { sayHello(); int sum = add(10, 20); System.out.println("10 + 20 = " + sum); }}运行效果:
Hello, Java!10 + 20 = 302.方法的重载
基础语法:同一个类中,方法名相同、参数列表(个数/类型/顺序)不同,与返回值无关,用于处理同一类功能的不同参数场景。 示例:
public class MethodOverloadDemo { public static int add(int a, int b) { return a + b; }
public static int add(int a, int b, int c) { return a + b + c; }
public static double add(double a, double b) { return a + b; }
public static void main(String[] args) { System.out.println("两个int求和:" + add(1, 2)); System.out.println("三个int求和:" + add(1, 2, 3)); System.out.println("两个double求和:" + add(1.5, 2.5)); }}运行效果:
两个int求和:3三个int求和:6两个double求和:4.0总结
- Java 基础语法规范:代码需包裹在类中,程序执行入口为
main方法;语句以分号结尾,代码块用{}界定;支持int、char、double、boolean等基础变量类型的直接定义与使用。 - 输入输出核心用法:输出依赖
System.out.println()(换行)/System.out.print()(不换行);输入需导入java.util.Scanner类,通过next()(字符串)、nextInt()(整数)等方法读取控制台数据。 - 条件判断使用场景:
if语句适配范围性条件判断(如数值区间),switch语句适配固定值匹配场景;switch中break可终止分支避免穿透,default处理未匹配到的默认情况。 - 循环结构选择原则:
while循环适合循环次数不确定的场景(先判断后执行),for循环适合循环次数明确的场景(初始化、条件、步长一体化);break强制终止整个循环,continue跳过当前循环轮次。 - Java 基本数据类型特性:共8种基础类型,整数型(byte/short/int/long)、浮点型(float/double)、字符型(char)、布尔型(boolean)各有专属取值范围,需根据场景选择适配类型。
- 数组核心特性:存储同类型数据的固定长度集合,一维数组为基础形式,二维/多维数组本质是“数组嵌套数组”;数组索引从0开始,长度不可动态修改。
- 方法设计与复用:方法是封装特定功能的代码块,支持方法重载(同名不同参数列表);通过方法封装可降低代码冗余,是Java实现模块化编程的核心基础。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!