Java入门必备:环境配置与高效开发技巧

Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于 PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

背景

Java 是由 Sun Microsystems 公司推出的 Java 面向对象程序设计语言(以下简称 Java 语言)和 Java 平台的总称。由 James Gosling 和同事们共同研发,并在 1995 年正式推出。Java 最初被称为 Oak,是 1991 年为消费类电子产品的嵌入式芯片而设计的。1995 年更名为 Java,并重新设计用于开发 Internet 应用程序。用 Java 实现的 HotJava 浏览器(支持 Java applet)显示了 Java 的魅力:跨平台、动态 Web、Internet 计算。从此,Java 被广泛接受并推动了 Web 的迅速发展,常用的浏览器均支持 Javaapplet。另一方面,Java 技术也不断更新。Java 自面世后就非常流行,发展迅速,对 C++ 语言形成有力冲击。在全球云计算和移动互联网的产业环境下,Java 更具备了显著优势和广阔前景。2010 年 Oracle 公司收购 Sun Microsystems。

体系

java 分三个体系

  1. JavaSE (Java 2 Platform, Standard Edition)
  2. JavaEE (Java 2 Platform, Enterprise Edition)
  3. JavaME (Java 2 Platform, Micro Edition)

特点

  • 简单性
    • Java 容易学习,相对于 C++ 而言更加纯净。
    • 小,基本的解释器以及类支持仅有 40k.
  • 面向对象的语言(OO)
    • 封装
    • 继承
    • 多肽
    • 方法重载
    • 方法覆盖
  • 一种与平台无关的语言
    • 解释性语言,一次编译,到处运行(JVM)
  • 健壮性和安全性
    • 删除了指针和释放内存等 C++ 功能,避免了非法内存操作。
    • 通过 Java 的安全体系架构来确保 Java 代码的安全性。
  • 多线程
    • 多线程应用程序能够同时运行多项任务。
    • Java 中实现多线程相对于其他语言具有独特的优势。
  • 垃圾回收
    • 垃圾收集机制(Garbage collection)
      • 什么是垃圾?
        无任何引用的对象占据的内存空间
        C/C++ 是由程序员负责回收无用内存,
        java 中程序员无法控制和干预,只能由系统决定什么时候回收垃圾

关键字

关键字 描述
abstract 抽象方法,抽象类的修饰符
assert 断言条件是否满足
continue 不执行循环体剩余部分
default switch 语句中的默认分支
do-while 循环语句,循环体至少会执行一次
double 64-bit 双精度浮点数
else if 条件不成立时执行的分支
enum 枚举类型
extends 表示一个类是另一个类的子类
final 表示定义常量
finally 无论有没有异常发生都执行代码
float 32-bit 单精度浮点数
for for 循环语句
goto 用于流程控制
if 条件语句
implements 表示一个类实现了接口
import 导入类
implements 测试一个对象是否是某个类的实例
int 32 位整型数
interface 接口,一种抽象的类型,仅有方法和常量的定义
long 64 位整型数
native 表示方法用非 java 代码实现
new 分配新的类实例
package 一系列相关类组成一个包
private 表示私有字段,或者方法等,只能从类内部访问
protected 表示保护类型字段
public 表示共有属性或者方法
return 方法返回值
short 16 位数字
static 表示在类级别定义,所有实例共享的
strictfp 浮点数比较使用严格的规则
super 表示基类
switch 选择语句
while while 循环
volatile 标记字段可能会被多个线程同时访问,而不做同步
void 标记方法不返回任何值
try 表示代码块要做异常处理
transient 修饰不要序列化的字段
throw 抛出异常
this 调用当前实例或者调用另一个构造函数
synchronized 表示同一时间只能由一个线程访问的代码块

JDK 和 JRE

  • JDK 叫做 java 开发工具集。包括 java 的编译环境、运行环境、调试环境,以及基础类库。
  • JRE 叫做 java 运行环境。包括虚拟机、核心类库,以及链接文件。
    JDK 包含 JRE

数据类型、变量、常量

数据类型

  • 数据类型是一种易于人类阅读的标记,用来表示计算机内存的特定用法。
  • 在程序中使用时,数据类型规定所使用内存的大小以及在该内存中可存放的有效值。
  • Java 是一种强类型编程语言,这意味着在 Java 程序中用到的所有变量都必须有明确定义的数据类型

基本数据类型

数值型
类型 A 占用存储空间 范围
byte 1 字节(8 位) −27−27 到 27−127−1
short 2 字节(16 位) −2  的  15  次方 −2 的 15 次方   到  2  的  15  次方 −12 的 15 次方 −1
int 4 字节(32 位) −2  的  31  次方 −2 的 31 次方到 2  的  31  次方 −12 的 31 次方 −1
long 8 字节(64 位) −2  的  63  次方 −2 的 63 次方到 2  的  63  次方 −12 的 63 次方 −1
float 4 字节(32 位) −2  的  31  次方 −2 的 31 次方到 2  的  31  次方 −12 的 31 次方 −1
double 8 字节(64 位) −2  的  63  次方 −2 的 63 次方到 2  的  63  次方 −12 的 63 次方 −1
字符型
  • char 型数据用来表示通常意义上 “字符”。
  • 字符常量为用单引号括起来的单个字符。
  • Java 字符采用 Unicode 编码,每个字符占两个字节。
    • ‘A’的编码是:65 依次类推
    • ‘a’的编码是:97 依次类推
  • Java 语言中还允许使用转义符 \ 来将其后的字符转变为其它的含义。例如 \n,\t
boolean
  • boolean 类型适于逻辑运算,一般用于程序流程控制。
  • boolean 类型数据只允许取值 true 或 false, 不可以 0 或非 0 的整数替代 false 和 true ,这点和 C 语言不同。
    • 用法举例:
      boolean flag = true;
      flag = 5 > 3;
声明和创建变量
  • Java 变量是程序中最基本的存储单元,其要素包括数据类型,变量名和变量值。
  • Java 程序中每一个变量都属于特定的数据类型,在使用前必须对其声明,声明格式为:
    数据类型 变量名,变量值;
  • 变量其实是内存中的一小块区域,使用变量名来访问这块区域。
变量的初始化
  • 声明变量后,应该对变量进行初始化(养成习惯)
  • 初始化的语法:
    数据类型 变量名 = 初始值;
    • 比如:
      int i = 0;
      等同于:
      int i;
      i = 0;
变量的内存组织方式
常量
  • Java 的常量值用字符串表示,区分为不同的数据类型。

    • 如整型常量 123
    • 实型常量 3.14
    • 字符常量’a’
    • 逻辑常量 true、false
    • 字符串常量”helloworld”
  • 注意:区分字符常量和字符串常量。

  • Java 浮点型常量默认为 double 型,如要声明一个常量为 float 型,则需在数字后面加 f 或 F。

  • 我们也可以给常量命一个标示符名

  • 语法如下:

    • final 数据类型 标示符 = 常量值;
  • 符号常量声明的时候必须赋值

  • 在整个程序中不能改变不能重新赋值

为什么使用常量
  • 使用符号常量的好处是:
    • 含义清楚。如上面的程序中,看程序时从 PRICE 就可知道它代表价格。
    • 在需要改变一个常量时能做到 “一改全改”。例如在程序中多处用到某物品的价格,如果价格用常数表示,则在价格调整时,就需要在程序中作作出修改,若用符号常量 PRICE 代表价格,只需改动一处即可。
标识符
  • Java 标识符命名规则:
    • 标识符由字母、下划线 _、美元符“$” 或数字组成。
    • 标识符应以字母、下划线、美元符开头。
    • Java 标识符大小写敏感,长度无限制。
    • “见名知意” 。
    • 约定俗成的规则

java 环境变量配置

什么是环境变量

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。

环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如 Windows 和 DOS 操作系统中的 path 环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到 path 中指定的路径去找。用户通过设置环境变量,来更好的运行进程。

可以在用户变量和系统环境变量设置

区别: 用户变量只能是当前登录的用户才有效果
系统变量是你电脑上的全部用户都可以使用

第一步:设置 JAVA_HOME 变量
JAVA_HOME 的值是你安装 java 的目录路径
比如我的 java 安装路径 D:\java\jdk1.8.0_45
设置:
变量名:JAVA_HONE
值:D:\java\jdk1.8.0_45
第二步:设置 classpath 变量
设置
变量名:classpath
值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tooles.jar
注意:一定要在最前面加上 .; 表示在当前路径下查找

第三步:设置 Path 变量 (环境变量有 Path 变量,只需要在后面添加值即可)
设置:
变量名:Path
值: ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(添加到最后面,注意分号)

dt.jartools.jar 是两个 java 最基本的包,里面包含了从 java 最重要的 lang 包到各种高级功能如可视化的 swing 包,是 java 必不可少的。
而 path 下面的 bin 里面都是 java 的可执行的编译器及其工具,如 java,javadoc 等,你在任意的文件夹下面运行 cmd 键入 javac,系统就能自动召见 java 的编译器就是归功于这个环境变量的设置

rt.jar 是 JAVA 基础类库,dt.jar 是关于运行环境的类库,tools.jar 是工具类库

把 javac 和 java 命令添加到鼠标右键运行

最常用的方法就是在 java 文件上右键打开方式选 javac.exe 打开这个 java 文件,如果没有语法错误,会生成一个 XXX.class 文件
但是有两个问题:

  • 当这个 java 文件有错误的时候,右键用 jacac.exe 打开会出现 cmd 窗口,但是它会马上关闭,可以说是一闪而过,我们看不到错误信息。
  • 如果我们编译通过了,然后还要右键那个 class 文件,然后用 java.exe 打开,这样很麻烦。

所以我推荐下面这种方法
不是简单的用 java 和 javac 命令打开
这样我们就不用每次都进入 cmd 然后进去到 java 文件所在路径,然后在输入 javac xxx.java 编译 和 java xxx 运行了
直接鼠标右键 单击 编译并运行 就可以直接编译并且输出结果。如果有错误,也会显示完整错误信息,不会一闪而过。

  • 新建 runJava.txt,改后缀为 bat,用记事本打开,复制以下代码到这个文件中 然后保存并把这个文件放在一个不经常动的地方
    我放在了 F 盘的 java 文件夹下
1
2
3
4
5
6
7
8
9
10
11
12
13
@ECHO OFF
cd %~dp1 %转到当前目录下%
IF EXIST %~n1.class ( %如果有xxx.class 则执行 删除命令,将原来旧的class文件 %
DEL %~n1.class
)
ECHO Compiling %~nx1 %在控制台显示 Compiling xxx.java%
javac -d . %~nx1 %执行javac命令 -d 参数的意思是 指定放置生成的类文件的位置 . 的意思是放在当前目录下 %
@ECHO OFF
IF EXIST %~n1.class ( %如果存在xxx.class 说明编译成功 则执行java命令 %
ECHO ---------Out----------
java %~n1 %执行java命令%
)
pause
  • 添加到鼠标右键:新建 java.txt 文件,改后缀为 reg,用记事本打开 复制以下代码到文件中
    说明@=”\”F:\Java\runJava.bat\” \”%1\”” 这一行需要改成第一步中 runJava.bat 所在文件夹目录
1
2
3
4
5
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\java]
@="编译并运行"
[HKEY_CLASSES_ROOT\*\shell\java\Command]
@="\"F:\\Java\\runJava.bat\" \"%1\""

然后双击这个文件,将这个键值添加到注册表中。
注意:这里涉及到改注册表,有风险,如果信得过我,只管点就是,我就是这个做的。