欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

31.Java语言程序设计

程序员文章站 2022-07-11 18:55:49
...

一、计算机、程序和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);
}

递归会造成相当大的系统开销,抛出*,能不用就不用

十九、泛型
使用泛型的动机是在编译时检测出错误。
声明泛型方法时,泛型类型<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