Java入门系列(一)

![image](http://www.zoncare.com/images/index_r2_c.jpg)

---

# Java入门系列(一)

## 主要内容

* 基础语法

* 基本数据类型

* 修饰符

## 基础语法

第一个例子

```java

public class HelloWorld {

/* 第一个Java程序

* 它将打印字符串 Hello World

*/

public static void main(String []args) {

System.out.println("Hello World"); // 打印 Hello World

}

}

```

### 基本语法

- 大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的。

- 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。

- 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。

源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。

- 主方法入口:所有的Java 程序由public static void main(String []args)方法开始执行。

### 标识符

Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。

关于Java标识符,有以下几点需要注意:

- 所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始

- 首字符之后可以是任何字符的组合

- 关键字不能用作标识符

- 标识符是大小写敏感的

- 合法标识符举例:age、$salary、_value、__1_value

- 非法标识符举例:123abc、-salary

### 修饰符

像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:

- 可访问修饰符 : default, public , protected, private

- 不可访问修饰符 : final, abstract, strictfp

### 变量

- 局部变量

- 类变量(静态变量)

- 成员变量(非静态变量)

### 枚举

Java 5.0引入了枚举,枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的bug。

例如,我们为果汁店设计一个程序,它将限制果汁为小杯、中杯、大杯。这就意味着它不允许顾客点除了这三种尺寸外的果汁。

```java

class FreshJuice {

enum FreshJuiceSize{ SMALL, MEDUIM, LARGE }

FreshJuiceSize size;

}

public class FreshJuiceTest {

public static void main(String []args){

FreshJuice juice = new FreshJuice();

juice.size = FreshJuice. FreshJuiceSize.MEDUIM ;

}

}

```

### 关键字

关键字 | 描述

---|---

abstract | 抽象方法,抽象类的修饰符

assert | 断言条件是否满足

boolean | 布尔数据类型

break | 跳出循环或者label代码段

byte | 8-bit 有符号数据类型

case | switch语句的一个条件

catch | 和try搭配扑捉异常信息

char | 16-bit Unicode字符数据类型

class | 定义类

const | 未使用

continue | 不执行循环体剩余部分

default | switch语句中的默认分支

do | 循环语句,循环体至少会执行一次

double | 64-bit双精度浮点数

else | if条件不成立时执行的分支

enum | 枚举类型

extends | 表示一个类是另一个类的子类

final | 表示一个值在初始化之后就不能再改变了,表示方法不能被重写,或者一个类不能有子类

finally | 为了完成执行的代码而设计的,主要是为了程序的健壮性和完整性,无论有没有异常发生都执行代码。

float | 32-bit单精度浮点数

for | for循环语句

goto | 未使用

if | 条件语句

implements | 表示一个类实现了接口

import | 导入类

instanceof | 测试一个对象是否是某个类的实例

int | 32位整型数

interface | 接口,一种抽象的类型,仅有方法和常量的定义

long | 64位整型数

native | 表示方法用非java代码实现

new | 分配新的类实例

package | 一系列相关类组成一个包

private | 表示私有字段,或者方法等,只能从类内部访问

protected | 表示字段只能通过类或者其子类访问,子类或者在同一个包内的其他类

public | 表示共有属性或者方法

return | 方法返回值

short | 16位数字

static | 表示在类级别定义,所有实例共享的

strictfp | 浮点数比较使用严格的规则

super | 表示基类

switch | 选择语句

synchronized | 表示同一时间只能由一个线程访问的代码块

this | 表示调用当前实例或者调用另一个构造函数

throw | 抛出异常

throws | 定义方法可能抛出的异常

transient | 修饰不要序列化的字段

try | 表示代码块要做异常处理或者和finally配合表示是否抛出异常都执行finally中的代码

void | 标记方法不返回任何值

volatile | 标记字段可能会被多个线程同时访问,而不做同步

while | while循环

## 基本数据类型

Java的两大数据类型:

- 内置数据类型

- 引用数据类型

### 内置数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

#### byte:

- byte数据类型是8位、有符号的,以二进制补码表示的整数;

- 最小值是-128(-2^7);

- 最大值是127(2^7-1);

- 默认值是0;

- byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一;

- 例子:byte a = 100,byte b = -50。

#### short:

- short数据类型是16位、有符号的以二进制补码表示的整数

- 最小值是-32768(-2^15);

- 最大值是32767(2^15 - 1);

- Short数据类型也可以像byte那样节省空间。一个short变量是int型变量所占空间的二分之一;

- 默认值是0;

- 例子:short s = 1000,short r = -20000。

#### int:

- int数据类型是32位、有符号的以二进制补码表示的整数;

- 最小值是-2,147,483,648(-2^31);

- 最大值是2,147,483,647(2^31 - 1);

- 一般地整型变量默认为int类型;

- 默认值是0;

- 例子:int a = 100000, int b = -200000。

#### long:

- long数据类型是64位、有符号的以二进制补码表示的整数;

- 最小值是-9,223,372,036,854,775,808(-2^63);

- 最大值是9,223,372,036,854,775,807(2^63 -1);

- 这种类型主要使用在需要比较大整数的系统上;

- 默认值是0L;

- 例子: long a = 100000L,Long b = -200000L。

#### float:

- float数据类型是单精度、32位、符合IEEE 754标准的浮点数;

- float在储存大型浮点数组的时候可节省内存空间;

- 默认值是0.0f;

- 浮点数不能用来表示精确的值,如货币;

- 例子:float f1 = 234.5f。

#### double:

- double数据类型是双精度、64位、符合IEEE 754标准的浮点数;

- 浮点数的默认类型为double类型;

- double类型同样不能表示精确的值,如货币;

- 默认值是0.0d;

- 例子:double d1 = 123.4。

#### boolean:

- boolean数据类型表示一位的信息;

- 只有两个取值:true和false;

- 这种类型只作为一种标志来记录true/false情况;

- 默认值是false;

- 例子:boolean one = true。

#### char:

- char类型是一个单一的16位Unicode字符;

- 最小值是’\u0000’(即为0);

- 最大值是’\uffff’(即为65,535);

- char数据类型可以储存任何字符;

- 例子:char letter = ‘A’。

### 引用类型

- 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如Employee、Pubby等。变量一旦声明后,类型就不能被改变了。

- 对象、数组都是引用数据类型。

- 所有引用类型的默认值都是null。

- 一个引用变量可以用来引用与任何与之兼容的类型。

- 例子:Site site = new Site("Runoob")。

### Java常量

常量在程序运行时,不会被修改的量。

在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:

```java

final double PI = 3.1415927;

```

虽然常量名也可以用小写,但为了便于识别,通常使用大写字母表示常量。

字面量可以赋给任何内置类型的变量。例如:

```java

byte a = 68;

char a = 'A'

```

byte、int、long、和short都可以用十进制、16进制以及8进制的方式来表示。

当使用常量的时候,前缀0�表示8进制,而前缀0x代表16进制。例如:

```java

int decimal = 100;

int octal = 0144;

int hexa =  0x64;

```

和其他语言一样,Java的字符串常量也是包含在两个引号之间的字符序列。下面是字符串型字面量的例子:

```java

"Hello World"

"two\nlines"

"\"This is in quotes\""

```

字符串常量和字符常量都可以包含任何Unicode字符。例如:

```java

char a = '\u0001';

String a = "\u0001";

```

Java语言支持一些特殊的转义字符序列。

符号 | 字符含义

--- | ---

\n | 换行 (0x0a)

\r | 回车 (0x0d)

\f | 换页符(0x0c)

\b | 退格 (0x08)

\s | 空格 (0x20)

\t | 制表符

\" | 双引号

\' | 单引号

\\ | 反斜杠

\ddd | 八进制字符 (ddd)

\uxxxx | 16进制Unicode字符 (xxxx)

## 修饰符

Java语言提供了很多修饰符,主要分为以下两类:

- 访问修饰符

- 非访问修饰符

-

修饰符用来定义类、方法或者变量,通常放在语句的最前端。我们通过下面的例子来说明:

```java

public class className {

// ...

}

private boolean myFlag;

static final double weeks = 9.5;

protected static final int BOXWIDTH = 42;

public static void main(String[] arguments) {

// 方法体

}

```

### 访问控制修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。

- 默认的,也称为 default,在同一包内可见,不使用任何修饰符。

- 私有的,以 private 修饰符指定,在同一类内可见。

- 共有的,以 public 修饰符指定,对所有类可见。

- 受保护的,以 protected 修饰符指定,对同一包内的类和所有子类可见。

#### 访问控制和继承

请注意以下方法继承的规则:

- 父类中声明为public的方法在子类中也必须为public。

- 父类中声明为protected的方法在子类中要么声明为protected,要么声明为public。不能声明为private。

- 父类中声明为private的方法,不能够被继承。

### 非访问修饰符

为了实现一些其他的功能,Java也提供了许多非访问修饰符。

- static修饰符,用来创建类方法和类变量。

- Final修饰符,用来修饰类、方法和变量,final修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。

- Abstract修饰符,用来创建抽象类和抽象方法。

- Synchronized和volatile修饰符,主要用于线程的编程。

#### Static修饰符

- 静态变量:

Static关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被成为类变量。局部变量不能被声明为static变量。

- 静态方法:

Static关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。

#### Final修饰符

##### Final变量:

Final变量能被显式地初始化并且只能初始化一次。被声明为final的对象的引用不能指向不同的对象。但是final对象里的数据可以被改变。也就是说final对象的引用不能改变,但是里面的值可以改变。

Final修饰符通常和static修饰符一起使用来创建类常量。

实例:

```java

public class Test{

final int value = 10;

// 下面是声明常量的实例

public static final int BOXWIDTH = 6;

static final String TITLE = "Manager";

public void changeValue(){

value = 12; //将输出一个错误

}

}

```

##### Final方法

类中的Final方法可以被子类继承,但是不能被子类修改。

声明final方法的主要目的是防止该方法的内容被修改。

如下所示,使用final修饰符声明方法。

```java

public class Test{

public final void changeName(){

// 方法体

}

}

```

##### Final类

Final类不能被继承,没有类能够继承final类的任何特性。

实例:

```java

public final class Test {

// 类体

}

```

#### Abstract修饰符

##### 抽象类:

抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。

一个类不能同时被abstract和final修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。

抽象类可以包含抽象方法和非抽象方法。

实例:

```java

abstract class Caravan{

private double price;

private String model;

private String year;

public abstract void goFast(); //抽象方法

public abstract void changeColor();

}

```

##### 抽象方法

抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。抽象方法不能被声明成final和strict。

任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。

如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。

抽象方法的声明以分号结尾,例如:public abstract sample();

实例:

```java

public abstract class SuperClass{

abstract void m(); //抽象方法

}

class SubClass extends SuperClass{

//实现抽象方法

void m(){

.........

}

}

```

#### Synchronized修饰符

Synchronized关键字声明的方法同一时间只能被一个线程访问。Synchronized修饰符可以应用于四个访问修饰符。

实例:

```java

public synchronized void showDetails(){

.......

}

```

#### Transient修饰符

序列化的对象包含被transient修饰的实例变量时,java虚拟机(JVM)跳过该特定的变量。

该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。

实例:

```java

public transient int limit = 55;  // will not persist

public int b; // will persist

```

#### Volatile修饰符

Volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

一个volatile对象引用可能是null。

实例:

```java

public class MyRunnable implements Runnable

{

private volatile boolean active;

public void run()

{

active = true;

while (active) // 第一行

{

// 代码

}

}

public void stop()

{

active = false; // 第二行

}

}

```

通常情况下,在一个线程调用 run() 方法(在 Runnable 开启的线程),在另一个线程调用 stop() 方法。 如果 第一行 中缓冲区的 active 值被使用,那么在 第二行 的 active 值为 false 时循环不会停止。

但是以上代码中我们使用了 volatile 修饰 active,所以该循环会停止。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,602评论 18 399
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,590评论 4 12
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 姓名:冉乔琪~公司:天兴医药 【日精进打卡第※138※天】 【知~学习】 《六项精进》2遍 共356遍 《大学》1...
    小小新酱阅读 190评论 0 0
  • real_chy阅读 261评论 0 0