一、Java 的类、对象、方法和实例变量
- 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。
- 对象:对象是类的一个实例,有状态(实例变量)和行为(方法)。例如:一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
- 类:类是一个模板,或者大家可以理解为这是一个集合,它描述了一类对象的行为和状态。例如:狗是一个类,一只拉布拉多是一个对象,一只金毛是另一个对象,但它俩同属于一类。
- 方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是再方法中完成的。
- 实例变量每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。
二、第一个 Java 程序
- 接下来我们开始编写第一个程序
1、新建项目
- 打开 IDEA
- 首先我们新建一个项目,然后储存到自己想要储存的地方(建议在除C盘之外新建一个文件夹,专门储存以后学习时用到的代码)
- 新建项目之后,页面是这样的,我们在这里可以直接把它给的Main删掉
2、新建包
- 新建一个包
3、新建类
- 包名如下所示,当然大家可以自己起名字,主要以后我们方便管理,然后再在包中建一个 Java 类
4、开始编写代码
- 这样我们就建成了一个类,接下来我们开始编写第一个代码
- 第一个代码如下
public class HelloWorld {
/* 第一个Java程序
* 它将输出字符串 Hello World
*/
public static void main(String[] args) {
System.out.println("Hello World"); // 输出 Hello World
}
}
- 结果如下,左下角输出 Hello World ,这样我们就完成了第一个代码
- Java 程序的主方法(main 方法)。在 Java 中,main 方法是程序的入口点,也就是说,当你运行一个 Java 程序时,程序的执行从这个方法开始,下图对此进行简单讲解:
三、基本语法
- 编写 Java 程序时,应注意以下几点:
- 1、大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
- 2、类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
- 3、方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
- 4、源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
- 5、主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。
四、Java 标识符
- Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
- 关于 Java 标识符,有以下几点需要注意:
所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
关键字不能用作标识符
标识符是大小写敏感的
合法标识符举例:age、$salary、_value、__1_value
非法标识符举例:123abc、-salary
五、Java 修饰符
- 像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:
- 访问控制修饰符 : default, public , protected, private
- 非访问控制修饰符 : final, abstract, static, synchronized
- 在后面的章节中我们会深入讨论 Java 修饰符。
- Java 修饰符我们在后面会详细讲解
六、Java 变量
- Java 中主要有如下几种类型的变量
- 局部变量
- 类变量(静态变量)
- 成员变量(非静态变量)
七、Java 数组
- 数组是储存在堆上的对象,可以保存多个同类型变量。在后面的章节中,我们将会学到如何声明、构造以及初始化一个数组。
八、Java 枚举
- Java 5.0引入了枚举,枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的 bug。
- 例如,我们为果汁店设计一个程序,它将限制果汁为小杯、中杯、大杯。这就意味着它不允许顾客点除了这三种尺寸外的果汁。
- 注意:枚举可以单独声明或者声明在类里面。方法、变量、构造函数也可以在枚举中定义。
九、Java 关键字
- 下面列出了 Java 关键字。这些保留字不能用于常量、变量、和任何标识符的名称。
类别 | 关键字 | 说明 |
---|---|---|
访问控制 | private | 私有的 |
protected | 受保护的 | |
public | 公共的 | |
default | 默认的 | |
类、方法和变量修饰符 | abstract | 声明抽象 |
class | 类 | |
extends | 扩充、继承 | |
final | 最终值、不可改变的 | |
implements | 实现(接口) | |
interface | 接口 | |
native | 本地、原生方法(非Java实现) | |
new | 创建 | |
static | 静态 | |
strictfp | 严格浮点、精准浮点 | |
synchronized | 线程、同步 | |
transient | 短暂 | |
volatile | 易失 | |
程序控制语句 | break | 跳出循环 |
case | 定义一个值以供 switch 选择 | |
continue | 继续 | |
do | 运行 | |
else | 否则 | |
for | 循环 | |
if | 如果 | |
instanceof | 实例 | |
return | 返回 | |
switch | 根据值选择执行 | |
while | 循环 | |
错误处理 | assert | 断言表达式是否为真 |
catch | 捕捉异常 | |
finally | 有没有异常都执行 | |
throw | 抛出一个异常对象 | |
throws | 声明一个异常可能被抛出 | |
try | 捕获异常 | |
包相关 | import | 引入 |
package | 包 | |
基本类型 | boolean | 布尔型 |
byte | 字节型 | |
char | 字符型 | |
double | 双精度浮点 | |
float | 单精度浮点 | |
int | 整形 | |
long | 长整型 | |
short | 短整型 | |
变量引用 | super | 父类、超类 |
this | 本类 | |
void | 无返回值 | |
保留关键字 | goto | 是关键字,但不能实用 |
const | 是关键字,但不能实用 |
<table>
<!-- 标题 -->
<tr>
<th>类别</th><th>关键字</th><th>说明</th>
</tr>
<!-- 访问控制 -->
<tr>
<td style="text-align:center" rowspan="4">访问控制</td>
<td style="text-align:center">private</td>
<td style="text-align:center">私有的</td>
</tr>
<tr>
<td style="text-align:center">protected</td>
<td style="text-align:center">受保护的</td>
</tr>
<tr>
<td style="text-align:center">public</td>
<td style="text-align:center">公共的</td>
</tr>
<tr>
<td style="text-align:center">default</td>
<td style="text-align:center">默认的</td>
</tr>
<!-- 类、方法和变量修饰符 -->
<tr>
<td style="text-align:center" rowspan="13">类、方法和变量修饰符</td>
<td style="text-align:center">abstract</td>
<td style="text-align:center">声明抽象</td>
</tr>
<tr>
<td style="text-align:center">class</td>
<td style="text-align:center">类</td>
</tr>
<tr>
<td style="text-align:center">extends</td>
<td style="text-align:center">扩充、继承</td>
</tr>
<tr>
<td style="text-align:center">final</td>
<td style="text-align:center">最终值、不可改变的</td>
</tr>
<tr>
<td style="text-align:center">implements</td>
<td style="text-align:center">实现(接口)</td>
</tr>
<tr>
<td style="text-align:center">interface</td>
<td style="text-align:center">接口</td>
</tr>
<tr>
<td style="text-align:center">native</td>
<td style="text-align:center">本地、原生方法(非Java实现)</td>
</tr>
<tr>
<td style="text-align:center">new</td>
<td style="text-align:center">创建</td>
</tr>
<tr>
<td style="text-align:center">static</td>
<td style="text-align:center">静态</td>
</tr>
<tr>
<td style="text-align:center">strictfp</td>
<td style="text-align:center">严格浮点、精准浮点</td>
</tr>
<tr>
<td style="text-align:center">synchronized</td>
<td style="text-align:center">线程、同步</td>
</tr>
<tr>
<td style="text-align:center">transient</td>
<td style="text-align:center">短暂</td>
</tr>
<tr>
<td style="text-align:center">volatile</td>
<td style="text-align:center">易失</td>
</tr>
<!-- 程序控制语句 -->
<tr>
<td style="text-align:center" rowspan="11">程序控制语句</td>
<td style="text-align:center">break</td>
<td style="text-align:center">跳出循环</td>
</tr>
<tr>
<td style="text-align:center">case</td>
<td style="text-align:center">定义一个值以供 switch 选择</td>
</tr>
<tr>
<td style="text-align:center">continue</td>
<td style="text-align:center">继续</td>
</tr>
<tr>
<td style="text-align:center">do</td>
<td style="text-align:center">运行</td>
</tr>
<tr>
<td style="text-align:center">else</td>
<td style="text-align:center">否则</td>
</tr>
<tr>
<td style="text-align:center">for</td>
<td style="text-align:center">循环</td>
</tr>
<tr>
<td style="text-align:center">if</td>
<td style="text-align:center">如果</td>
</tr>
<tr>
<td style="text-align:center">instanceof</td>
<td style="text-align:center">实例</td>
</tr>
<tr>
<td style="text-align:center">return</td>
<td style="text-align:center">返回</td>
</tr>
<tr>
<td style="text-align:center">switch</td>
<td style="text-align:center">根据值选择执行</td>
</tr>
<tr>
<td style="text-align:center">while</td>
<td style="text-align:center">循环</td>
</tr>
<!-- 错误处理 -->
<tr>
<td style="text-align:center" rowspan="6">错误处理</td>
<td style="text-align:center">assert</td>
<td style="text-align:center">断言表达式是否为真</td>
</tr>
<tr>
<td style="text-align:center">catch</td>
<td style="text-align:center">捕捉异常</td>
</tr>
<tr>
<td style="text-align:center">finally</td>
<td style="text-align:center">有没有异常都执行</td>
</tr>
<tr>
<td style="text-align:center">throw</td>
<td style="text-align:center">抛出一个异常对象</td>
</tr>
<tr>
<td style="text-align:center">throws</td>
<td style="text-align:center">声明一个异常可能被抛出</td>
</tr>
<tr>
<td style="text-align:center">try</td>
<td style="text-align:center">捕获异常</td>
</tr>
<!-- 包相关 -->
<tr>
<td style="text-align:center" rowspan="2">包相关</td>
<td style="text-align:center">import</td>
<td style="text-align:center">引入</td>
</tr>
<tr>
<td style="text-align:center">package</td>
<td style="text-align:center">包</td>
</tr>
<!-- 基本类型 -->
<tr>
<td style="text-align:center" rowspan="8">基本类型</td>
<td style="text-align:center">boolean</td>
<td style="text-align:center">布尔型</td>
</tr>
<tr>
<td style="text-align:center">byte</td>
<td style="text-align:center">字节型</td>
</tr>
<tr>
<td style="text-align:center">char</td>
<td style="text-align:center">字符型</td>
</tr>
<tr>
<td style="text-align:center">double</td>
<td style="text-align:center">双精度浮点</td>
</tr>
<tr>
<td style="text-align:center">float</td>
<td style="text-align:center">单精度浮点</td>
</tr>
<tr>
<td style="text-align:center">int</td>
<td style="text-align:center">整形</td>
</tr>
<tr>
<td style="text-align:center">long</td>
<td style="text-align:center">长整型</td>
</tr>
<tr>
<td style="text-align:center">short</td>
<td style="text-align:center">短整型</td>
</tr>
<!-- 变量引用 -->
<tr>
<td style="text-align:center" rowspan="3">变量引用</td>
<td style="text-align:center">super</td>
<td style="text-align:center">父类、超类</td>
</tr>
<tr>
<td style="text-align:center">this</td>
<td style="text-align:center">本类</td>
</tr>
<tr>
<td style="text-align:center">void</td>
<td style="text-align:center">无返回值</td>
</tr>
<!-- 保留关键字 -->
<tr>
<td style="text-align:center" rowspan="2">保留关键字</td>
<td style="text-align:center">goto</td>
<td style="text-align:center">是关键字,但不能实用</td>
</tr>
<tr>
<td style="text-align:center">const</td>
<td style="text-align:center">是关键字,但不能实用</td>
</tr>
</table>
- 注意:Java 的 null 不是关键字,类似于 true 和 false,它是一个字面常量,不允许作为标识符使用。
十、Java 注释
- 类似于 C/C++、Java 也支持单行以及多行注释。
- 注释中的字符将被 Java 编译器忽略。
十一、Java 空行
- 空白行或者有注释的行,Java 编译器都会忽略掉。
十二、继承
- 在 Java 中,一个类可以由其他类派生。如果你要创建一个类,而且已经存在一个类具有你所需要的属性或方法,那么你可以将新创建的类继承该类。
- 利用继承的方法,可以重用已存在类的方法和属性,而不用重写这些代码。被继承的类称为超类(super class),派生类称为子类(sub class)。
十三、接口
- 在 Java 中,接口可理解为对象间相互通信的协议。接口在继承中扮演着很重要的角色。
- 接口只定义派生要用到的方法,但是方法的具体实现完全取决于派生类。