第一章
工作方式
第一步:编写源代码
产生XXX.java文件。
第二步:编译器
在命令行下执行javac程序编译XXX.java。
第三步:输出
编译不报错则产生xxx.class文件。【即字节码文件,该文件】
第四步:java虚拟机
java虚拟机(JVM:Java Virtual Machine)将字节码转换成平台理解的形式运行。
程序结构
源文件(XXX.java)包含类
类包含方法和实例变量
方法里包含语句(statement)
第二章
堆垃圾回收机制
对象不管如何创建,都将位于称为堆的内存区域中。
java根据对象大小分配内存区域。
若对象不再被使用,将被打上可回收标记,待内存不足时进行清理,回收内存空间。
命名方法
名称必须以字母、下划线(_)、$符号开头,不可用数字。
除第一个字符,随便用数字
避开Java保留字、关键字(keyboard)
第三章
对象的声明赋值创建三个步骤
举例说明
Dog MyDog = new Dog();
第一步:声明一个引用变量
Dog myDog;
//要求JVM分配空间给引用变量,并将此引用变量命名为myDog。
第二步:创建对象
new Dog();
//要求JVM分配堆空间给新建立的Dog对象。
第三步:连接对象和引用
Dog myDog = new Dog();
//将新的Dog对象赋值给myDog这个引用变量。
第三章碎片知识
float f = 32.5f;【注意:所有带小数点的值都会被Java当做double处理。】
-
编译器不允许将大的数据类型放进小的数据类型中,即便放的进,这是为了提高安全性.例如下面的例子就不行。
int x = 7; byte t = x; //即便放的进,编译也过不了。
引用变量保存的是存取对象的方法(一串地址),若对象是锁,那引用变量保存的就是开锁的钥匙。
引用变量如同遥控器,对引用变量运用圆点运算符如同按下遥控器按钮般的存取它的方法或实例变量。
引用对象只保存引用,不保存对象。
java中我们不会也不该知道引用变量中实际装载的是什么。它只是用来代表单一的对象。只有JVM才知道如何用它里面的东西来取得该对象。你不开发虚拟机就不用关心这个。
若你关心内存分配,最需要关心的是需要建立多少个对象和引用。
对任意一个虚拟机而言,引用变量的引用是一样大的。
引用变量被设置为null后,将失去对原对象的引用,若那个对象没有对象再能引用,将被打上待回收标记。
把一个引用变量的值赋值给另一个,则被赋值的引用变量将于赋值引用变量共同指向同一个对象。
数组其中的每个元素都是变量,即会是8种primitive主数据类型变量中的1种,不然就是引用变量。
第四章
封装
封装基本原则:将实例变量标记为私有(private),并提供公有(public)的getter与setter来控制存取动作。
-
封装的优点:
防止实例变量在未经控制的情况下被直接修改。
防止自己对实例变量进行改动时,连累所有使用你的类及公用变量的人一起改。
封装的结果:通过强迫其它程序修改实例变量前经过setter,将设置的实例变量值控制在适当范围。
实例变量初始化默认值
integers——0
floating points——0.0【float是0.0f、double是0.0d】
booleans——false
references——null
String——null
char——/U 0000
数组类型——null
-
数组中的元素——看变量是什么型,就对应设置为其默认型。
//数组举例说明 int[] a; // a数组没有初始化默认值,a为null。 int[] a = new int[5];//a已初始化默认值,其内部元素还未出初始化默认值,默认设置为int的默认初始化值0.
局部变量初始化默认值
局部变量不会被初始化,若使用局部变量前不给局部变量赋值,编译器将报错。
第四章碎片知识
类是对象的建造蓝图,编写类的时候,其实你是在告诉JVM如何制作该类型的对象。
任一类的每个对象都有独立的实例变量。
任一类的每个对象都带有相同的方法,但是方法可以根据实例变量的值来表现不同的行为。
-
void类型的方法表示不返回值。
void go() { }
-
也可声明一个方法返回值。
int giveSecret() { }
Java并未要求一定要处理返回值,我们也可以忽略返回值,即可调用非void类型的方法,而不必理会返回值,这代表我要用的是方法的行为而不是返回值。
方法声明的类型,必须与要赋值的变量类型相同。
-
你可以返回会被隐式转换为方法声明类型的其他类型值,但若方法声明的类型容器小于想要返回的类型时,就必须做明确的转换。举例说明:
double theSecret = life.giveSecret(); // double 要一致 但返回值7可以从int转换为double,所以没问题,反之就不行。 double giveSecret() { int a = 7; return a; }
-
Java中所传递的所有东西都是值,它通过拷贝传递。
int x = 7; int z; z = x ; //X传递的只是自己值的拷贝
方法只能声明单一的返回值,多个值你可以用数组作为载体返回。
任何有值运用的地方,都可用调用方法的方式来替换,以取得该值。
方法的参数基本上与局部变量是相同的——它们都是在方法中声明的(参数列中,相较于实例变量它也算局部的),而且参数不存在未声明的问题,编译器在调用方法而没有赋值参数时,就会显示错误,所以参数一定会被初始化。
区分==与equal(),前者只要求字节组合相等,后者还要求类型相等
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。