Head First Java 一 二章

第一章 java简介

java四过程: source(XXX.java) ->  编译 ->  bytecodes (XXX.class) ->  JVM 上运行。

一个java程序至少有一个class,并且一个程序有且只有一个main method。

典型Hello world程序

public class FirstJavaApp {
     public static void main(String[] args) {
          System.out.println("Hello world");
     }
}

注意:java里,要使用布尔类型的地方必须是布尔,不能像C++那样,用整数可以代替。
如,while ( 1 ) java下就不行, int a = 1; while (a) 也是不行的。

Class的创建

Class Movie {
     String title;
     String genre;
     int rating;

     void playIt() {
          System.out.println("Play the movie");
     }
}

构建实例

Movie one = new Movie();
one.title    = "Gone whit the Stock";
one.genre = "Tragic";
one.rating = -2;

Java中的"全局变量和函数"

java都是类组成,没有真正的全局变量和全局函数,但是有类似的。

在一个类中的方法前,加上 public static,就基本能当做全局函数使用,比如Math.random()函数,基本可以在任何地方访问。

如果给变量加上public ,static , 和 final,也就将它变成了全局变量,谁都能访问。

程序发布

可以把程序和JVM一起打包,放入一个安装程序中,来保证没有JVM的用户,也能正常使用你的程序。

程序类非常多的时候,要打包成.jar文件,一个简单的text文件,格式为manifest,可以定义哪个class里包含了main()函数,程序要从这开始执行。


第二章 变量

变量主要分两类:primitives 和 reference to object。

primitives就是 整数 布尔 还有浮点数。

变量可以看做各种大小不同,且用途不同的杯子,点餐的时候我们说:“我要一个小杯的奶茶。”对于变量这个“杯子”,我们就说:“我要一个int,里面装着90。”。但有个不同就是,这个杯子需要被命名。“我要一个int,里面装着90,并且这个杯子命名为 height”。

下面是基本变量所占大小,和取值范围,不像C,不同编译器可能不同,java这些值都是规定的。稍微注意一下char,和C的不一样。

基本变量的声明方法。
注意:最下面的float f = 32.5f;的声明,写的很清楚,java默认浮点数是double类型,如果没有那个 "f",就变成了 float f = 32.5; 会报  can't convert double to float。说类型不匹配。java严格的类型检查,不允许大杯子向小杯子倒水,double是64,float是32, 但是反过来可以
注意:double d = 32.5f; 是不会报错的。

大杯的水不能倒在小杯里,小杯的水倒在大杯里!

注意:int x = 34.5;                      不行!
          int x = 34.5f;                     不行!
          boolean boo = 3;               不行!
          byte b = 3;                        可以
          int x = 7;  byte b = x;         不行!
          byte b = 3; int x = b;          可以

变量命名规则

1、必须以  _  $ 或者字母开头。注意:java能以$开头,数字不行。
2、数字不能开头,但之后都能用了。
3、别与保留字冲突。

reference to object

Dog d = new Dog();这里的d 并不是对象变量,而只是一个object的引用reference。d存了一些数据,用于得到一种去访问object的方法。

将d理解为一个遥控器,这个遥控器是Dog类型的,能够控制远处的一个Dog对象,且一次只能控制一个远处的Dog对象。就像电视机遥控器,给它设置个程序就能控制一台电视,但是怎么设置都不能去遥控空调,因为类型不同。

d像个大点的杯子,里面放着Dog的遥控器,而不是Dog对象本身。

基本变量大小为许多个bits,里面就装的是基本变量的值。而引用,也有大小,也是多少个bits,但里面放着遥控器,即找到、控制对象的方法、途径。


创建引用变量的方法可以分三步:
1、Dog myDog;先分配内存,创建个Dog遥控器,放入myDog这个杯子里。
2、new Dog()创建一个Dog的对象,在Garbage collectable heap,即GC上。
3、给myDog中的遥控器编程,让它指向第二步创建出来的Dog对象。

注意:1、这个遥控器只能遥控Dog对象,但可以改变。就像电视遥控器,可以遥控一个电视,然后调一调又能遥控另一台电视。
               但是,如果这个遥控器被声明为 final,那就只能指着同一个object,不能变了。
          2、同一个JVM中,reference即遥控器的大小是一样的,但是不同JVM的可能有变化。

GC角度看reference

Book b = new Book();
Book c = new Book();
new Book()的对象,都在GC上,遥控器在外面,指向对象。

再创建个遥控器, 注意,这只再创建了个遥控器,指向原有对象。
Book d = c;
这里只是将之前的遥控器c,开辟空间,把c里面的所有bits复制了一份,放入了杯子b。

如果一个对象,没有任何遥控器指向它,那它就要被交给GC,要被GC消灭了。


数组

对于数组,也分两种情况,即primitivers 和 reference to objects

primitives分三步:
1、int[] nums; 创建int数组遥控器,分配内存,把遥控器放在杯子nums里。
2、nums = new int[7]; 真正的创建int数组object,这个对象里面能容纳7个int。
3、nums[0] = 6;
     nums[1] = 19;
     nums[2] = 44;
     即将int数组对象里面的杯子,装上值,至此,7个元素的int数组创建完成。
注意:数组整体是个对象,即便其内部装的是7个基本类型。

对于reference to object,创建数组的过程也分三步。
1、Dog[] pets; 先创建指向Dog数组对象的遥控器,分配内存,将遥控器放入pets杯子。
2、pets = new Dog[7]; 创建一个对象(object),其内部包含有7个Dog类型遥控器(即引用)的杯子,分配空间,放好遥控器,并让第一步创建的Dog数组的遥控器指向这个对象。
3、pets[0] = new Dog();
     pets[1] = new Dog();
     正式创建Dog对象,然后让数组对象内的遥控器,指向各个Dog对象。
有点绕,但是看图就知道了。
注意:reference对象数组的object中,装的是遥控器,不是真正的Dog对象。
注意:Dog数组中,pets[i]只能指向声明的Dog类型,可不能指向别的。
          但是,前面的基本类型的数组对象,声明的int,但只要不违反小杯子装大杯子水,即溢出原则,那就能装别的类型的变量值,比如 byte b = 4; nums[i] = b;就是合法的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值