Java复习
增强for循环
for(int x: a)
可变参数
可变参数要在所有参数后面。
public class hello {
public static void main(String[] args) {
int[] array={1,2,3,4,5};
fun("haha", array);
}
public static void fun(String str, int ...array){
for (int i = 0; i <array.length ; i++) {
System.out.println(array[i]);
}
}
}
方法的重载
原理是根据参数的差异。
public class hello {
public static void main(String[] args) {
add(1,2);
add(3.0,4.0);
}
public static void add(int a, int b){
System.out.println(a+b);
}
public static void add(double a, double b){
System.out.println(a+b);
}
}
构造器
1.默认,就是自己不写构造函数,无参构造。
2.自己写了有参构造,就不给你默认了。
3.正因为如此,养成习惯,写了有参构造,就要把无参构造写上去。这样子类中没有写super(),让它自己默认super(),才不会出错。
内存分析
声明存在栈里,实例存在堆里。
封装
属性私有,get/set
继承
1.父类(基类),子类(派生类)。
2.儿子只能有一个爸爸,爸爸可以有多个儿子。
3.只有一个爸爸,若想得到更多,可以找爷爷要。
super详解
1.super调用父类的构造方法,必须在构造方法的第一个。
2.super和this不能同时调用构造方法。
方法的重写
1.方法名必须相同。
2.参数列表必须相同。
3.修饰符:范围可以扩大但是不能缩小:public>protected>default>private
4.抛出的异常:范围,可以被缩小,但不能扩大。
多态
1.多态是方法的多态,属性没有多态。
2.当父类引用指向子类对象时,static,final,private修饰的方法该调用谁的还是谁的,也就是决定权始终是左边。
Student student = new Person();
类型转换
1.父类引用指向子类的对象。
2.把子类转换为父类,向上转型。
3.把父类转换为子类,向下转型;强制转换
4.方便方法的调用,减少重复的代码!简介。
static
和类一起被调用。
1.匿名代码块
2.静态代码块
3.构造函数
执行顺序:静态代码块>匿名代码块>构造函数
代码
public class hello {
// 第2执行
{
System.out.println("匿名代码块");
}
// 第1执行,但只执行一次
static {
System.out.println("静态代码块");
}
// 第3执行
public hello(){
System.out.println("构造函数");
}
public static void main(String[] args) {
hello h = new hello();
System.out.println("==================");
hello h2 = new hello();
}
}
运行结果
静态代码块
匿名代码块
构造函数
==================
匿名代码块
构造函数
抽象类
//abstract 抽象类:类 extends:单继承 (接口可以多继承)
public abstract class Action {
public abstract void doSomething();
// 1.不能new这个抽象类,只能靠子类去实现
// 2.抽象类可以写普通的方法
// 3.抽象方法必须在抽象类中
}
接口
作用:
1.约束
2.定义一些方法,让不同的人实现
3.public abstract
4.public static final
5.接口不能被实例化,接口中没有构造方法
7.必须要重写接口中的方法
异常