第九天
来源:互联网 发布:淘宝的主要功能 编辑:程序博客网 时间:2024/06/12 00:32
构造方法,成员变量,静态,继承
一、构造方法
什么是构造方法,当我们要创建一个对象的时候就会使用到构造方法,可以实现对象的创建及对象信息的初始化工作
构造方法的使用及细节
1.构造方法的语法格式
访问修饰符 类名(参数列表){
方法体;
}
2.默认构造方法
3.带参的构造方法
4.默认特性,系统默认会给我们提供一个无参的构造方法
//系统默认会生成一个无参的构造方法
//1,方法不要写任何返回值
//2,方法名要跟类名一模一样
//3,细节:当你自己已经写了构造方法,系统将不会再提供默认的构造方法
二、考点:成员变量和局部变量的区别
成员变量和局部变量的区别?笔试考点
成员变量:
定义在类中,跟成员方法同级别
局部变量:
方法的参数,或者定义在方法内的变量
(1),位置不同,导致作用域不同
(2),生命周期不同
(3),内存的位置不同(后面讲对象内存图时再讲)
(4),初始值不同,局部变量默认不给初始化,需要你自己去初始化,才能使用
(5),奇葩考点,成员变量和局部变量同名的情况,考优先级问题
1. Static
1,关注其语法特点
2,关注其使用场景
//static 修饰的变量,一般会定义为public
l 静态变量
静态变量所有对象共享一份,非静态的成员变量,每个对象独享一份
l 静态变量和普通成员变量的区别(局部变量和成员变量的区别)
n 归属不同
u 成员变量:对象
u 静态变量:类
n 调用的方式不同
u 成员变量:对象.成员变量
u 静态变量:类名.静态变量
n 内存出现的时机不同
u 成员变量:对象创建
u 静态变量:load 类的字节码文件,优先于成员变量
n 内存的位置不同
u 成员变量:堆
u 静态变量:方法区-静态区
l 静态代码块
执行时机:当我们的类被加载的时候就会被执行,不管是否创建对象
执行次数:整个过程仅执行一次,不管创建多少对象都只执行一次
l 静态方法
可以通过对象或者类名来调用,但是建议用类名来调用
静态:
* 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文件被加载的同时加载于静态区了,所以可以直接用类名调用。
- 第九天
- 第九天
- 第九天
- 第九天
- 第九天
- 第九天
- 第九天
- 第九天!
- 第九天
- 第九天
- 第九天
- 世界杯第九天
- IBM实习第九天
- 第九天:听课笔记
- 第九天:总结
- 第九天总结0401
- 5.18 第九天 瓶颈
- 实习日记->第九天
- Varnish服务器的安装配置与优化
- navicat for Linux 破解
- HololensNavigation手势旋转对象
- Python对日期进行格式化
- ubuntu下ssh服务的安装与使用
- 第九天
- 京东2017年4月7日笔试编程原题解析(站队、终结者C)
- 【推荐】只需十四步:从零开始掌握Python机器学习
- 【lightoj】1263
- [构造] Codeforces 226D #140 (Div. 1) D. The table
- MoveAssetManager
- 使用docker安装rabbitmq及遇到的问题
- windows(64位)下xgboost的安装
- AngularJS添加样式