目录
前言
Java 语言的主要特性:
- Java 语言是简单的:
Java 语言的语法与 C 语言和 C++ 语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java 丢弃了 C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java 语言不使用指针,而是引用。并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧。
- Java 语言是面向对象的:
Java 语言提供类、接口和继承等面向对象的特性,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为 implements)。Java 语言全面支持动态绑定,而 C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。
- Java 语言是分布式的:
Java 语言支持 Internet 应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括 URL、URLConnection、Socket、ServerSocket 等。Java 的 RMI(远程方法激活)机制也是开发分布式应用的重要手段。
- Java 语言是健壮的:
Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。对指针的丢弃是 Java 的明智选择。Java 的安全检查机制使得 Java 更具健壮性。
- Java 语言是安全的:
Java通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。除了Java 语言具有的许多安全特性以外,Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。
- Java 语言是体系结构中立的:
Java 程序(后缀为 java 的文件)在 Java 平台上被编译为体系结构中立的字节码格式(后缀为 class 的文件),然后可以在实现这个 Java 平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。
- Java 语言是可移植的:
这种可移植性来源于体系结构中立性,另外,Java 还严格规定了各个基本数据类型的长度。Java 系统本身也具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。
- Java 语言是解释型的:
如前所述,Java 程序在 Java 平台上被编译为字节码格式,然后可以在实现这个 Java 平台的任何系统中运行。在运行时,Java 平台中的 Java 解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
- Java 语言是高性能的:
与那些解释型的高级脚本语言相比,Java 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越接近于 C++。
- Java 语言是多线程的:
在 Java 语言中,线程是一种特殊的对象,它必须由 Thread 类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为 Thread(Runnable) 的构造子类将一个实现了 Runnable 接口的对象包装成一个线程,其二,从 Thread 类派生出子类并重写 run 方法,使用该子类创建的对象即为线程。值得注意的是 Thread 类已经实现了 Runnable 接口,因此,任何一个线程均有它的 run 方法,而 run 方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java 语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为 synchronized)。
- Java 语言是动态的:
Java 语言的设计目标之一是适应于动态变化的环境。Java 程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java 中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
一、二进制
- 计算机中的数据都以二进制数字保存。
- 二进制:逢二进一,即只有0、1两个值。
如:十进制的 10 在计算机内保存为二进制的 1010。
- 计算机中信息的存储单位
位(Bit):表示一个二进制数码 0 或 1,是计算机存储处理信息的最基本单位。
字节(Byte):一个字节由 8个位组成。它表示作为一个完整处理单位的 8 个二进制数码。
1.1 补码
事实上,计算机内的二进制数值是以补码形式表示的。
补码:
- 一个正数的补码和其原码的形式是相同的。
- 负数的补码是:将该数的绝对值的二进制形式,按位取反再加1。
由此可知,二进制补码数值的最高位(最左位)是符号位:该位为0,表示数值为正数;该位为1,表示数值为负数。
10 | 00000000 00000000 00000000 00001010 |
---|---|
-10 | 11111111 11111111 11111111 11110110 |
主要原因:
使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
1.2 二进制和十进制之间的互换
二进制数转换成十进制数:
按权相加:把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。
例子:
原码 101101 101101 101101 = = = 1 × 2 3 1 \times 2^3 1×23 + 0 × 2 2 +0\times2^2 +0×22 + 1 × 2 1 +1\times2^1 +1×21 + 1 × 2 0 +1\times2^0 +1×20 + 0 × 2 − 1 +0\times2^{-1} +0×2−1 + 1 × 2 − 2 = +1\times2^{-2}=\, +1×2−2= 8 + 0 + 2 + 1 + 0 + 0.25 8+0+2+1+0+0.25\, 8+0+2+1+0+0.25 = 11.25 =11.25 =11.25
十进制数转换成二进制数:
- 整数部分:“除2取余,逆序排列”法
- 小数部分:“乘2取整,顺序排序”法
注意:编程时若涉及复杂的进制运算可借助计算器中的程序员模式!
二、变量与数据类型
变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。由于该存储单元中的数据可以发送改变,因此得名为“变量”。
如下图:
因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。
2.1 变量分类
按所属的数据类型划分:
- 基本数据类型变量
- 引用数据类型变量
按被声明的位置划分:
- 局部变量:方法或者语句块内部定义的变量
- 成员变量:方法外部、类的内部定义的变量
特别注意:类的外面不能有变量的声明
2.2 数据类型
由于变量记录的数据内容大小不同,导致所需的存储单元大小不同,在 Java 语言中使用数据类型的概念加以描述。
字节是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。Java 中的字节是八位的字节,即它包含八位的二进制数。
类型 | 占用内存 | 值范围(含边界值) | 默认值 |
---|---|---|---|
整数型(int) | 4字节 | -214783648 ~ 2147483647 | 0 |
短整型(short) | 2字节 | -32768 ~ 32767 | 0 |
长整型(long) | 8字节 | -9223372036854775808L ~ 9223372036854775807L | 0 |
字节型(byte) | 1字节 | -128 ~ 127 | 0 |
浮点型(float) | 4字节 | -3.40292347E+38 ~ 3.40292347E+38 | 0.0f |
双精度浮点型(double) | 8字节 | -1.79769313486231570E+308 ~ 1.79769313486231570E+308 | 0.0d |
布尔型(boolean) | 1字节 | true 或 false | false |
字符型(char) | 2字节 | ‘\u0000 ~ u\ffff’ | ‘\u0000’ |
2.3 类型转换
boolean 类型不能转换成任何其它数据类型。
自动类型转换: 容量小的类型自动转换成容量大的数据类型。
byte,short,int 不会互相转换,它们三者在计算时会转换成 int 类型。
强制类型转换:容量大的类型转换成容量小的数据类型时,要加上强制转换符:
long l = 100L;
int i = (int)l;
注意:
有可能造成精度降低或数据溢出,使用时要小心。
2.4 关键字大全
Java 中有一些赋予特定的含义,有专门用途的字符串称为关键字(keyword),全部都为小写。
三、方法的使用
3.1 概述
方法用于封装一段特定的逻辑功能。方法的主要要素有:权限修饰符、方法名、参数列表和返回值。
格式:
权限修饰符 返回值类型声明 方法名称(参数列表){
方法中封装的逻辑功能;
return 返回值;
}
3.2 权限修饰符详解
3.3 返回值详解
- 方法调用结束后可以返回一个数据,称之为返回值。
- 方法在声明时必须指定返回值的类型。
- 通过 return 语句返回,return 语句的作用在于结束方法且将数据返回。
- 如果方法没有返回值(即方法不需要返回数据),需将返回值类型声明为 void。
3.4 参数列表详解
- 方法的参数列表:在调用时传递给方法,需要被方法处理的数据。
- 在方法定义时,需要声明该方法所需要的参数变量。
- 在方法调用时,会将实际参数值传递给方法的参数变量。必须保证传递参数的类型和个数符合方法的声明。
3.5 方法实例
//返回较大的数
public static int max(int num1, int num2){
return num1 > num2 ? num1 : num2;
}
四、运算符的使用
4.1 算术运算符
++ 运算符:
- 如果是变量前缀:先对此变量加1,再执行其他的操作。
- 如果是变量后缀:先执行当前语句的其他操作,再对此变量加1。
-- 运算符:
- 如果是变量前缀:先对此变量减1,再执行其他的操作。
- 如果是变量后缀:先执行当前语句的其他操作,再对此变量减1。
实例:
/**
* ++和--放在变量前后的区别,注意观察运算结果
*/
public class IO_test02 {
public static void main(String[] args) {
int i = 3;
System.out.println(i++);
System.out.println(i);
System.out.println("-----------------------");
int j = 3;
System.out.println(++j);
System.out.println(j);
System.out.println("-----------------------");
int k = 3;
System.out.println(k--);
System.out.println(k);
System.out.println("-----------------------");
int n = 3;
System.out.println(--n);
System.out.println(n);
}
}
运行结果:
4.2 赋值运算符
赋值运算符作用是将一个值赋值给一个变量,运算顺序从右到左。
4.3 关系运算符
关系运算符作用是比较两边的操作数,结果总是 boolean 型的。
4.4 逻辑运算符
逻辑运算符用于对 boolean 型结果的表达式进行运算,运算结果总是 boolean 型。
4.5 字符串连接运算符
String s = "she "+"is “+“my girl!”,结果为"she is my girl!”
"+"除了可用于字符串相连接,也能将字符串与其它的数据类型相连成一个新的字符串。
如:String s = “你好”+1024;
结果为“你好1024”
实例:
public class IO_test01 {
public static void main(String[] args) {
String s = "she "+"is "+"my girl!";
System.out.println(s);
String s1 = "你好"+"1024";
System.out.println(s1);
}
}
运行结果:
4.6 三目运算符
X?Y:Z
X为 boolean 类型表达式,先计算 x 的值,若为 true,整个三目运算的结果为表达式y的值,否则整个运算结果为表达式 z 的值。
实例:
public class IO_test01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
int num2 = sc.nextInt();
System.out.println(num1>num2?num1+"大":num2+"大");
}
}
运行结果:
五、变量作用域以及转义字符
5.1 变量作用域
在局部变量中,内部范围可以访问外部范围的变量,外部范围不能访问内部范围的变量。
实例1:
public class IO_test02 {
public static void main(String[] args) {
int a = 2,b = 3;
{
System.out.println(a+b);
}
}
}
运行结果:
实例2:
/**
* 变量的作用域
* 代码分为结构定义语句和功能执行语句,
* 功能执行语句必须以英文分号结尾。
*/
public class IO_test01 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = a+b;
System.out.println(c);
say(c);
}
private static void say(int d) {
System.out.println(d);
}
}
运行结果:
5.2 转义字符
实例:
public class T8 {
public static void main(String[] args) {
System.out.println("乘法口诀表");
for(int i=1;i<=9;i++){
for (int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+j*i+"\t");
}
System.out.println();
}
}
}
运行结果: