Java学习笔记10_15

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.代码块

定义:使用{ }定义的一段代码

根据代码块出现的位置以及关键字不同,分为以下四类代码块

  1. 普通代码块

定义在方法中的代码块,了解即可,解决方法中变量重命名的问题

  1. 构造块(*******)

定义在类中的代码块(不加任何修饰符)

当有对象产生时,构造块优先于构造方法执行,产生几个对象,就调用几次构造块

作用:在构造方法执行之前进行一些初始化操作

  1. 静态代码块

在类中使用static定义的代码块

I.非主类的静态代码块

静态代码块在类加载(主方法中使用)时被调用,优先于构造块,不管产生多少实例化对象,只会被调用一次

II.主类中的静态代码块

主类中的静态代码块优先于主方法执行

  1. 同步代码块(多线程同步时讲)

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,不能直接调用):父类中的所有私有操作

  1. 方法覆写(重写)- override

覆写概念:发生在有继承关系的类之中,子类定义了与父类完全相同的方法(返回值、  参数列表、方法名全一样)

被覆写的方法不能拥有比父类更为严格的访问控制权限

 

判断当前方法调用的是哪个类的方法:

a.当前使用的对象是通过哪个类的new的

b.调用的方法是否被子类所覆写,如果被覆写,则调用的一定是子类所覆写后的方法

 

访问控制权限

private-私有访问<<default(啥也不写)[同一个源文件任意访问]-包访问权限<public(公有访问权限)

父类权限 <= 子类权限

父类方法 -private  子类方法 -public       <-错误

方法覆写不能出现private权限,隐式继承的方法无法被覆写。

 

解释方法重载(overload)与方法重写(override)的区别

 

猜你喜欢

转载自blog.csdn.net/a215012954/article/details/83108278