浅谈Java特性,浅谈java
浅谈Java特性,浅谈java
学习Java有几个月了,记录下此时的体会与总结。结合Java体系结构、JVM原理和JDK源码,谈谈我对Java的理解及其特性的分析。
Java语言特性
SUN公司对Java的描述:
“Java is a simple,object-oriented, distributed,
interpreted, robust, secure, architecture neutral, portable,
high-performance, multihreaded, and dynamic language”.
Java语言最初是面向嵌入式系统开发的语言,其主要是为了满足“一次编译,到处运行”的需求。众所周知,Java具有健壮性、安全性、平台无关性、可移植性、面向对象等特性。随着网络技术的发展,分布式的大量应用,Java语言逐渐发展出面向网络的特性。
简易性
较之C/C++,Java简单且好用,它抛弃了指针、操作符重载、类多继承、自动强制类型转换。
不支持操作符重载
Java中仅有的两个操作符重载为String的+ 和+=
查看String的注释,发现Java为其提供特殊支持,+操作会转化为StringBuilder或StringBuffer,调用append方法完成。
* The Java language provides special support for the string
* concatenation operator ( + ), and for conversion of
* other objects to strings. String concatenation is implemented
* through the {@code StringBuilder}(or {@code StringBuffer})
* class and its {@code append} method.
不支持指针
- Java没有显式地使用指针
- JVM由C++实现,其操作可能涉及指针操作
- JVM调用native方法可能涉及指针操作
不支持类的多继承
- 此处放到面向对象特性讲
不支持自动强制类型转换
- 使用强制类型转换的时候要加上强制类型转换符()
- 自动类型转换:类型要兼容且目标类型要大于源类型
- boolean不允许任何类型的转换
- 类数据类型不允许转换(同族可以)
boolean类型较为特殊
- 编译成字节码时用int或byte表示
- JVM中,0表示false;非零表示true;
- boolean用int操作
- boolean数组用byte数组访问
int i = 0;
char c = 'a';
int x = c;//使用自动类型转换
byte b1 = i;//使用自动强制类型转换,错误
byte b2 = (byte)i;//使用显式强制类型转换,正确
面向对象
说到面向对象,不得不说其三大特性:继承、封装和多态。其作用如复用性、耦合性在此不再赘述。
继承
- Java支持类的单继承
- Java支持接口的多继承,Java集合框架中许多体现
- 创建一个类若不显式指明继承关系,隐式继承自Object
- 使用extends关键字,自动得到基类中所有域和方法(包括私有,但无法访问)
- 基类包装在子类的内部,这解释为何先调用父类构造函数
多态
相同类型的引用变量,调用同一个方法呈现不同行为特征。
重载&重写
重载 静态分派
静态、私有、实例构造器、父类方法会在解析阶段把符号引用转化为直接引用重写 动态分派
运行期根据实际类型方法执行分派
本质把常量池中类方法的符号引用解析到不同的直接引用上
重写规则:两同两小一大
- 方法名,参数列表相同
- 返回类型和抛出异常小于父类
- 访问权限大于父类
封装
访问控制符
- 外部类:public default abstract final修饰
- 内部类:所有
- 局部内部类:相当于成员变量,无访问控制修饰符
安全性&健壮性
内置于JVM的安全特性确保了Java语言的健壮性。但Java的分布式、面向网络特性会带来安全问题,Java安全模型是一种扩展的内置安全模型,侧重于保护用户避免来自网络的恶意代码的侵害。强化其了健壮性,故一起分析。
类装载器双亲委派模型
- 防止不可靠类代替信任类
- 通过包权限控制不可靠类的活动范围
class文件检验器
- 即类加载验证阶段,在此不赘述
内置于JVM的安全特性
- 类型安全的引用转换
- 自动垃圾回收
- 内存结构化访问
1.无指针
2.class文件里无内存布局信息 - 数组边界检查
- 对象引用检查:引用非空
- 异常的结构化处理
安全管理器及Java API
代码签名和认证
平台无关性
平台无关性来自于JVM、Java语言、class文件、API的支持
JVM
- Java程序只需要与JVM交互,JVM通过API和主机交互
- 字节码指令集面向操作数栈而不是寄存器
Java语言
- 基本数据类型的值域和行为都是由语言自己定义的
class文件
- 8位字节为基础单位的二进制流
- 严格限制字节码存储格式,与JVM无关
面向网络
Class文件
- 将程序分割为各个Class文件传输:动态连接与扩展特性
- 文件格式紧凑,8位字节为基础,便于传输
RMI
- 远程对象将会把自身的一个拷贝序列化后以Socket的形式传输给客户端
序列化
- 对象可以被表示为一个字节序列,便于存储和传输
问题
面向网络:分布式传输性能、及安全问题
健壮性:垃圾收集器给内存管理和线程调度带来问题
平台无关性:API最小公分母问题
保密性:Java语言和class文件联系紧密,class文件包含过多信息;混淆器
相关文章
- 暂无相关文章
用户点评