Java 概述性总结
学习一门编程语言的关键在于理解作者的思想,理解这门语言是因何而生。我觉得JAVA和C++有几点区别一切都是对象。移植性。所以没有sizeof,因为size不依赖于机器。虚拟机安全性。比如没有指针,增加垃圾回收机制。强制初始化简单性。特别是对web的支持。 1. 基础原理 OOP 思想 继承,重载,多态,abstract,interface 对象的创建与生命周期
学习一门编程语言的关键在于理解作者的思想,理解这门语言是因何而生。
我觉得JAVA和C++有几点区别
一切都是对象。
移植性。所以没有sizeof,因为size不依赖于机器。虚拟机
安全性。比如没有指针,增加垃圾回收机制。强制初始化
简单性。特别是对web的支持。
1. 基础原理
<1> OOP 思想
继承,重载,多态,abstract,interface
<2> 对象的创建与生命周期
只能用NEW,和C++不同,没有堆栈(只对于对象是如此,但普通变量和C++是类似的)
<3> 集合与迭代器
<4> 单根继承
<5> 向下转型(个人觉得向上和向下转型在形式上是强制类型转换)
<6> 垃圾回收器
<7> 异常处理
<8> 并发(多线程)
<9> 持久性,及对象序列化
<10> java与 internet
applet,是编译过的。它运行于沙盒中,它可以选择签名机制
2. 关键字及结构
<1> 权限 private,public,protected,packaged(friendly)
有几个可以引用成员变量的地方: 类自身的函数,类自身的对象,继承类的函数,继承类的对象
在C++中:
类自身函数 | 类自身对象 | 继承类函数 | 继承类对象 | ||
public | YES | YES | YES | YES | |
public 继承 | protect | YES | NO | YES | NO |
private | YES | NO | NO | NO | |
protect 继承 | public | YES | YES | YES | NO |
protect | YES | NO | YES | NO | |
private | YES | NO | NO | NO | |
private 继承 | public | YES | YES | YES | NO |
protect | YES | NO | YES | NO | |
private | YES | NO | NO | NO |
总结起来, 权限 类自身函数>继承类函数>类自身对象>继承类对象,默认时为private
在java中:
类自身函数 | 类自身对象 | 继承类函数 | 继承类对象 | ||
public | YES | YES | YES | YES | |
extends 继承 | protect | YES | YES | YES | YES |
private | YES | NO | NO | NO |
在不写时,默认为package(对外) + public(对内)
<2> 标识符
把标识符全部看成指针。也就是说类如有个 class test,那么 test testIns 的定义,只是声明了testIns这个标识符,实际还没分配空间,必需要test testIns = new test() 才可以。这类似于C++中指针特性。
<3> 正则表达式
用general term表示一个字串的方法。 基本想法是: 字符类型(char,int等等)+数量+顺序
字符类型: ASCII或 点号(表示任何字符) 或 [] 或 [^] 或 /d (即[0-9])或 /w(即[A-Za-z0-9_]) 或/s (即 [/f/t/n/r ]) ,其中大写表示相反意思
数量: * 表示 0至无穷; + 表示 1个以上, ? 表示 0或1
详细可参考: http://baike.baidu.com/view/94238.htm
<4> 流程控制
与C++基本类似,但是它不支持以数字做为布尔值用。也就是说,if(a=b)会报错
<5> 有构造但无析构(可以定义finalize方法,在被垃圾回收前会被调用)
<6> 各种文件及命名冲突
源文件: *.java, 只有一个public类
-->编译后,每个.java会生成N个其中包含的.class
--->可运行程序是,一组已经打包成java文档的class集合(jar)
通过域名+路径的方式避免重复
查找一个包时,是通过CLASSPATH去寻找该目录下的文件。
<7> 内部类
内部类可以使用外部类所有成员(有点类似它的method)。内部类的优点在于,它可以独立继承自一个(接口的)实现,无论外围类是否继承了一个实现,对它不影响。
<8>interface, abstract
不能多重继承,所以不能同时extend多个class(包括abstract)。但是可以同时implements 多个interface。个人觉得interface与abstract有几个区别:
第一,interface定义的为全部abstract, 而abstract class定义的 可以有自己的非静态成员,method不需全为abstract。所以interface 有点像特殊方式的abstract class。
第二,interface更类似于方法,而abstract class更倾向于继承。
<9>异常控制
try
{
code here, and throw a error
}
catch()
{
}
catch()
{
}
finally{} //finally不管如何都会被执行到,通常用来将某些东东恢复成初值。
<10> RTTI
所有对象都是object根类的对象
类只在需要时才会被加载
Class.forName是class类的一个static方法
另一种方法: 对象.class是一个class类。
<11> 容器
容器将所有对象按object类型来处理,
共有以下三种,基类是Collection,map
list:有顺序的
set:不允许重复元素
map:键值对
<12> IO
参见另一篇文章。 http://blog.csdn.net/uiop78uiop78/archive/2011/03/07/6228760.aspx
IO是层层包装的过程,主要涉及三种考虑:源/目的,格式(或流),是否缓冲。
<13> 并发线程
继承自Thread,其中start方法会自动调用run,所以需要在run里重载。
资源冲突的解决:信号量互斥(synchronized关键字)。注意:,对于某个对象,其所有synchronized方法共享同一个锁,这能防止多个线程同时访问对象所在的内存。
更多推荐
所有评论(0)