摘要本文系统解析了Java源文件的标准结构从包声明、导入语句到类声明、成员变量、构造方法和成员方法层层拆解Java代码的“骨架”。通过一个完整的Student类示例详细说明了每个组成部分的作用、语法规则和最佳实践帮助初学者建立规范的代码组织思维为后续深入学习Java语法打下坚实基础。关键词Java代码结构, 包声明, 类声明, 成员变量, 构造方法前几篇我们跑通了Hello, World!也弄懂了 JVM 的运行原理。现在你手里有了一把锤子JDK也知道怎么把它抡起来运行命令。但如果你仔细观察那个HelloWorld.java会发现它其实挺单薄的只有几行代码一个类一个方法。如果我们要写一个真正的程序——比如一个学生管理系统、一个计算器、甚至一个网页后端代码肯定不止几行可能有几百个文件、成千上万行。这时候如果代码是杂乱无章地堆在一起你自己过两天再看都会懵更别说别人了。所以今天我们要做的是搭建 Java 代码的骨架。就像人体有骨骼支撑房子有承重墙和梁柱一样一个规范的 Java 源文件也有它固定的结构层级。掌握了这个骨架你写的每一行代码都会放在它该放的位置上。1. 一个完整的 Java 源文件长什么样我们先不急着讲理论直接看一个麻雀虽小五脏俱全的例子。下面是一个比HelloWorld稍微复杂一点的 Java 文件它模拟了一个学生的概念下面这个例子包含了一些你还没学过的语法如 this、LocalDate别担心今天你只需要关注’代码放在哪里’这些语法细节我们会在后续文章中逐一拆解。// 1. 包声明Package declaration—— 可选但强烈建议有packagecom.example.demo;// 2. 导入语句Import statements—— 可选importjava.time.LocalDate;importjava.util.List;/** * 3. 类注释文档注释 * 这个类表示一个学生实体包含学生的基本信息。 * * author 你的名字 * version 1.0 */// 4. 类声明Class declarationpublicclassStudent{// 5. 成员变量Fields / Attributes // 学生的姓名privateStringname;// 学生的年龄privateintage;// 学生的生日privateLocalDatebirthday;// 6. 构造方法Constructors // 无参构造方法publicStudent(){}// 带参数的构造方法publicStudent(Stringname,intage,LocalDatebirthday){this.namename;this.ageage;this.birthdaybirthday;}// 7. 成员方法Methods // Getter 和 Setter 方法publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.namename;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.ageage;}// 自定义的业务方法publicvoidsayHello(){System.out.println(你好我是 name今年 age 岁。);}// 8. 程序的入口 main 方法 // main 方法只有在这个类需要独立运行时才需要不是每个类都必须有publicstaticvoidmain(String[]args){StudentstudentnewStudent(小明,18,LocalDate.of(2006,6,30));student.sayHello();}}是不是觉得信息量有点大别怕我们来一层一层地解剖这个骨架你会发现每一部分都有自己的职责井然有序。2. 第一层包声明Package—— 代码的家庭住址看第 2 行代码packagecom.example.demo;包Package是用来组织类的文件夹结构。你可以把它想象成你电脑里的文件夹图片放在「图片」文件夹音乐放在「音乐」文件夹代码也要分门别类。com.example.demo是包名。它通常使用公司的域名倒序来命名因为全球唯一比如com.你的公司名.项目名.模块名。包声明必须写在文件的最开头在所有非注释代码之前。也就是说它前面只能有注释和空行不能有 import 或 class 等其他语句。如果没写package类就属于默认包无名包。在正式项目中一定要用包否则几百个类堆在一起会乱成一锅粥。物理对应关系包名中的.对应操作系统的文件夹分隔符。com.example.demo对应com/example/demo文件夹Student.java就放在这个文件夹里。3. 第二层导入语句Import—— 代码的通讯录看第 5~6 行importjava.time.LocalDate;importjava.util.List;你想在代码里使用别人的类比如LocalDate日期类但它不在java.lang包下你必须通过import把它引入进来。就像你要打电话给小王但手机里没有存小王的号码你得先把号码存进通讯录import才能拨号。java.lang包比如String、System是由编译器自动隐式导入的的所以我们可以直接写String而不需要写import java.lang.String;。通配符导入import java.util.*;表示导入java.util包下的所有类但一般不推荐这样用因为可能会引起命名冲突而且不够清晰。4. 第三层类声明Class—— 代码的主框架看第 14 行publicclassStudent{这是类的开头。Java 是面向对象的语言一切代码必须写在类里。public表示这个类是公开的谁都能访问。class关键字声明这是一个类。Student类名必须与文件名完全一致大小写敏感所以文件名必须是Student.java。左花括号{开始右花括号}结束中间包裹着类的所有内容。5. 第四层成员变量Fields—— 描述对象的属性看第 17~22 行privateStringname;privateintage;privateLocalDatebirthday;这些变量定义在类里面、方法外面叫做成员变量也叫字段、属性。它们用来描述这个类的状态——一个学生有名字、年龄和生日。private表示这些变量是私有的只有这个类自己能直接访问封装的概念我们以后细讲。6. 第五层构造方法Constructor—— 创建对象的生产线看第 25~34 行publicStudent(){}publicStudent(Stringname,intage,LocalDatebirthday){this.namename;this.ageage;this.birthdaybirthday;}构造方法的名字必须和类名完全一样且没有返回值连void都不写。当你new Student(...)时就是在调用构造方法。它用来初始化这个新对象的成员变量。无参构造方法如果你没有写任何构造方法编译器会自动为你生成一个无参的默认构造方法。但只要你写了一个构造方法无论有参还是无参编译器就不会再自动生成默认构造方法了。所以如果写了有参构造又需要无参构造就必须手动写出来就像上面那样。this.name name;this指代当前正在被创建的这个对象用来区分成员变量和参数它们同名了。7. 第六层成员方法Methods—— 对象的行为看第 37~50 行publicStringgetName(){...}publicvoidsetName(Stringname){...}publicvoidsayHello(){...}方法描述了这个对象能做什么。学生能说出自己的名字sayHello也能让别人获取或修改他的名字getter/setter。方法的构成修饰符 返回值类型 方法名(参数) 方法体。main方法是一个特殊的方法——它是程序的入口。JVM 启动后会找public static void main(String[] args)并执行它。注意main方法不是每个类都必须有的只有需要独立运行的类才需要它。在入门阶段为了方便测试我们常把main放在同一个类里但在正式项目中通常会单独创建一个Main或Application类来集中管理程序入口。。8. 注释 —— 写给自己的备忘录好的代码不仅电脑能运行人也要能轻松读懂。注释就是写给人看的文本编译器会忽略它们。Java 有三种注释类型语法用途单行注释// 注释内容解释一行代码写在行尾或单独一行多行注释/* 注释内容 */注释多行代码一般用于临时屏蔽大段代码文档注释/** 注释内容 */用于生成 API 文档javadoc命令可以包含author、version、param、return等标签。这是 Java 的特色非常专业养成良好的注释习惯是对自己负责也是对未来跟你协作的同事负责。9. 编码规范与命名约定 —— 让你的代码有教养写代码不仅是写给电脑执行的更是写给人看的包括你自己。Java 社区有一套约定俗成的规范遵守它会让你的代码看起来专业、清爽。命名规则这些是强制性的只能以字母、下划线_、美元符号$开头不能以数字开头。不能使用 Java 关键字如class、public、int、if等。命名约定这些是强烈建议的虽然不是语法强制类名Class帕斯卡命名法PascalCase每个单词首字母大写。如Student、HelloWorld、HttpClient。方法名Method驼峰命名法camelCase首字母小写后续单词首字母大写。如sayHello、getAge、setName。变量名Variable同样用驼峰命名法。如studentName、totalCount。常量名Constant全部大写单词间用下划线分隔。如MAX_VALUE、PI、DEFAULT_TIMEOUT。包名Package全部小写如com.example.demo。代码格式缩进用 4 个空格IDEA 默认就是 4 个空格不用改。花括号左花括号{放在行尾不换行右花括号}独占一行。这是 Java 最主流的方式。// 推荐风格publicclassHello{publicstaticvoidmain(String[]args){System.out.println(Hello);}}// 不推荐风格虽然也能运行publicclassHello{publicstaticvoidmain(String[]args){System.out.println(Hello);}}10. 总结一下类的骨架清单当你要写一个 Java 类时脑海中应该浮现这个顺序从上到下包声明package ...;导入语句import ...;文档注释/** ... */类声明public class Xxx {成员变量描述状态构造方法用来创建对象成员方法定义行为可选main 方法入口类结束} 顺序很重要包 → 导入 → 类 → 字段 → 构造器 → 方法。这就像写作文的开头-正文-结尾一样有一个清晰的脉络。动手试试解剖一个现有类打开 IDEA创建一个新的 Java 类Person手动把上面Student的例子敲一遍不要复制粘贴。敲的时候体会一下骨架的层次感。故意违反规范把类名改成student小写看看 IDEA 会不会出现黄色波浪线提示提醒你应该用大写开头。生成文档在命令行进入你的项目目录执行javadoc -d doc Student.java然后打开生成的doc文件夹里的index.html看看文档注释是怎么渲染成漂亮的 API 文档的。这是 Java 特别酷的一个小功能。在 IDEA 中观察项目目录展开 src 文件夹看看 com.example.demo 包对应的物理文件夹结构是不是 src/com/example/demo/。理解包名 文件夹路径这个对应关系。从下一篇开始我们就要正式进入语法基础的学习了。第一站是变量和数据类型——数据的世界里整数、小数、文字、真假值分别怎么表示。我们下一篇见。 获取本系列示例代码请访问 GitCode。
5. 【Java】Java程序的基本结构
发布时间:2026/7/13 21:25:31
摘要本文系统解析了Java源文件的标准结构从包声明、导入语句到类声明、成员变量、构造方法和成员方法层层拆解Java代码的“骨架”。通过一个完整的Student类示例详细说明了每个组成部分的作用、语法规则和最佳实践帮助初学者建立规范的代码组织思维为后续深入学习Java语法打下坚实基础。关键词Java代码结构, 包声明, 类声明, 成员变量, 构造方法前几篇我们跑通了Hello, World!也弄懂了 JVM 的运行原理。现在你手里有了一把锤子JDK也知道怎么把它抡起来运行命令。但如果你仔细观察那个HelloWorld.java会发现它其实挺单薄的只有几行代码一个类一个方法。如果我们要写一个真正的程序——比如一个学生管理系统、一个计算器、甚至一个网页后端代码肯定不止几行可能有几百个文件、成千上万行。这时候如果代码是杂乱无章地堆在一起你自己过两天再看都会懵更别说别人了。所以今天我们要做的是搭建 Java 代码的骨架。就像人体有骨骼支撑房子有承重墙和梁柱一样一个规范的 Java 源文件也有它固定的结构层级。掌握了这个骨架你写的每一行代码都会放在它该放的位置上。1. 一个完整的 Java 源文件长什么样我们先不急着讲理论直接看一个麻雀虽小五脏俱全的例子。下面是一个比HelloWorld稍微复杂一点的 Java 文件它模拟了一个学生的概念下面这个例子包含了一些你还没学过的语法如 this、LocalDate别担心今天你只需要关注’代码放在哪里’这些语法细节我们会在后续文章中逐一拆解。// 1. 包声明Package declaration—— 可选但强烈建议有packagecom.example.demo;// 2. 导入语句Import statements—— 可选importjava.time.LocalDate;importjava.util.List;/** * 3. 类注释文档注释 * 这个类表示一个学生实体包含学生的基本信息。 * * author 你的名字 * version 1.0 */// 4. 类声明Class declarationpublicclassStudent{// 5. 成员变量Fields / Attributes // 学生的姓名privateStringname;// 学生的年龄privateintage;// 学生的生日privateLocalDatebirthday;// 6. 构造方法Constructors // 无参构造方法publicStudent(){}// 带参数的构造方法publicStudent(Stringname,intage,LocalDatebirthday){this.namename;this.ageage;this.birthdaybirthday;}// 7. 成员方法Methods // Getter 和 Setter 方法publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.namename;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.ageage;}// 自定义的业务方法publicvoidsayHello(){System.out.println(你好我是 name今年 age 岁。);}// 8. 程序的入口 main 方法 // main 方法只有在这个类需要独立运行时才需要不是每个类都必须有publicstaticvoidmain(String[]args){StudentstudentnewStudent(小明,18,LocalDate.of(2006,6,30));student.sayHello();}}是不是觉得信息量有点大别怕我们来一层一层地解剖这个骨架你会发现每一部分都有自己的职责井然有序。2. 第一层包声明Package—— 代码的家庭住址看第 2 行代码packagecom.example.demo;包Package是用来组织类的文件夹结构。你可以把它想象成你电脑里的文件夹图片放在「图片」文件夹音乐放在「音乐」文件夹代码也要分门别类。com.example.demo是包名。它通常使用公司的域名倒序来命名因为全球唯一比如com.你的公司名.项目名.模块名。包声明必须写在文件的最开头在所有非注释代码之前。也就是说它前面只能有注释和空行不能有 import 或 class 等其他语句。如果没写package类就属于默认包无名包。在正式项目中一定要用包否则几百个类堆在一起会乱成一锅粥。物理对应关系包名中的.对应操作系统的文件夹分隔符。com.example.demo对应com/example/demo文件夹Student.java就放在这个文件夹里。3. 第二层导入语句Import—— 代码的通讯录看第 5~6 行importjava.time.LocalDate;importjava.util.List;你想在代码里使用别人的类比如LocalDate日期类但它不在java.lang包下你必须通过import把它引入进来。就像你要打电话给小王但手机里没有存小王的号码你得先把号码存进通讯录import才能拨号。java.lang包比如String、System是由编译器自动隐式导入的的所以我们可以直接写String而不需要写import java.lang.String;。通配符导入import java.util.*;表示导入java.util包下的所有类但一般不推荐这样用因为可能会引起命名冲突而且不够清晰。4. 第三层类声明Class—— 代码的主框架看第 14 行publicclassStudent{这是类的开头。Java 是面向对象的语言一切代码必须写在类里。public表示这个类是公开的谁都能访问。class关键字声明这是一个类。Student类名必须与文件名完全一致大小写敏感所以文件名必须是Student.java。左花括号{开始右花括号}结束中间包裹着类的所有内容。5. 第四层成员变量Fields—— 描述对象的属性看第 17~22 行privateStringname;privateintage;privateLocalDatebirthday;这些变量定义在类里面、方法外面叫做成员变量也叫字段、属性。它们用来描述这个类的状态——一个学生有名字、年龄和生日。private表示这些变量是私有的只有这个类自己能直接访问封装的概念我们以后细讲。6. 第五层构造方法Constructor—— 创建对象的生产线看第 25~34 行publicStudent(){}publicStudent(Stringname,intage,LocalDatebirthday){this.namename;this.ageage;this.birthdaybirthday;}构造方法的名字必须和类名完全一样且没有返回值连void都不写。当你new Student(...)时就是在调用构造方法。它用来初始化这个新对象的成员变量。无参构造方法如果你没有写任何构造方法编译器会自动为你生成一个无参的默认构造方法。但只要你写了一个构造方法无论有参还是无参编译器就不会再自动生成默认构造方法了。所以如果写了有参构造又需要无参构造就必须手动写出来就像上面那样。this.name name;this指代当前正在被创建的这个对象用来区分成员变量和参数它们同名了。7. 第六层成员方法Methods—— 对象的行为看第 37~50 行publicStringgetName(){...}publicvoidsetName(Stringname){...}publicvoidsayHello(){...}方法描述了这个对象能做什么。学生能说出自己的名字sayHello也能让别人获取或修改他的名字getter/setter。方法的构成修饰符 返回值类型 方法名(参数) 方法体。main方法是一个特殊的方法——它是程序的入口。JVM 启动后会找public static void main(String[] args)并执行它。注意main方法不是每个类都必须有的只有需要独立运行的类才需要它。在入门阶段为了方便测试我们常把main放在同一个类里但在正式项目中通常会单独创建一个Main或Application类来集中管理程序入口。。8. 注释 —— 写给自己的备忘录好的代码不仅电脑能运行人也要能轻松读懂。注释就是写给人看的文本编译器会忽略它们。Java 有三种注释类型语法用途单行注释// 注释内容解释一行代码写在行尾或单独一行多行注释/* 注释内容 */注释多行代码一般用于临时屏蔽大段代码文档注释/** 注释内容 */用于生成 API 文档javadoc命令可以包含author、version、param、return等标签。这是 Java 的特色非常专业养成良好的注释习惯是对自己负责也是对未来跟你协作的同事负责。9. 编码规范与命名约定 —— 让你的代码有教养写代码不仅是写给电脑执行的更是写给人看的包括你自己。Java 社区有一套约定俗成的规范遵守它会让你的代码看起来专业、清爽。命名规则这些是强制性的只能以字母、下划线_、美元符号$开头不能以数字开头。不能使用 Java 关键字如class、public、int、if等。命名约定这些是强烈建议的虽然不是语法强制类名Class帕斯卡命名法PascalCase每个单词首字母大写。如Student、HelloWorld、HttpClient。方法名Method驼峰命名法camelCase首字母小写后续单词首字母大写。如sayHello、getAge、setName。变量名Variable同样用驼峰命名法。如studentName、totalCount。常量名Constant全部大写单词间用下划线分隔。如MAX_VALUE、PI、DEFAULT_TIMEOUT。包名Package全部小写如com.example.demo。代码格式缩进用 4 个空格IDEA 默认就是 4 个空格不用改。花括号左花括号{放在行尾不换行右花括号}独占一行。这是 Java 最主流的方式。// 推荐风格publicclassHello{publicstaticvoidmain(String[]args){System.out.println(Hello);}}// 不推荐风格虽然也能运行publicclassHello{publicstaticvoidmain(String[]args){System.out.println(Hello);}}10. 总结一下类的骨架清单当你要写一个 Java 类时脑海中应该浮现这个顺序从上到下包声明package ...;导入语句import ...;文档注释/** ... */类声明public class Xxx {成员变量描述状态构造方法用来创建对象成员方法定义行为可选main 方法入口类结束} 顺序很重要包 → 导入 → 类 → 字段 → 构造器 → 方法。这就像写作文的开头-正文-结尾一样有一个清晰的脉络。动手试试解剖一个现有类打开 IDEA创建一个新的 Java 类Person手动把上面Student的例子敲一遍不要复制粘贴。敲的时候体会一下骨架的层次感。故意违反规范把类名改成student小写看看 IDEA 会不会出现黄色波浪线提示提醒你应该用大写开头。生成文档在命令行进入你的项目目录执行javadoc -d doc Student.java然后打开生成的doc文件夹里的index.html看看文档注释是怎么渲染成漂亮的 API 文档的。这是 Java 特别酷的一个小功能。在 IDEA 中观察项目目录展开 src 文件夹看看 com.example.demo 包对应的物理文件夹结构是不是 src/com/example/demo/。理解包名 文件夹路径这个对应关系。从下一篇开始我们就要正式进入语法基础的学习了。第一站是变量和数据类型——数据的世界里整数、小数、文字、真假值分别怎么表示。我们下一篇见。 获取本系列示例代码请访问 GitCode。