一、计算机、程序和Java概述
二、基本程序设计
Scanner input = new Scanner(System.in);
double radius = input.nextDouble();
三、选择
Math.random()产生一个0.0到1.0之间的随机double值。
四、数学函数、字符和字符串
int intValue = Integer.parseInt(intString);
double double = Double.parseDouble(doubleString);
String s = number + "";
五、循环
java SentinelValue <input.txt> output.txt
六、方法
七、一维数组
for(elementType element:arrayRefVar) {}
具有同样类型的可变长度的参数可以传递给方法,并将作为数组对待
Arrays.sort();
八、多维数组
九、对象和类
Date和Random类的使用
十、面向对象思想
根据上下文环境,基本数据类型可以使用包装类自动转换成一个数据,反过来的自动转换也可以
BigInteger类和BigDecimal类可以用于表示任意大小和精度的整数或者十进制数
正则表示式匹配:"Java is fun".matches("Java.*"); "440-02-4534".matches("\d{3}-\d{2}-\d{4}"); String s = "a+b+#]","NNN");
toArray和valueOf
StringBuildt StringBuffer,注意StringBuffer并发访问时要同步
十一、继承和多态
UML继承关系用空的三角形表示
多态意味着父类型的变量可以引用子类型的对象
动态绑定:对象调用哪个方法由对象 的实际类型决定。声明类型没什么卵用。
List和数组转换:asList()、toArray()
List方法:sort()、max()、min()、shuffle()
被final修饰的类和方法都不能被扩展和重写
十二、异常处理和文本I/O
File file = new File("images/us.gif"); //不要使用绝对路径,使用相对路径
PrintWriter output = new PrintWriter(file);
output.print("John T Smith ");
output.close(); //可以使用try-with-resourse自动关闭资源
Scanner input = new Scanner(new File(file name));
String Name = input.next();
input.close();
Scanner input = new Scanner(url.openStream()); //从web读取数据
十三、抽象类和接口
GregorianCalendar是抽象类Calendar的一个具体子类
Comparable、Cloneable
十四、JavaFX基础
JavaFX取代了Swing和AWT,用于开发富Internet应用
Button、Scene、primaryStage、StackPane
十五、事件驱动编程和动画
十六、JavaFX UI 组件和多媒体
十七、二进制 I/O
可以使用文本编辑器(比如VI)进行处理的文件称为文本文件,其他所有文件称为二进制文件。
文本文件的读写用Scanner和PrintWriter。
二进制I/O不涉及编码和解码,因此比文件I/O更加高效
FileInputStream/FileOutputStream全部方法继承超类,主要是read()/write()方法。
FileOutputStream output = new FileOutputStream("temp.dat");
output.write("haha");
FileInputStream input = new FileInputStream("temp.dat");
char value = input.read();
DataInputStream/DataOutputStream从数据流读写字节,并且与基本类型值或字符串互相转换。writeUTF/writeDouble、readUTF/readDouble/readLine
BufferedInputStream/BufferedOutputStream全部方法继承超类。
ObjectInputStream/ObjectOutputStream用于读写可序列化的对象。
RandomAccessFile从文件的任何位置进行数据的读写。
十八、递归
递归更多的是思想上的理解,比如打印n条消息、递归二分查找、汉诺塔问题
public static void nPrintln(String message,int times) {
if(times >= 1) {
System.out.println(message);
nPrintln(message,times-1);
}
}
public static int resursiveBS(int[] list,int key,int low,int high) {
if(low > high) return -low-1;
int mid = (low+high)/2;
if(key < list[mid]) return resursiveBS(list,key,low,mid-1);
else if(key == list[mid]) return mid;
else return rescursiveBS(list,key,mid+1,high);
}
public static void moveSisks(int n,char fromTower,char toTower,char auxTower) {
if(n==1) System.out.println("Move disk "+n+" from"+fromTower+"to"+toTower);
else{
moveDisks(n-1,fromTower,auxTower,toTower);
System.out.println("Move disk"+n+"from"+fromTower+"to"+toTower);
System.out.println("Move disk "+n+" from"+fromTower+"to"+toTower);
moveDisks(n-1,auxTower,toTower,fromTower);
}
递归会造成相当大的系统开销,抛出stackoverflow,能不用就不用
十九、泛型
使用泛型的动机是在编译时检测出错误。
声明泛型方法时,泛型类型<E>要放在关键字static之后。
没有指定具体类型的泛型类和泛型接口被称为原始类型,用于和早期的Java版本向后兼容。原始类型是不安全的。
可以使用非受限通配、受限通配或者下限通配来对一个泛型类型指定范围。
泛型存在于编译时,一量编译器确认泛型类型是安全使用的,就会将它转换为原始类型。
二十、线性表、桡、队列和优先队列
Iterator iterator = collection.iterator();
LinkList/Vector
优先队列中,最高优先级的先被移出
二十一、集合和映射表
无重复元素排序时,集合比线性表更加高效。线性表通过索引来访问元素非常有用。
HashSet以一个不可预知的顺序存储元素,LinkedHashSet以元素被插入的顺序存储元素,TreeSet存储已排好序的元素
二十二、开发高效算法
动态编程通过解决子问题,然后将子问题的结果结合来获得整个问题的解的过程。
二十三、排序
插入、冒泡、归并、快速、堆、桶、基数排序、外部排序
二十四、实现线性表、栈、队列和优先队列
二十五、二叉查找树
二十六、AVL树
二十七、散列
二十八、图及其应用
二十九、加权图及其应用
三十、多线程和并行程序设计
一个任务类必须实现Runnable接口,任务必须从线程运行。
Thread类包含为任务而创建的线程的构造方法,以及控制线程的方法。
yield()为其他线程临时让出CPU时间,sleep(long mills)可以将该线程设置为休眠以确保其他线程的执行,休眠时间为指定的毫秒数。join()使一个线程等待另一个线程的结束。setProority()设置线程优先级。
Executor接口执行线程池中的任务,ExecutorService接口来管理和控制任务。newFixedThreadPool()和newCachedThreadPool()的区别。
三十一、网络
三十二、Java数据库程序设计
三十三、JavaServer Faces
网友评论