第一章-基本概念
Java工作方式:
编写源代码;
编译器运行源代码检查错误,输出字节码;
通过Java虚拟机(即JVM,通过软件实现)读取并执行字节码;
我需要做的事:
编写源代码,存为Party.java;
执行javac程序来编译Party.java,若程序没有错误,会输出Party.class文件(由字节码组成);
启动Java虚拟机运行Party.class文件;
Java的程序结构:
Java程序由一组类所组成,其中一个类会带有启动用的main()方法。
源文件包含一个或多个类,类中包含一个或多个方法。
当Java虚拟机启动执行时,它会寻找你在命令列所指定的类。然后会锁定下面这样一个特定的方法:
public static void main (String[] args) {
//程序代码写在这里
}
每个Java程序最少有一个类以及一个main()。每个应用程序只有一个main()函数。
Java中的所有东西都会属于某个类,你会建立源文件(扩展名为.java),然后将它编译成新的类文件(扩展名为.class)。真正被执行的是类。
所谓执行就是“命令JVM去加载Party这个类,开始执行它的main(),然后一直运行到mian的所有程序代码结束为止”,main()是任何程序的起点。 注意:java中不能直接用整数类型的变量做布尔测试。 println会在末尾插入换行符,而print不会,后续输出会在同一行。
使用命令行运行java代码:
可以在文本文档中编写java代码,并将文件后缀改为.java,例如BeerSong.java。
接下来在命令行中进入java代码文件所在的地址,使用javac命令编译java代码文件,在该目录下得到一个.class文件。javac BeerSong.java
使用java命令执行.class文件java BeerSong
第二章-类与对象
面向对象的程序设计相比过程化的程序设计的优点是:面向对象设计扩展功能时,不需要改动之前已经测试好的程序代码。
基本概念:
类:类是对象的蓝图,它告诉虚拟机如何创建该类的对象。
对象:对象是靠类的模型塑造出来的,可以把对象当做实例。对象包括实例变量和方法。
面向对象的继承,子类,父类。
子类重新定义从父类继承下来的方法叫做覆盖。
//编写Dog类
class Dog{
int size;
String bread;
String name;
void bark(){
System.out.println("Ruff! Ruff!");
}
}
//编写测试用的类
class DogTestDrive{
public static void main(String[] args){
//建立对象
Dog dog1=new Dog();
d.size()=40;
d.bark();
}
}
逃离main()的束缚,main()的两种用途: 1.测试真正的类; 2.启动我的Java程序。
Java创建对象时。对象会被存放在称为堆的内存区域中。这种堆是可回收垃圾的堆,Java会主动帮助程序员管理内存,回收不再使用的对象所占的空间。
Java面向对象的概念中没有全局变量这种东西,但是实际上会有可被任何程序存取的方法或常量,比如random()方法或者圆周率常数。这涉及到public和static以及final这些修饰符。 Java中的任何事物都必须在类中,圆周率常数和random()方法也是定义在Math这个类中。
第三章-primitive主数据类型和引用
primitive主数据类型用来保存基本类型的值。
编译器会禁止可能发生溢出的行为,比如这个语句int x=24; byte y=x;编译器禁止将int数据类型的变量的值赋给byte数据类型的变量,即使byte数据类型装得下24这个值。
命名变量类型注意避开关键字。
引用保存的是对象的引用。对象引用(Object Reference)
不存在对象变量这样的东西,只有引用对象的变量。对象引用变量保存的是存取对象的方法,类似指向对象的指针或者是地址。对象本身只会存在于可回收的堆上。
Java程序员不需要知道引用变量中实际装载的是什么,只有Java虚拟机才知道如何使用引用来获取该对象。Java程序员也不知道引用变量的大小。对于同一个Java虚拟机,所有的对象引用大小都一样。但是不同的Java虚拟机可能会用不同的方式表示引用,所以大小不一定一样。
注意Java不能对引用变量进行运算,这不同于c/c++。
对引用变量的声明和初始化:
Dog dog1=new Dog();
Dog dog1要求Java虚拟机分配空间给引用变量,并将此变量命名为dog1,。这个引用变量只能用来引用Dog类型。
new Dog()要求Java虚拟机分配堆空间给新建的Dog对象。
最后将新建的Dog对象赋给dog1这个引用变量。
Dog类的引用变量只能指向Dog类的对象,但如果该引用变量被标记为final,则只能指向这个特定的Dog对象。
引用变量可以指向空指针,即null,但没有意义。
注意,在Java中数组也是对象。
数组元素可以是8种primitive主数据类型变量中的一种,或者是引用变量。
//声明一个int数组(对应类)的引用变量
int[] nums;
//创建大小为7的int数组对象(对应对象),并将其赋给引用变量nums
nums=new int[7];
//元素为对象的数组
//创建大小为7的Dog数组对象,并将其赋值给前面声明的Dog[]类型引用变量
Dog[] pets=new Dog[7];
pets[0]=new Dog();
pets[1]=new Dog();
//通过数组索引操作数组元素对象
pets[0].name="gh";
pets[0].bark();
Java注重类型,一旦数组被声明出来,就只能装入所声明类型的元素。不过byte类型的元素可以放进int数组中(因为byte尺寸小于int,这称为隐含展开,即implicit widening)。