学习一门编程语言的关键在于理解作者的思想,理解这门语言是因何而生。

我觉得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++中:

  类自身函数 类自身对象继承类函数继承类对象
 publicYESYESYESYES
public 继承protectYESNOYESNO
 privateYESNONONO
      
protect 继承publicYESYESYESNO
 protectYESNOYESNO
 privateYESNONONO
      
private 继承publicYESYESYESNO
 protectYESNOYESNO
 privateYESNONONO

  总结起来, 权限 类自身函数>继承类函数>类自身对象>继承类对象,默认时为private

在java中:

  类自身函数 类自身对象继承类函数继承类对象
 publicYESYESYESYES
extends 继承protectYESYESYESYES
 privateYESNONONO

在不写时,默认为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方法共享同一个锁,这能防止多个线程同时访问对象所在的内存。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐