6.2 static方法(类方法,静态方法)
与对象实例化无关,通过类名直接调用,常见于工具类方法
Arrars.sort()
System.arraycopy()
Arrays.copyOf()
静态方法不能访问类中普通属性
class Person {
private static int n;
public void fun(){
System.out.print(n);
}
}
public class Test{
public static void main(String[] args){
Person.fun();
}
}
静态方法可以访问类中静态属性
普通方法可以访问类中静态属性
普通方法可以访问类中普通属性
class Person {
private static int n;
public void fun(){
System.out.print(n);
}
}
public class Test{
public static void main(String[] args){
new Person().fun();
}
}
第六章
1.代码块
定义:使用{ }定义的一段代码
根据代码块出现的位置以及关键字不同,分为以下四类代码块
- 普通代码块
定义在方法中的代码块,了解即可,解决方法中变量重命名的问题
- 构造块(*******)
定义在类中的代码块(不加任何修饰符)
当有对象产生时,构造块优先于构造方法执行,产生几个对象,就调用几次构造块
作用:在构造方法执行之前进行一些初始化操作
- 静态代码块
在类中使用static定义的代码块
I.非主类的静态代码块
静态代码块在类加载(主方法中使用)时被调用,优先于构造块,不管产生多少实例化对象,只会被调用一次
II.主类中的静态代码块
主类中的静态代码块优先于主方法执行
- 同步代码块(多线程同步时讲)
2.继承-无须重写原有类代码的基础上,就拥有原有类所有属性与方法,对原有类进行功能上的扩展。
继承强调可重用
子类(派生类)
父类(超类,基类)
class 子类 extends 父类
继承的限制:
a.子类实例化前先调用父类构造方法,产生父类对象后再调用子类构造
public class HelloA {
//构造方法
public HelloA(){
System.out.println("Hello A!父类构造方法"); }
//非静态代码块 {
System.out.println("i'm A class.父类非静态代码块");
}
//静态代码块
static{
System.out.println("static A 父类静态代码块");
}
}
public class HelloB extends HelloA {
//构造方法
public HelloB(){
System.out.println("Hello B! 构造方法");
}
//非静态代码块
{
System.out.println("i'm B class.非静态代码块");
}
//静态代码块
static{
System.out.println("static B 静态代码块");
}
public static void main(String[] args) {
System.out.println("---start- ");
new HelloB();
new HelloB();
System.out.println("---end- ");
}
}
输出答案:36 7 2154 2154 8
static A 父类静态代码块
static B 静态代码块
---start- "
i'm A class.父类非静态代码块
Hello A!父类构造方法
i'm B class.非静态代码块
Hello B! 构造方法
i'm A class.父类非静态代码块
Hello A!父类构造方法
i'm B class.非静态代码块
Hello B! 构造方法
---end- "
b.Java只允许单继承,不允许多继承,允许多层继承(单继承局限)
c.在进行继承的时候,子类会继承父类的所有结构(包含私有属性构造方法和普通方法)
显示继承[所有没用private修饰的](可以直接调用):父类中的所有非私有操作
隐式继承[所有用private修饰的](必须通过其他形式调用,getter与setter,不能直接调用):父类中的所有私有操作
- 方法覆写(重写)- override
覆写概念:发生在有继承关系的类之中,子类定义了与父类完全相同的方法(返回值、 参数列表、方法名全一样)
被覆写的方法不能拥有比父类更为严格的访问控制权限
判断当前方法调用的是哪个类的方法:
a.当前使用的对象是通过哪个类的new的
b.调用的方法是否被子类所覆写,如果被覆写,则调用的一定是子类所覆写后的方法
访问控制权限
private-私有访问<<default(啥也不写)[同一个源文件任意访问]-包访问权限<public(公有访问权限)
父类权限 <= 子类权限
父类方法 -private 子类方法 -public <-错误
方法覆写不能出现private权限,隐式继承的方法无法被覆写。
解释方法重载(overload)与方法重写(override)的区别