Java语言的特点
- Java的设计者已经编写了关于Java的"白皮书",其中发布了一个简短的摘要,摘要用11个关键术语组织,也可以认为是Java的主要特点吧。
- 简单性
- 面向对象
- 分布式
- 健壮性
- 安全性
- 体系结构中立
- 可移植性
- 解释型
- 高性能
- 多线程
- 动态性
简单性
-
相对于C++,java显然要简单许多。简单性最主要的体现就是Java剔除了C++ 中许多很少使用、难以理解、容易混淆的特性。Java的语法更像是C++语法的一个"纯净"版本,在Java中,没有头文件、指针运算、结构、联合、操作符重载、虚基类等。
-
简单的另一个方面是小。Java的目标之一是支持开发能够在小型机器上独立运行的软件。基本的解释器以及类支持大约仅为40KB,再加上基础的标准类库和对线程的支持,大约需要增加175KB。现在有一个独立的具有较小类库的Java微型版,这个版本适用于嵌入式装备。
面向对象
-
面向对象是一种程序设计技术。它将重点放在数据和对象的接口上。
-
Java的面向对象能力与C++ 是旗鼓相当的。与C++中的多重继承不同的是,在Java中,取而代之的是更简单的接口概念。
分布式
- Java有一个丰富的例程库,用于处理HTTP和FTP之类的TCP/IP协议。Java能够通过URL直接访问网络上的对象,其便捷程度就好像访问本地文件。
健壮性
- Java编译器能够检测许多在其他语言中仅在运行时才能够检测出来的问题。而Java与C++ 最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性。
安全性
- 一开始的Java就能够防范各种攻击,这主要因为java中不可信代码在一个沙箱环境中执行,它不会影响主系统。不过,由于java的安全模型非常复杂,在第一版发布不久之后,普林斯顿大学的安全专家就发现了一些小bug会允许不可信代码攻击主系统。
- 虽然之后都有修复,但是黑客已经熟悉了寻找这一漏洞,Java浏览器插件不在信任远程代码。
体系结构中立
- Java编译器会生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,这些编译后的代码就可以在许多处理器上运行。Java编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。精心设计的字节码不仅可以很容易的在任何机器上解释执行,而且还可以动态的翻译成本地机器代码。
- Java虚拟机还有一些其他优点。它可以检测指令序列的行为,从而增强安全性。
可移植性
- 与C和C++ 不同,Java规范中没有"依赖具体实现"的地方,基本数据类型的大小以及有关运算都做了明确的说明。消除了代码移植时令人头疼的主要问题。
- 除了与用户界面有关的部分外,所有其他Java类库都能很好的支持平台的独立性。意思就是你可以处理文件、正则表达式、XML、日期和时间、数据库、网络连接、线程等,而不用操心底层的操作系统。
解释型
- Java解释器可以在任何移植了解释器的机器上执行Java字节码。由于链接是一个增量式且轻量级的过程,所以,开发过程也变得更加便捷,更加具有探索性。
高性能
- 虽然对解释后的字节码已经比较满意,但是在有些场合下还是需要更高效的性能。字节码可以动态地翻译成对应运行这个应用的特定CPU的机器码。
- 即时编译器可以监控程序运行,并且优化代码提高运行速度。
多线程
- 多线程可以带来更好的交互响应和实时行为。
- 因为摩尔定律行将完结,我们不在追求更快的处理器,而是着眼于获得更多的处理器,并且让它们一直保持工作。
- Java在当时很超前,它是第一个支持并发程序设计的主流语言。
动态性
- 从各种角度看,Java比C和C++ 更具有动态性。它能够适应不断发展的环境。库中可以自由地添加新方法和实例变量,而对客户端没有任何影响。
类的定义
-
类(class)是构造对象的模板或蓝图。由类构造(construct)对象的过程称为创建类的实例(instance)。
-
当你第一次创建Java文件时,通常都是public class 类名{} 的形式。这里的public是类的访问修饰符,表明该类是公共的,可以被其他类访问。访问修饰符必须出现在class之前,以此来确定类的访问权限。
-
class是定义类的关键字,可以使用两种方式定义类: 1、public class定义类 2、class定义类
public class和class的区别
- 如果声明一个类的时候使用了public class,则类名称必须与文件名称完全一致。
- 如果声明一个类的时候使用了class,则作为启动类的名称可以和文件名称不一致,但是执行的时候肯定执行的是生成后的名称(也就是.class文件)
- 两种声明方式的访问权限是不同的
- 每个编译单元都只能有一个public类。即每个编译单元都有单一的公共接口,用public类实现,main()方法必须包含在public类中。(但是每个编译单元可以有多个class类,如果没有public类,main方法可不必写在public类中,写class类也可以)
Java中的标识符
- Java中标识符由字母、数字、下划线和美元符号组成。
- Java中标识符不能以数字开头。
- Java中标识符不能是Java关键字和保留字。
- Java中标识符是区分大小写的。
- 驼峰命名法(Camel-Case): 当变量名或函式名是由一个或多个单字连结在一起,而构成的唯一识别字时,首字母以小写开头,每个单词首字母大写(第一个单词除外)。 如:myFirstName
Java中的基本数据类型
- Java中的基本数据类型主要分为整型、浮点型、字符型、布尔型四大类。
1. 整型(byte、short、int、long)
- byte:8位 用于表示最小数据单位,范围-128~127
- short:16位 很少用 范围-32768~32767
- int:32位 最常用 范围-231-1~231
- long:64位 次常用
- 注意事项: int i=5; // 5 叫直接量(或字面量),即 直接写出的常数。 整数字面量默认都为 int 类型,所以在定义的 long 型数据后面加 L或 l。 小于 32 位数的变量,都按 int 结果计算。 强转符比数学运算符优先级高。
- 初始值都是0
2. 浮点型(float、double)
- float:32位 后缀f或F 1 位符号位,8 位指数,23 位有效尾数。
- double:64 位,最常用,后缀 D 或 d,1 位符号位,11 位指数,52 位有效尾
- 注意事项: 二 进 制 浮 点 数 : 1010100010=101010001.02=10101000.10210(2次方)=1010100.010*211(3次方)= . 1010100010*2^1010(10次方) 尾数: . 1010100010 指数:1010 基数:2 浮点数字面量默认都为 double 类型,所以在定义的 float 型数据后面加F 或 f;double 类型可不写后缀,但在小数计算中一定要写 D 或 X.X float 的精度没有 long 高,有效位数(尾数)短。 float 的范围大于 long 指数可以很大。 浮点数是不精确的,不能对浮点数进行精确比较。
- 初始值都是0.0
3. 字符型(char)
- char:16 位,是整数类型,用单引号括起来的 1 个字符(可以是一个中文字符),使用 Unicode 码代表字符,0~2^16-1(65535) 。
- 注意事项: 不能为 0个字符。 转义字符:\n 换行 \r 回车 \t Tab 字符 " 双引号 \ 表示一个\ 两字符 char 中间用“+”连接,内部先把字符转成 int 类型,再进行加法运算,char 本质就是个数!二进制的,显示的时候,经过“处理”显示为字符。
- 初始值是/u0000
4. 布尔型(boolean)
- true为真 false为假
- 初始默认值为false
类型转换
- Java中,低精度数据类型向高精度数据类型转换可以直接转换;高精度数据类型向低精度数据类型转换需要进行强转,因为会损失精度,容易超过取值范围。
逻辑运算符
&和&&
-
相同点:都是逻辑与(and)的运算符 当左右两边表达式都为true时 整个结果为true 有一方为false 则结果为false
-
不同点:&&具有短路功能 当左面的表达式为false时 直接跳过右面的表达式 即右面表达式出现运行时异常时 也可以直接跳过
例子:if(1>=0 && 1/0==0)
左边的结果为false 即使1/0会出现算数异常 也会直接跳过 整个结果显示为false
|和||
-
相同点:都是逻辑或的运算符 左右两边只要有一个true时 整个结果为true 都为false时 整体结果为false
-
不同点:和上面的双逻辑与一样,||也具有短路功能 ,当左面的表达式为true时,跳过右面的表达式,整体结果为true