目录
一、Java语言概述
1.1 Java 的出现
Java之父 James Gosling,发明Java的原因是:C 语言缺少垃圾回收系统和可移植的安全性、分布程序设计和多线程功能等。
Java 是类C语言,Java 是一个纯粹的面向对象的程序设计语言。Java 舍弃了C语言中容易引起错误的指针(Java 中以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间。JDK 1.5又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱。
1.2 Java的主要特性
Java语言是易学的
Java语言是强制面向对象的
Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为 implements)
Java语言是分布式的
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(Java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
Java语言是健壮的
Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。(Java没有指针)
Java语言是安全的
Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。如:安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查。
Java语言是体系结构中立的
Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。
Java语言是解释型的
Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统的解释器中运行
Java是性能略高的
Java语言是原生支持多线程的
在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建
1.3 Java语言的特点
面向对象
- 两个基本概念:类、对象
- 三大特性:封装、继承、多态
健壮性
- 吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制
跨平台性
- 跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。“Write once,Run Anywhere”
- 原理:只要在需要运行java应用程序的操作系统上,先安装一个Java虚拟机(JVM Java Virtual Machine)即可。由JVM来负责Java程序在该系统中的运行。
1.4 Java语言的核心机制
Java虚拟机(Java Virtual Machine)
- JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
- 对不同的平台,有不同的虚拟机。
- 只有某平台提供了对应的java虚拟机,java程序才可在此平台运行
- Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”
- .java——》(编译).class——》执行
- 硬件——》操作系统——》JVM——》字节码文件——》用户User
垃圾收集机制(Garbage Collection)
- 不再使用的内存空间以回收——垃圾回收
- 在C/C++等语言中,由程序员负责回收无用内存
- Java语言消除了程序员回收无用内存空间的责任,它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。
- 垃圾回收在Java程序运行过程中自动运行,程序员无法精确控制和干预
- Java程序还会出现内存泄漏和内存溢出问题
1.5 Java语言的环境搭建
JDK(Java Development Kit Java开发工具包)
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用再单独安装JRE了
- JDK中的开发工具有:编译工具(javac.exe)、打包工具(jar.exe)等
JRE(JavaRutime Environment Java运行环境)
JRE包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可
使用JDK的开发工具完成的java程序,交给JRE去运行
JDK、JRE、JVM的关系是什么?
- JDK = JRE + 开发工具集(例如Javac编译工具等)
- JRE = JVM + JavaSE标准类库
二、第一个Java程序
2.1 需要注意的问题
- 类文件名写错,当文件名与类名不一致时,要小心
- 类文件不在当前路径下,或者不再classpath指定路径下
- 声明为public的类应与文件名一致,否则编译失败
- 编译失败时,注意错误出现的行数,再到源代码中指定位置改错
2.2 注释(comment)
用于注解说明解释程序的文字就是注释
Java中的注释类型
- 单行注释
- 多行注释
- 文档注释(java特有)
注释的作用:
- 提高了代码的阅读性;调试程序的重要方法
文档注释
2.3 注意点:
- Java语言严格区分大小写
- 一个源文件中最多只能有一个public类。其他类的个数不限,如果源文件包含一个public类,则文件名必须按该类名命名。
2.4 Java API 的文档
- API(Application Programming Interface,应用程序编程接口)是Java提供的基本编程接口
- Java语言提供了大量的基础类,因此Oracle也为这些基础类提供了相应的API文档,用于告诉开发者如何使用这些类,以及这些类里包含的方法。
- 下载API
2.5 第一个 Java 程序
public class HelloWorld {
// 程序的入口
public static void main(String[] args) {
// 打印 HelloWorld
System.out.println("HelloWorld");
}
}
三、Java基本语法
3.1 Java中的名称命名规范
标识符(identifier)
3.2 关键字(keyword)和保留字
3.3 变量的使用
3.4 数据类型
3.4.1 整数类型
整型变量的声明、赋值、使用
public class UseOfVariables {
public static void main(String[] args) {
// 先声明,后赋值
int number1;
number1 = 10;
// 声明并直接赋值
int number2 = 20;
int number3 = number1 + number2;
System.out.println("Number3=" + number3);
}
}
3.4.2 浮点型变量
3.4.3 字符类型
3.4.4 布尔类型
3.4.5 基本数据类型转换
3.4.6 字符串类型
public class StringTest {
public static void main(String[] args) {
int no = 10;
// 字符串类型声明并赋值
String str = "abcdef";
String str1 = str + "xyz" + no;
System.out.println("str1=" + str1);
str1 += "123";
System.out.println("str1=" + str1);
// 声明并赋值字符类型变量 c
char c = '国';
// 声明定义并赋值 浮点数 double 类型 变量 pi
double pi = 3.14;
str1 += pi;
// 声明并定义布尔类型变量 b,赋值 为 false
boolean b = false;
str1 += b;
System.out.println("str1=" + str1);
str1 += c;
System.out.println("str1=" + str1);
}
}
3.4.7 强制类型转换
加 小括号
3.4.8 二进制
四、流程控制语句
4.1 顺序结构
程序从上到下逐行执行,中间没有任何判断和跳转
4.2 分支结构
- 根据条件,选择性地执行某段代码
- 有 if...else 和 switch-case 两种分支语句
public class IfelseTest {
public static void main(String[] args) {
int age = 75;
if(age<0) {
System.out.println("不可能");
} else if(age>250) {
System.out.println("是个妖怪");
} else {
System.out.println("人家芳龄" + age + ",马马虎虎啦");
}
}
}
switch-case
public class SwitchCaseTest {
public static void main(String[] args) {
int i = 1;
switch (i) {
case 0:
System.out.println("zero");
break;
case 1:
System.out.println("one");
break;
default:
System.out.println("default");
break;
}
}
}
public class SwitchCaseTestSeason {
public static void main(String[] args) {
String season = "summer";
switch (season) {
case "spring":
System.out.println("春暖花开");
break;
case "summer":
System.out.println("夏日炎炎");
break;
case "autumn":
System.out.println("秋高气爽");
break;
case "winter":
System.out.println("冬雪皑皑");
break;
default:
System.out.println("季节输入有误!");
break;
}
}
}
4.3 循环结构
- 根据循环条件,重复性的执行某段代码
- 有while、do...while、for三种循环语句
- 注意:JDK1.5提供了foreach循环,方便的遍历集合、数组元素
4.3.1 for循环
package unitOne01;
public class ForCirculate {
public static void main(String[] args) {
int result = 0;
for(int i = 1; i <= 100; i++) {
result += i;
}
System.out.println("result="+ result);
}
}
4.3.2 while 循环
package unitOne01;
public class WhileLoop {
public static void main(String[] args) {
int result = 0;
int i = 1;
while (i <= 100) {
result += i;
i++;
}
System.out.println("result="+ result);
}
}
4.3.3 do...while循环
package unitOne01;
public class DoWhileLoop {
public static void main(String[] args) {
// 声明并定义两个变量 result、i,并给它们赋初值 result = 0, i = 1
int result = 0, i = 1;
do {
result += i;
i++;
} while (i <= 100);
System.out.println("result=" + result);
}
}
4.3.4 练习题
package unitOne01;
import java.util.Scanner;
/*
* 从键盘读入个数不确定的整数,
* 并判断读入的正数和负数的个数,输入为0时结束程序。
*/
public class PositiveNegativeLoopTest {
public static void main(String[] args) {
// 键盘输入的方法 Scanner
Scanner scanner = new Scanner(System.in);
// 统计正数的个数
int positiveNumber = 0;
// 统计负数的个数
int negativeNumber = 0;
for(;;) { // while(true)
System.out.println("请输入一个整数:");
System.out.println("输入 0 结束游戏!");
int z = scanner.nextInt();
if(z>0) {
positiveNumber++;
} else if(z<0) {
negativeNumber++;
} else {
break;
}
}
System.out.println("正数的个数为:"+ positiveNumber);
System.out.println("负数的个数为:"+ negativeNumber);
}
}
4.3.5 嵌套循环
4.3.6 break的使用
package unitOne01;
public class UseBreakStatement {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
if (i == 3) {
break;
}
System.out.println("i="+ i);
}
System.out.println("Game Over!");
}
}
4.3.7 continue的使用
package unitOne01;
public class UseContinueStatement {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
if (i == 3) {
continue;
}
System.out.println("i="+ i);
}
System.out.println("游戏结束");
}
}