head first java学习-第一,二,三章

239 阅读5分钟

第一章-基本概念

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主数据类型用来保存基本类型的值。

image.png

编译器会禁止可能发生溢出的行为,比如这个语句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)。