1. 从命令行输入数据
格式: Scanner reader=new Scanner(System.in);
此 reader 对象可以使用的方法: nextBoolean(),nextByte(),nextShort(),nextInt(),nextLong(),nextFloat(),nextDouble().
例如: double x=reader.nextDouble(); 这样就通过键盘输入了一个 double 值, 赋予 x
2. 数组
格式: 初始化: int arrInt[ ][ ]=new int[10][10];(可以使用列表初始化, 和 c++ 没差)
int len=arrInt.length;(赋予 len 值为 10)
复制数组:
1)arraycopy 方法: System.arraycopy(sourceArray,int index1,copyArray,int index2,int length);
这里将 sourceArray 从索引 index1 开始的 length 个元素的值赋给 copyArray(copyArray 从 index2 开始接收这些数据)
2)copyOf 方法: 例如: int [ ] b=Arrays.copyOf(arrInt,10); 这里将 arrInt 的前 10 个元素赋值给新数组
3)copyOfRange 方法: 例如: int[ ] c=Arrays.copyOfRange(arrInt,2,5); 这里将 arrInt 从索引 2 开始到 4 的元素赋值给新数组, 新数组长度为 3
数组元素排序:
例如: Arrays.sort(arrInt); 将数组 arrInt 中所有元素按升序排序
Arrays.sort(arrInt,2,5); 将数组 arrInt 从索引 2 到 4 的元素按升序排序
二分查找: int index=Arrays.binarySearch(arrInt,100); 使用二分查找法查找 arrInt 中值为 100 的元素, 返回该元素的索引 (若没有则返回负值)
继承与接口
super 关键字:
使用 super 调用父类的构造方法: 必须使用在子类的构造方法的第一条语句, super(parameters); 使用 super() 调用父类不带参数的构造方法
也可以使用 super 调用被子类隐藏的成员或者方法: super.member; super.method(parameters);
final 关键字:
final 类不能被继承和拥有子类;
final 方法不能被子类重写;
final 变量即为常量.
向上转型对象 (upcasting):
Tiger tiger = new Animal ();(子类对象放到父类对象中, 反之不可)
失去了子类新增的成员变量和方法, 但是可以访问被子类继承或者隐藏的父类成员和方法 (如果方法已被重写则使用的是重写的方法)
多态性:
父类的某个方法被子类重写时可以产生自己的功能行为
abstract 类和方法:(抽象)
- abstract class Abs{
- /*.............................*/
- abstract int min(int x,int y);}
抽象类允许声明抽象方法 (没有函数体), 当然在抽象类中也可以有普通的方法 (如果抽象类中没有抽象方法也可以), 不允许使用 new 创建抽象类的对象
对 abstract 类使用 upcasting 是利用多态性进行程序设计的核心技术之一
接口:
- interface Printable{
- public final int MAX=100;
- public abstract void add();
- public abstract float sum(float x,float y);}
- class Exp implements Printable{
- public void add(){
- /*.....................*/}
- public float sum(float x,float y){
- /*......................*/}
- /*......................*/}
接口体中的所有方法都是抽象方法, 所有量都是常量, public 接口的所有访问权限都是 public(即使成员的标识符不写也默认如此)
一个类如果想要实现接口, 必须自己重写接口的所有方法, 而且要标明 public
如果 interface 前面没有标明 public, 则其仅提供包访问权限
父类实现的接口子类无需再写明 (可直接使用)
接口回调:
- interface ShowMessage{
- void display(String s);}
- class TV implements showMessage{
- public void display(String s){
- System.out.println(s);} }
- class PC implements showMessage{
- public void display(String s){
- System.out.print(s);} }
- class Exp{
- public static void main(String[]args){
- ShowMessage sm;
- sm=new TV();
- sm.display("TCL");
- sm=new PC();
- sm.display("Lenovo"); }
非常类似于 upcasting, 通过接口变量中存放对象的引用, 使用对应类中重写的方法
内部类与异常类
内部类: 与 c++ 不同, Java 允许在类的内部声明另一个类
内部类仅供其外嵌类使用
1) 外嵌类的成员变量在内部类中仍然有效, 内部类中的方法也可以调用外部类的方法
2) 内部类中不能声明类变量和类方法, 外嵌类可以使用内部类声明对象作为外嵌类中的成员
- public class Outer{
- Inner inner;
- public void showInner(){
- inner.speak();}
- class Inner{
- void speak(){
- System.out.println("Inner.");} } }
- class TestInner{
- public static void main(String[] args){
- Outer test=new Outer();
- test.showInner();
- test.inner.speak();}
内部类可以是 static 类 (其他类不能是 static), 这样程序可以在其他类中使用 static 内部类创建对象 (static 内部类不能调用外嵌类的成员变量)
- public class Outer{
- Inner inner;
- public void showInner(){
- inner.speak();}
- static class Inner{
- void speak(){
- System.out.println("Inner.");} } }
- class TestInner{
- public static void main(String[] args){
- Outer test=new Outer();
- test.showInner();
- test.inner.speak();
- Outer.Inner inclass=new Outer.Inner();
- inclass.speak();}
匿名类: 就是一个没有名字的子类可以重写父类的方法, 匿名类的类体中不能声明 static 成员变量和方法, 直接使用父类的构造方法
- abstract class Speak{
- void speakhello();}
- class Student{
- void f(Speak sp){
- sp.speakhello();} }
- class TestNoName{
- Speak spk=new Speak(){
- public void speakhello(){
- System.out.println("Hello.");} }
- Student stu=new Student();
- stu.f(spk);
- stu.f(new Speak(){
- public void speakhello(){
- System.out.println("Hello,I'm a student.");} } }
可以使用匿名类配合接口实现 (与上面配合抽象类的情形一致)
异常类:
异常对象可以调用以下方法输出或得到异常信息:
- public String getMessage();
- public void printStackTrace();
- public String toString();
try-catch 语句: try 中的语句一旦发生异常立即转到相应异常类型的 catch 语句, catch 的参数是 Exception 类的某个子类 (几个 catch 的参数不能有父子关系)
- try{
- /* 可能发生异常的语句 */}
- catch(ExceptionSubClass1 e){
- /*..................*/}
- catch(ExceptionSubClass2 e){
- /*..................*/}
- /*.......................*/
自定义异常类:
- public class IntegerException extends Exception{// 设立自定义的 Exception 类的子类
- String message;
- public IntegerException(int m){
- message="年龄"+m+"不合理";}
- public String toString(){// 输出异常信息
- return message;} }
- class People{
- private age=1;
- public void setAge(int Age)throws IntegerException{// 在方法声明时使用 throws 关键字指出要产生的异常
- if(age<=0||age>=130){
- throw new IntegerException(age);}// 创建异常对象并使用 throw 关键字抛出异常对象, 结束方法
- else{
- this.age=age;} }
- public int getAge(){
- System.out.println("年龄"+age+"合理");
- return age;} }
- class TestException{
- public static void main(String[]args){
- People wang= new People(),zhang=new People();
- try{(wang.setAge(88);// 在 try-catch 语句块中调用能产生异常的方法
- System.out.println(wang.getAge());}
- catch(IntegerException e){
- System.out.println(e.toString());}
- try{zhang1.setAge(900);
- System.out.println(zhang.getAge());}
- catch(IntegerException e){
- System.out.println(e.toString());} } }
finally 子语句:
- try{
- }
- catch(ExceptionSubClass e){
- }
- finally{
- sentence
- }
不管 try-catch 部分是否异常, 都将执行 finally 中的语句 (除非 try-catch 语句中有程序退出代码)
断言语句 assert:
格式: assert booleanExpression; 或者 assert booleanExpression:messageException;(其中 messageExpression 是值为 String 的表达式, 如果 booleanExpression==false, 输出 messageExpression 中的内容)
来源: http://www.bubuko.com/infodetail-3210352.html