(一)、字符串:
读入多组字符串时 while(read.hasNext()){ }
读取String字符串 char aa=str.charAt(i);
判断字符串相等 String用equal,不能直接= =
String数组定义时赋初值:
String []str=new String[]{"ling","yi"}; String []str={"ling","yi"};
但在void f(String [] str); 只能void (new String []={“1”,”2”}); 不能void ({“1”,”2”});
char a=read.next().charAt(0); 读取单个字符
(char)(n+'0'); 数字转字符
Double.parseDouble(str); 字符串转化为小数
(二)、语法格式
(1). 基本格式
import java.util.*;
class Main{
public static void main(String[] args){
Scanner read=new Scanner(System.in);
}
}
.基本类
static类变量共用一个存储空间
子类中调用super时要第一时间调用,之后才为其他变量赋值
distance(P2,P3) 该方法是类的静态static方法,可被类名直接调用
class Student implements Comparable继承接口的方法要申明public
类里方法之间可互用(static特例)
instanceof是Java的一个保留关键字,左边是对象,右边是类,返回类型是Boolean类型。它的具体作用是测试左边的对象是否是右边类或者该类的子类创建的实例对象,是,则返回true,否则返回false。
instanceof使用注意事项
先有继承关系,再有instanceof的使用。
当该测试对象创建时右边的声明类型和左边的类其中的任意一个跟测试类必须得是继承树的同一分支或存在继承关系,否则编译器会报错。父类对象instanceof 子类类名
public int compareTo(Object arg0) {
return ((Student)arg0).sno-this.sno;
}//Object继承的方法,注意申明类
.异常类
class 类名 extends Exception{ ... }
实例方法 throws 异常类名{
if(r<0) {throw new NumRangeException(r);}
异常类名、异常类的构造方法;
else ......}
自定义异常类
try{ throw new DefaultException("Default Exception"); }
catch(Exception e) { System.out.println(e); }
特例:class DefaultException extends Exception{
DefaultException(String s){
super(s);}//DefaultException: Default Exception
}
. 泛型类
1.表示方法:class 泛型名<E> E可以是任何类或接口,不能是基本类型
与普通类相比:声明和创建对象时后多一对“<具体类型/统配?>”
Cone <Circle> coneOne;
Cone<?extends A> coneOne; A是类(子类/自身)、A是接口(实现接口的类) (3)Cone<?super B> coneOne; B一定是类(父类/自身)
注意事项:
创建时必须具体类型:Cone<?> coneOne = new Cone<Circle>(Circle);
泛型变量只能调用从Object继承或重写的方法(toString),所以泛型类与E类构建关系通过E.toString();public String toString();
泛型接口:interface 接口名<E,F>;
class A<E,F> implements B<E,F>{...}
泛型链表:LinkedList<E>:实现泛型接口List<E> 的泛型类
例如:LinkedList<Integer> list = new LinkedList<Integer>();
使用方法例如:list.getFirst();
**List is abstract; cannot be instantiated
List<Worker> a=new List<Worker>(); **//
对于List对象,要用迭代器遍历
实际问题中:一方法从键盘输入并返回结点,一声明并返回链表循环添加
“Student s = new Student(name,read.next(),read.nextInt());”
基本方法:
boolean add(E elem) 尾加新结点
void add(int index,E elem) 第index位加新结点
void clear() 清空链表
E remove (int index) 删除index上结点(从0开始)
boolean remove(E elem) 删除首个含elem结点
E get(int index) 指定结点顺序(从0开始)
int indexOf(E elem) 含elem的结点首次出现的位置,无-1
//**int lastIndexOf(E )
void addFirst(E elem) 表头加新节点 // void addLast(E elem)
E getFirst() 得到表头数据 // E getLast() 表尾
E removeFirst() 删除表头 // E removeLast() 表尾
Object clone() 得到克隆链表
(5).迭代器:
链表对象可以使用iterator()方法获得一个迭代对象
Iterator<String> iter=list.itertor();
While(iter.hasNext()) {String te=(String)iter.next(); //强制转换取数据}
(6). 多线程:
用Thread 子类创建线程
class 类名 extends Thread{
public void run( ){
......
}
}
主函数中:类对象.start( ); / new Cat( ).start( ) 创建运行合并
用Runnable接口
class 类名 implements Runnable{
public void run( ){
...
}
}
主函数中: 子类 子类对象1=new 子类( );
Thread 类对象1;
类对象1=new Thread(子类对象1);
类对象1.setName( ); 类对象1.start( );
在线程中启动其他线程:Thread 类对象2=new Thread(this);
//现有线程给其他线程用
对象名.getState( )
返回状态new/runnable/blocked/waiting/timed_waiting/terminated
只有处于new状态的线程可以调用start方法
sleep(int n) Thread类的静态方法,调用使休眠
//方法在类中直接使用,在主类中通过类对象调用
isAlive( ) 未进入terminated则返回true,否则false
主类:setName(String str) //Thread类中继承的setName方法为线程起名
//方法在类中直接使用,在主类中通过类对象调用
子类:String name=Thread.currentThread( ).getName( );//获取线程名字
currentThread( ) //Thread类的静态方法,可类名调用,返回使用的线程引用
wait( ) 中断方法执行,让出CPU使用权
notify( ) 只通知处于等待的某一个线程结束等待
notifyAll( ) 通知所有由于使用这个同步方法而等待的线程结束等待
使用synchronized实现同步控制,并使用wait()和notify()实现线程之间的通信。
synchronized public void sellTicket(int num){
if(freeNum<sellNum||freeNum==0){
try{
wait();
}catch(Exception e){}
}
freeNum=freeNum-num;
soldNum=soldNum+num;
System.out.println("售出"+num+"余票"+freeNum);
notify();
}
多线程
class Main{
public static void main(String args[]) throws InterruptedException{
for(int i=0;i<=9;i++)
{
Thread_test thread=new Thread_test(i*10+1);
thread.start();
thread.join();
//可能抛出InterruptedException则需声明//不写则运行超时
}
}
}
(三)、数组
1. 排序:Arrays.sort(a[ ],start,end); 可以仅数组名a,或者加上start,end,0~n(n个数字)
2. 折半查找:Array.binarySearch(a[ ],number);
3. 冒泡排序:从n~0中依次遍历0~n-1,交换位置
4. char s[]=new char[1000]; 的s.length是1000
(四)、计算
1. Math.round(x) x小数的四舍五入 Math.PI Π
2. float x=0.111f; double y=0.1111; float要单独表明f
3. a.plus(b).print(); 将a的分数与b相加
4. String.format("%.2f",k); 保留两位小数