网站首页 > 技术文章 正文
大道至简在本教程中,Java 语言的一些基本编程概念。我们从一些简单的程序开始,涉及变量、常量和基本数据类型,讲解控制台的读写操作,同时也会提及字符串格式化。
Java 简单示例
我们从一个非常简单的代码示例开始。以下代码需放入Simple.java文件中,此处命名很重要 ——Java 程序的公共类名必须与文件名一致。
// com/test/Hello.java
package com.test;
public class Hello {
public static void main(String[] args) {
System.out.println("This is Java");
}
}
Java 代码从一开始就有严格的组织规则:一个 Java 代码文件可以包含一个或多个类,但其中只能有一个类被声明为public。
包(Package)
package com.hello;
包用于将 Java 类按功能分组,类似于其他编程语言中的命名空间或模块。对于简单示例,包声明可以省略(此时会创建默认包),但本教程中所有示例都使用包。另一个要点是:目录结构必须与包名一致。例如,包名为com.test的源文件Hello.java必须放在com/test/目录下,且package语句必须是源文件的第一行。
类(Class)
public class Simple {
...
}
类是 Java 程序的基本构建块。public关键字表示该类可被无限制访问。上述代码是一个类定义,其主体以左花括号{开始,右花括号}结束。一个源文件中只能有一个public类。
此外,类名必须与文件名一致(如Hello.java对应类Hello),且类名通常以大写字母开头。
主方法(main method)
public static void main(String[] args) {
...
}
main是一个方法,用于启动程序,是每个控制台 Java 程序的入口点。方法是为完成特定任务而编写的代码块,能使程序更具模块化。
- static:静态方法,无需创建类的实例即可调用;
- void:表示方法不返回值;
- public:使主方法可被外部无限制访问。
控制台输出
System.out.println("This is Java");
在主方法中,该语句将字符串字面值"This is Java"打印到控制台。每条语句必须以分号;结尾。这是一个方法调用:调用System类的println方法,System类代表控制台应用的标准输入、输出和错误流。
执行程序
$ java Simple.java
This is Java
使用java工具执行程序(Java 11 及以上支持直接执行单个源文件)。
Java 控制台读取输入
第二个示例展示如何从控制台读取值:
// com/test/ReadLine.java
package com.test;
import java.util.Scanner;
public class ReadLine {
public static void main(String[] args) {
System.out.print("Write your name:");
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
System.out.println("Hello " + name);
}
}
程序会在终端显示提示,用户输入姓名后,值会被读取并打印回终端。
导入类(Import Class)
import java.util.Scanner;
Java 标准库中的类按包组织,Scanner类用于读取输入。使用import关键字导入类后,可直接使用类名(无需完整包名)。
打印提示
System.out.print("Write your name:");
print方法打印消息但不换行,用户可在消息后直接输入。
创建 Scanner 实例
Scanner sc = new Scanner(System.in);
使用new关键字创建Scanner对象,参数System.in表示从标准输入流(终端)读取数据。Scanner可解析基本类型和字符串。
读取输入
String name = sc.nextLine();
调用nextLine方法读取终端输入的一行内容,返回值存储在String类型的变量name中。
输出结果
System.out.println("Hello " + name);
使用+运算符拼接字符串和变量,打印结果。
$ java ReadLine.java
Write your name:John Doe
Hello John Doe
Java 命令行参数
Java 程序可接收命令行参数,参数在运行程序时跟随在程序名之后:
// com/test/CommandLineArgs.java
package com.test;
public class CommandLineArgs {
public static void main(String[] args) {
for (String arg : args) {
System.out.println(arg);
}
}
}
主方法参数
public static void main(String[] args)
主方法接收一个String数组args,用于存储命令行参数。数组是数据的集合,声明格式为类型[] 变量名。
遍历参数数组
for (String arg : args) {
System.out.println(arg);
}
使用增强型for循环遍历数组,依次打印每个参数。循环次数等于数组元素个数,每次循环将数组元素赋值给arg变量。
$ java CommandLineArgs.java 1 2 3 4 5
Java 变量
变量是存储数据的空间,包含名称和数据类型,数据类型决定了变量可存储的值(如整数、字符串、布尔值等)。Java 中,变量在使用前会被初始化为其类型的默认值。
// com/test/Variables.java
package com.test;
public class Variables {
public static void main(String[] args) {
String city = "New York";
String name = "Paul"; int age = 34;
String nationality = "American";
System.out.println(city);
System.out.println(name);
System.out.println(age);
System.out.println(nationality);
city = "London";
System.out.println(city);
}
}
- String city = "New York";:声明String类型变量city并初始化为"New York";
- String name = "Paul"; int age = 34;:可在同一行声明多个变量(建议每行一条语句以提高可读性);
- city = "London";:变量可重新赋值。
$ java Variables.java
New York
Paul
34
American
London
var 关键字(Java 10+)
对于有初始值的局部变量,可使用var关键字替代数据类型,编译器会从初始化值推断类型:
// com/test/VarKeyword.java
package com.zetcode;
public class VarKeyword {
public static void main(String[] args) {
var name = "John Doe";
var age = 34;
System.out.println(name + " is " + age + " years old");
}
}
var name = "John Doe";中,编译器推断name为String类型;var age = 34;中推断age为int类型。使用var时必须初始化变量。
Java 常量
常量与变量不同,其初始值不可修改,使用final关键字声明:
// com/test/Constants.java
package com.zetcode;
public class Constants {
public static void main(String[] args) {
final int WIDTH = 100;
final int HEIGHT = 150;
int var = 40;
var = 50;
// WIDTH = 110; // 编译错误:无法修改final变量
}
}
- final int WIDTH = 100;:声明常量WIDTH,约定常量名用大写字母;
- 若取消注释WIDTH = 110;,会报错:无法为final变量WIDTH赋值。
Java 字符串格式化
在编程中,从变量构建字符串是常见需求。Java 通过String.format方法实现字符串格式化(不支持动态语言的变量插值):
// com/zetcode/StringFormatting.java
package com.zetcode;
public class StringFormatting {
public static void main(String[] args) {
int age = 34;
String name = "William";
String output = String.format("%s is %d years old.", name, age);
System.out.println(output);
}
}
- %s:字符串占位符,对应name变量;
- %d:整数占位符,对应age变量。
$ java StringFormatting.java
William is 34 years old.
猜你喜欢
- 2025-09-04 C++基础语法梳理:算法丨十大排序算法(二)
- 2025-09-04 C语言段错误(Segmentation Fault)全面解析:原理、调试与预防
- 2025-09-04 山脊图——多组数据对比的好方法——R语言绘制
- 2025-09-04 编译器动手实践之:实现C语言函数定义的语法解析
- 2025-09-04 SOLIDWORKS语言切换:如何从英文切换到中文
- 2025-09-04 我如何用C语言构建简单Shell(三)_c语言编写shell
- 2025-09-04 程序员上手 Rust 2 年后感悟:它的确强大,但想要取代 C 还远着呢
- 2025-09-04 我如何用C语言构建简单Shell (一)
- 2025-09-04 rust 每次发送请求时调用Arc::new(peer) 会影响性能吗?
- 2025-09-04 大语言模型学习Python中用__new__()创建实例
- 最近发表
-
- count(*)、count1(1)、count(主键)、count(字段) 哪个更快?
- 深入探索 Spring Boot3 中 MyBatis 的 association 标签用法
- js异步操作 Promise fetch API 带来的网络请求变革—仙盟创梦IDE
- HTTP状态码超详细说明_http 状态码有哪些
- 聊聊跨域的原理与解决方法_跨域解决方案及原理
- 告别懵圈!产品新人的接口文档轻松入门指南
- 在Javaweb中实现发送简单邮件_java web发布
- 优化必备基础:Oracle中常见的三种表连接方式
- Oracle常用工具使用 - AWR_oracle工具有哪些
- 搭载USB 3.1接口:msi 微星 发布 990FXA Gaming 游戏主板
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)