第一章 计算机、程序和java概述

时钟速度越快,给点单位时间内处理的命令就越多。
汇编器:将汇编语言转换为机器语言
源程序(源代码):由高级语言编写的程序
又分编译器和解释器。
java是编译语言
操作系统(os):是运行在计算机上最重要的程序,用来管理和控制计算机的活动。其作用为:1、控制和监视系统的活动;2、分配和调配系统资源;3、调度操作,其中包括多进程、多线程、多处理
多进程:计算机可以执行不同的程序,多个程序共享cpu,如一边听歌,一边上网
多线程:对单独一个程序可以进行不同任务,如一边打字一边保存
多处理(并行处理):多个cpu处理不同子任务,最后整合完成任务。
java的三个版本:java se 标准版:用来开发客户端的程序;java ee企业版:用来开发服务器端的程序;java me 微型版:开发移动设备的程序
java是从类方法中的main开始执行的。
java源程序保存为.java文件(且文件名和公共类名完全相同),编译文件保存为.class,class文件有Java虚拟机(JVM)执行。
java字节码可以在不同的硬件平台和操作系统上由JVM进行执行。

第二章 基本程序设计

在源代码中,字符串不能跨行,在字符串较长时,要用+进行连接。

java的控制台输入

java并不支持控制台的直接输入,需要间接使用Scanner类来创建属于它的对象,以读取来自System.in的输入。
Scanner input = new Scanner(System.in)
double 变量名 = input.nextDouble()

命名常量

final datetype CONSTANTNAME = value;
如 final double PI = 3.1415926

命名习惯

变量和方法:使用小写来命名,当用多个单词来描述时,除第一个单词外,其他单词首字母需要大写
类名:首字母也要大写
常量:单词中所有字母大写

幂运算

Math.pow(a,b)

整数型直接量

二进制:0B
八进制:0
十六进制:0X

类型转换

类型转化要求将目标类型名放在括号内,紧随其后的是需要变换的变量或值。
如 (int)3.1

第三章 选择

在java中,if 是一个方法,所以在其后需要加().
布尔变量的声明:boolean 变量名=表达式;
true和false都是直接量,类似于10这种数字量,可以直接使用,也属于保留字。

产生随机数

可以使用Math.random()获取一个0-1之间的double数,不包括1.

逻辑操作符

! && || ^ 用于产生复合布尔表达式。

第四章 数学函数、字符和字符串

常用数学函数

三角函数方法、指数函数方法、服务函数方法
字符型数据:char 用单引号
字符型数据可以和整数数据直接进行强制转化。

Character类

提供了方法用于字符测试,如Character.isDigit(ch)

字符串类型

String类,用双引号。
实例方法:由一个特定的实例来调用,如 message.length() ,其中message为一个字符串变量
静态方法:非实例方法,不使用对象来调用,如Math.pow(a,b)
从控制台读取字符串:采用Scanner的next()方法。
使用nextline()方法读取一整行文本,以回车为结束标志的字符串。
从控制台读取字符:先使用nextline()读取一整行,然后使用,charAt(0)来返回第一个字符。

第五章 循环

输入重定向:java SentinelValue < input.txt
输出重定向:java ClassName > output.txt

第六章 方法

等同于函数,但需要先进行声明,如 public(修饰符) static(修饰符) int(返回值类型) sum(s1,s2)
对void方法的调用必须是一个语句,通过;结束。
按值传递:在调用带参数的方法,实参的值传递给形参,无论方法中形参的值怎么改变,都不会对实参造成影响。
重载方法:执行同样功能但是具有不同参数类型的方法。
方法抽象和逐步求精:在解决问题时,先将其分为各个小步,得到各个小步骤的方法抽象;然后对方法的抽象进行逐步求精。

第七章 一维数组

数组:单个的数组变量可以引用一个大的数据集合。
声明数组变量:元素类型[] 数组引用变量名;如 double[] mylist; 只是声明一个数组类型的变量名。
声明数组后,并不占据内存位置,只是创建一个对数组的引用的存储位置,除非对数组进行创建之后。
创建数组:元素类型[] 数组引用变量 = new 元素类型[数组大小] 如 double[] mylist = new double [10]
数组初始化语法:直接对数组进行赋值,如 double[] mylist = {0.1,2.0};
foreach循环:不使用下标对整个数组进行顺序循环,如 for(double e:mylist){System.out.print(e);}
数组的复制:1、逐个元素复制;2、使用System中的arraycopy方法,System.arraycopy(sorceArray,0,targetArray,0,sorceArrar.length)

将数组传递给方法

当一个数组传递给方法时,数组的引用传递给方法。在方法中改变数组时,方法外的数组也会随之改变,因为方法内外的变量都只是引用,这一引用指向相同的数组变量。
当方法中的参数是基本数据类型时,是按值传递;当方法中的参数是数组类型时,是按引用传递(此时,在方法中,也是对数组元素进行的操作)。

从方法中返回数组

当从方法中返回数组时,返回的是数组的引用。

可变长参数列表

具有同样类型的可变长度的参数可以传递给方法,并作为数组对待。
方法中的参数声明如:typeName… parameterName

Arrays类

包括一些常规的数组操作方法。

命令行参数

main方法和普通方法一样,可以被调用。

第八章 多维数组

表格或矩阵中的数据被表示为多维数组。
二维数组被认为是由一维数组的数组构成。

第九章 对象和类

在java程序中,至少包含一个类(主类),使用这一类的称为客户,java在运行系统时会调用这个主类的main方法。
一个文件中只能有一个公共类,且此公共类要与文件同名。但当编译时,文件中的每一个类都会生成一个.class文件。
将两个类合成一个,即通过在类中添加main方法来测试这个类。
构造方法在使用new创建对象时被调用。
构造方法:1、构造方法没有返回值,连void都没有;2、构造方法和类名相同;3、构造方法作用是初始化对象。
构造方法有两个:1、无参构造方法,不加参数时默认调用;2、有参构造方法,有参数输入时被调用。
一个类可以不定义构造方法,此时,调用默认构造方法。

通过引用变量来访问对象

类也是一种引用变量,它的使用可以参照与数组。
同样需要声明,创建。如 Circle mycircle 此时,只是声明了一个Circle类型的变量,但内存中没有它对应的地址。若想变量引用对象,还需要新建一个对象,然后进行引用。如 mycircle = new Circle();或者直接一步,Circle mycircle = new Circle().
严格的将mycircle 并非是一个对象,它仅仅是一个对对象的引用变量。
通常对对象的使用是,先创建一个变量,然后将对象引用赋予变量,然后直接使用这个变量。但有些时候并不使用变量,而是直接对对象进行操作(即匿名操作)。

引用数据域和null值

当一个引用类型的数据域没有引用任何对象,那么它会被自动赋予一个null值,null类似于true 和 false ,都是类型直接量(即属于保留字)。
各种数据域的默认值:数值数据域:0;引用数据域:null;字符数据域:’\u0000’;boolean数据域:false。但方法中局部变量的数据域不会被赋初值。

基本类型变量和引用类型变量的区别

每个变量都代表一个存储值的内存位置。声明一个变量时,就是在告诉编译器这个变量可以存储什么类型的值。对于基本类型变量来说,对于内存所存储的值就是基本类型变量的值;对于引用类型变量来说,对于内存所储的值是一个引用,是对象的存储地址(即此引用指明了这个对象所存储在内存中的位置)。
将一个变量的值赋予另一个变量时,对于基本类型变量来说,就是将一个变量的实际值赋予了另一个变量(即新开辟了一个内存空间,此内存空间和原始内存空间存储的值相同,但是有两个存储空间);对于引用类型变量来说,是将变量的引用赋予给了新的变量(即新开辟的内存空间,仍然是一个只存放了一个引用的空间,只是两个空间指向同一个对象)。
当对象不被引用时,它就会被认为是垃圾,会被回收,收回所占有的内存空间,此时称为“垃圾回收”,是java的一种独特机制。
如果当一个对象不被使用时,可以显式地将它的引用变量赋予null值,此时,这个对象所占有的内存就会被释放。

静态变量、常量和方法

静态变量(类变量)可以被类的所以对象共享。静态方法不能访问类中的实例成员。
实例变量是绑定在对象上的,因此不能被不同对象所共享,如Circle中的radius。
而若想被类中的所以对象共用,则可以使用静态变量,静态变量存储在一个公共内存中。
java支持静态变量和静态方法,静态方法不需要实例化就可以使用。如Math.pow(a,b).
只需在声明前加static即可,如static int numberOfCircle; 常量是被类中所有成员共享的,之前加上final。
实例方法可以调用静态方法和静态数据域,而反之不可以,但可以使用实例化后的方法和数据域。

可见性修饰符

可见性修饰符用在类、方法和数据域之前加public,用于决定一个类以及其成员的可见性。
加public时,可以被任何一个类进行访问,而不加public时,默认可以被同一个包内的类进行访问,这被称为包私有或包内访问。
包可以用来组织类。为完成这一目标,需要在程序中首先出现,package packageName; 如果在定义类时没有声明包,则放在默认包内,java一般建议把类放入包内,而不是使用默认包。
private限定方法和数据域只能在自身类中被访问。

数据域封装

使数据域设为私有数据域,有利于类的保护。

向方法传递对象参数

给方法传递一个对象,就是把对象的引用传递给方法。
java只有一种传递方式:值传递。在对象参数传递给方法时,传递的是引用变量的值。

数组对象

数组既可以存储基本数据类型,也可以存储对象。如Circle circleArray = new Circle[10];
对象的数组实际上是引用变量的数组。

不可变对象和不可变类

将数据域私有,并且去掉set方法,没有一个返回指向可变数据域的引用的访问器方法。

this 引用

关键字this引用对象自身,但它也可以在构造方法内部用于调用类中的其他构造方法。
使用this引用隐藏数据域:

第十章 面向对象思考

类的抽象和封装

类的抽象是指类的实现和使用是分开的,类的封装是指细节被封装并且对用户隐藏。

把基本数据类型作为对象来处理

把基本数据类型并入对象或包装成对象,java为基本数据类型提供了Double Integer Character Boolean Float Short Long类,

第十一章 继承和多态

父类和子类

继承:使用继承,避免冗余,提取类的公有特性,使系统更加易于理解和维护。
通过extends来继承,如:public class Circle extends GeometricObject
父类的数据域是私有的,子类若想使用,必须通过父类的公共的set,get方法。

super

使用super可以调用父类的构造方法和方法。且必须出现在子类构造方法的第一行。
构造方法链:子类沿着父类的构造方法进行构造,直到找寻到最后一个父类为止。
如果要设计一个可以被继承的类,那最好为其设计一个无参构造方法,防止程序出错。

方法重写

子类和父类中的方法具有同样的签名和参数时,当子类需要修改定义在父类的方法时。
当子类中方法进行重写后,需要调用父类方法时,需在被调用的父类方法前加super(除此之外,调用父类方法无需super)。
注意:私有方法不能被继承,也不能被重写;静态方法被重写之后,父类的静态方法会被隐藏,调用时需 父类名.静态方法名.

方法重写与重载

方法重载意味着同样的名字使用不同的签名来定义多个方法,而重写是在子类中对一个新方法的实现。
重写标准:为防止出现错误,在子类中重写的方法前加以 @Override 。

Object类和toString方法

java中的所有类都继承自java.lang.Object类,toString是Object类中的一个方法,所以所有类都可以使用。
public String toString():调用一个对象的toString()方法会返回一个关于此对象的描述。然而,返回的信息用处很小,因此通常重写此函数,来返回一个关于对象的有效描述。

多态

多态意味着父类的变量可以指向子类对象。即使用父类对象的地方都可以使用子类对象。
因:子类的实例都可以看成是父类实例的特殊化,所以:总可以将父类的参数传递给子类的实例。

动态绑定

方法可以在继承链中的各个类中实现,JVM决定运行时调用哪个方法。
声明类型和实际类型:如 Object o = new GeometricObject()
o的声明类型是Object,实际类型是GeometricObject.
声明类型可以看作是引用类型变量所属的类型,而实际类型是对象的类型。动态绑定中o调用哪个方法要由实际类型来决定。
对象会沿着继承链从对象中实际类型开始查找方法,直至找到方法的实现,就调用此类中的方法。

对象转换和instanceof运算符

对象的引用可以类型转换为另一个对象的引用。
子类的实例引用转换为父类时,无需指明,属于隐式转换。
而父类向子类转换时,需要显式地转换。如:Student b = (Student) o, 此时需要确保的是o 是Student 的一个实例,负责会编译出错。
instanceof 的用法:来确定一个对象是不是属于某个类,if (myCircle instanceof Circle)
为了通用程序设计,通常把变量定义为父类型,这样即可接受任何子类型的值。

protected 类和方法

protected类和方法可以被子类继承和使用。
private 和 protected只能用于类内成员,而public可以用于类内成员和类,不加修饰的类是不能被包内的其他类所访问的。
子类可以将父类的protected方法改写为public

防止扩展和重写

在类或方法之前添加final即可以防止类的扩展和方法的重写。

第十二章 异常处理和文本I/O

异常处理概述

异常是由方法抛出的,方法的调用者可以处理并捕获异常。
通过try-throw-catch。
异常处理的最根本优势是将检测错误从处理错误中分离出来。
异常是对象,它的源类是java.lang.Throwable

File类

File类包括了获得一个文件/目录的属性,以及对其进行改名和删除的方法。但不包含读写文件内容的方法。

文件的输入和输出

通过Scanner类和PrintWriter类来实现。

第十三章 抽象类和接口

父类中定义了相关子类中的共同行为,接口可以用于定义非相关类的共同行为。

抽象类

抽象类不可以用于创建对象,抽象类可以包含抽象方法,这些方法将在具体的子类中实现。
抽象方法:在抽象头中使用abstract来表示。如:public abstract double getArea();
抽象类不能创建对象,一个包含抽象方法的类必须声明为抽象类,抽象类的构造方法需用protected来声明,用于子类继承。
抽象类所扩展的抽象子类中,必须把抽象子类中所用抽象的方法都实现。

接口

接口是一种与类相似的结构,只包含常量和抽象方法。
修饰符 interface 接口名 如:modifier interface InterfaceName

第十四章 Java FX基础

第十五章 事件驱动编程和动画

第十六章 Jave FX UI组件和多媒体

第十七章 二进制I/O

文件分为文本的和二进制的,文本文件指的是用文本编辑器编辑的,其他的为二进制文件(为程序读取而设计)。如Java源程序保存为文本文件,而Java类为二进制文件(通过Java虚拟机读取)。
二进制文件不涉及编码和解码,因此效率更高。

第十八章 递归