第九天

来源:互联网 发布:淘宝的主要功能 编辑:程序博客网 时间:2024/06/12 00:32

构造方法,成员变量,静态,继承

一、构造方法

什么是构造方法,当我们要创建一个对象的时候就会使用到构造方法,可以实现对象的创建及对象信息的初始化工作

构造方法的使用及细节

1.构造方法的语法格式

访问修饰符 类名(参数列表){

    方法体;

}

2.默认构造方法

3.带参的构造方法

4.默认特性,系统默认会给我们提供一个无参的构造方法

//系统默认会生成一个无参的构造方法

//1,方法不要写任何返回值

//2,方法名要跟类名一模一样

//3,细节:当你自己已经写了构造方法,系统将不会再提供默认的构造方法

 

 

 

二、考点:成员变量和局部变量的区别

成员变量和局部变量的区别?笔试考点

成员变量:

定义在类中,跟成员方法同级别

局部变量:

方法的参数,或者定义在方法内的变量

1),位置不同,导致作用域不同

2),生命周期不同

3),内存的位置不同(后面讲对象内存图时再讲)

4),初始值不同,局部变量默认不给初始化,需要你自己去初始化,才能使用

5),奇葩考点,成员变量和局部变量同名的情况,考优先级问题

 

 

1. Static

1,关注其语法特点

2,关注其使用场景

//static 修饰的变量,一般会定义为public

静态变量

静态变量所有对象共享一份,非静态的成员变量,每个对象独享一份

l 静态变量和普通成员变量的区别(局部变量和成员变量的区别)

n 归属不同

u 成员变量:对象

静态变量:类

n 调用的方式不同

u 成员变量:对象.成员变量

静态变量:类名.静态变量

n 内存出现的时机不同

u 成员变量:对象创建

u 静态变量:load 类的字节码文件,优先于成员变量

n 内存的位置不同

u 成员变量:堆

u 静态变量:方法区-静态区

静态代码块

执行时机:当我们的类被加载的时候就会被执行,不管是否创建对象

执行次数:整个过程仅执行一次,不管创建多少对象都只执行一次

静态方法

可以通过对象或者类名来调用,但是建议用类名来调用

静态:

 * 1,静态变量,所有对象共享一份,访问方式:类名.变量名

 * 2,静态代码块,类加载的时候就自动执行,而且只执行一次

 * 3,静态方法,访问方式:类名.方法名()

 

实际应用场景:

假设现在项目中有多处地方需要做状态判断,以作为下一步操作的依据。

创建工具类

(1),解决数据匹配问题

(2),直接通过类名调用方法,无需创建对象

2. 继承-语法

l 继承解决了什么样的问题?

解决了多个类代码重复的问题

l Java里面实现继承的语法是怎么样的?

A extends B;

1,掌握继承的基本使用

2,掌握继承的语法细节(笔试题

l 分析一个子类的实例化过程?跟父类有什么样的关系?从构造方法来观察

答:先调用父类的构造方法(默认是调用父类的无参构造方法),再调用子类本身的构造方法

l 总结继承中,构造方法的注意事项(Super关键字的使用)

答:子类继承父类时,默认是调用父类的无参构造方法,若在父类中定义了一个带参数的构造方法,会将默认的无参构造方法覆盖掉。

调用super() 父类构造函数的时候只能调用在子类构造函数的第一行

 

l Java不支持多继承,但支持多重继承,何为多重继承?

问题:

1,继承,构造方法会不会被继承?

2,说说this和super的区别?

3. 作业

1. 分析main方法为什么是这么定义的?(即分析public static void这三个关键词的作用)

public:修饰为public可以从该类之外的地方访问。因为main方法是公共的,JVM就可以轻松的访问执行它。

static:因为main方法是静态的,JVM调用这个方法就不需要创建任何包含这个main方法的实例。

void:main返回任何值对程序都没任何意义

 

2. 为什么main方法里面直接调用方法,则该方法就必须是static的,而通过对象调用则不要求该方法为静态的。

main是静态方法,static 方法属于类,非static的方法属于具体的某一实例。运行static方法不需要实例,而运行非static方法则必须new一个实例,如果在static方法中调用非static方法,而实例此时并未被new出来,它当然就会报错。

面向对象的角度来理解,static方法对某一类所有实例所共有的方法,是共同的行为特点,与具体的实例特征无关;而非static方法是该类某个具体的实例的一种行为,设计非static类就是考虑到各个实例之间行为是有可能不相同的,如果在static方法中调用非static方法就是把特殊的行为当成一般行为来用,所有实例在这个非static方法上行为都一样了,这当然不行。

 

3. 创建一个类,有自己的静态代码块、构造方法。在测试类中创建该类的多个对象,得到其执行结果,请写上你对这个输出结果的分析

 

public class MyTest {//static{//System.out.println("我只会被调用一次哦呵呵");//}public static void main(String[] args){//Student student1 = new Student();//我是人//我是学生//先调用父类的构造方法,再调用子类的构造方法//Student student2 = new Student("易建联",20,210);//System.out.println(student2.getSchool()+"  "+student2.getAge()+"  "+student2.getDegree());/*我是父类带参我是子类无参我是子类带参千锋  20  本科super("千锋","本科","男")先调用父类带参,再调用public Student(String name,int age,int height);再调用this()即public Student()*/Student student3 = new Student();Student student4 = new Student();student3.weight = 110;System.out.println("旧");System.out.println(student3.weight);student4.weight = 180;System.out.println("新");System.out.println("student3:"+student3.weight);System.out.println("student4:"+student4.weight);/*旧110新student3:180student4:180*///静态变量是共享的}}

 

 

4. 判断下面的说法是否正确,并阐述理由

a在静态方法中可以直接使用非静态变量

错,见题2答案

 

b 在非静态方法中可以使用静态方法

 

c 静态方法中不能使用this关键字

静态方法没有对象,而this表示当前对象,所以不能使用this

 

d 用static声明的方法为静态方法,调用此方法时可直接用类名调用

对,静态方法在class文件被加载的同时加载于静态区了,所以可以直接用类名调用。

 


0 0