1.JVM。
首先来回忆一下c语言的运行过程。我们编写源程序*.c文件,然后用编译器如gcc编译,生成目标文件,再用连接器链接生成可执行文件如*.out,然后操作系统就可以直接去执行这个执行文件。像c语言这样的语言,称为编译型语言。这种我们很熟悉,那么还有什么类型的语言呢?解释型语言。解释型语言是使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行的语言,如Ruby,Python。解释型语言出现的原因就是实现跨平台,所谓跨平台其实就是比如你想写一个程序又想在Linux上跑,又想在Windows上跑,你又不想写两遍程序,那么只需要有针对两个平台的不同的解释器,那么你写一样的程序也可以在两个平台上跑。那么Java属于那一类呢?哪类都不是。Java首先也要经过编译(javac),但是编译完后生成的并不是特定平台上的机器码,而是一种与平台无关的字节码(*.class),然后用Java解释器来解释执行该字节码文件。而这里的Java解释器也就是Java虚拟机,即JVM。
2.为什么每个源文件里只能有一个public类,且文件名要与这个类名相同?
当我们在一个源文件中需要引用另外一个文件中的类时,我们应该怎样去找到这个类?难道还要进到文件里面去搜内容?很明显最快的方式就是搜文件名。
3.面向对象的思想。
在c语言中,我们面向的是过程,或者说是函数,过程是一个动态的动作,那么静态的状态由什么来表征呢?所以我们的类的定义=Field(状态数据)+方法(行为)。书上举了一个很好的例子:面向过程:吃(猪八戒,西瓜);面向对象:猪八戒(吃,西瓜)。这种主谓宾的关系更符合人类的思维,使程序的编制思路更加清晰。我们在观察这个世界时,会把很多具有共同特性的东西归为一类,这种方法其实是抽象的方法,比如当我们发现猫和狗都会哺育后代,所以我们有了哺乳动物这个类。反过来,当我们发现鸭嘴兽也哺乳时,我们可以把鸭嘴兽也归为这一类,此时鸭嘴兽作为哺乳动物这一类的具体的一个对象。这又是一种具象的方法。
4.System.out.println()。
这是Java中最常用的输出的函数,它和c语言中的printf有很大的不同。当printf想输出一个变量的值的时候,它基本上会这样:printf("I‘m %d years old",age);而方法println则不同,它大致会采用这样的语句:System.out.println("I‘m "+age+" years old");也就是说,在println方法中,变量是可以自动地转换为字符串的。
5.引用类型。
Java中没有指针,但是有引用类型,它本质上就是指针,只是用法略有不同而已,它实际上相当于把指针进行了一个封装。如果说b是a引用,那么b和a是由同一个指针指向的,b只不过是a的别名。引用类型包括类、接口、数组类型还有null类型。
6.数组。
数组类型是一种引用类型。数组关键是要掌握定义和初始化的意义。
数组的定义:type[] arrayname;
初始化:arrayName = new type[] {..,..,..};(静态初始化)
arrayName = new type[length];(动态初始化) 。
数组引用变量只是一个引用(别名)。当我们定义一个数组时,实际上只是在栈内存中建立一个引用变量,但此时它引用的是什么却全然不知,所以必须还要有下一步,也就是初始化。初始化以后,堆内存中便开辟出了数组真正存储的空间。为什么要这样做呢?回想在c语言中,当我们定义一个数组时,其实也已经完成了它的初始化。而它的数组名,就是它的指针变量。如果我们把数组类型看成一个特殊的类,把一个数组看成一个特殊的对象,首先我们要知道,创建一个对象的成本通常是比较大的。所以当我们仅仅需要引用变量时,不需要在堆内存中创建与之对应的对象。所以,定义和初始化便被分开成为两步独立的步骤。当然,如果你想,也可以合成一步,像这样:
type[] arrayname = new type[] {..,..,..};
第一篇总结就到这里,欢迎指正、评论。
原文地址:http://blog.csdn.net/applenob/article/details/38017687