学习Java的第四周

一 . 引入关键字"static"

1. static基本概念

statuc : 共享,共用-------可以被多个对象共用.

2. 特点

1>被静态修饰的变量或方法,都是随着类的加载而加载

2>优先于对象存在,不能和 this 关键字共存 ( this 是需要等待对象被创建完毕,而被静态修饰的,优先进入 static 内存区  )

3>共享,共用(可以被多个对象共用)

4>被静态修饰的变量或方法,推荐使用类名访问 < 类名 . 变量名 / 类名 . 方法名() >

3. 注意事项

1>非静态的成员方法:可以访问静态的成员变量或非静态的成员变量;

2>静态的成员方法:只能访问静态的成员方法或静态的成员变量

二 . 局部变量和成员变量使用时机

这个变量能够描述这个类的属性(现实真实事物的真实属性)时将变量定义为成员变量.

1>静态变量和成员变量的区别

(1)存储区域不同

静态变量:存储在方法区中的共享内存区域中静态区域中(static区域). 

成员变量:堆内存中的.

(2)称谓不同

静态变量:跟类有关系(类加载,静态的东西就进static内存区)----->被称为"类成员".

成员变量:对象的特有属性------>称为"实例(对象)变量".

(3)生命周期不同

静态变量:随着类的加载而加载,随着类的加载完毕,进入static区域中,然后就消失了.

成员变量:随着对象的创建而存在,随着对象的创建完毕,等待垃圾回收器空闲时候回收而消失.

(4)调用方式不同

静态变量:既可以使用对象名访问,也可以使用类名访问,推荐使用类名访问(类成员).

成员变量:只能使用对象名来访问.

三 .自定义工具类(了解)

1> 工具类需求
(1). 无参构造私有化

(2).对外提供公共静态方法,直接通过类名访问

2> 如何通过文档注释生成文档说明书
使用命令:javadoc -d  目录名称 -author -version  ArrayTool.java(java文件)

四 .一个类的初始化过程


Student s = new Student();

(1)在栈内存中开辟空间 Student s,为变量s开辟空间

(2)new Student(),需要在堆内存中申请空间

(3)在申请空间的同时,需要对成员变量,进行默认初始化<根据数据类型进行默认赋值>

(4)当默认初始化完毕,申请空间完毕,产生堆内存空间地址

(5)通过构造方法初始化

(6)将堆内存空间地址值赋值给栈内存的变量s

(7)栈内存的变量s指向堆内存地址

(8)当对象整个完毕之后,等待垃圾回收器空闲时候回收不用的对象

五.代码块的含义

1> 代码块概念
代码块:使用{}包起来的称为代码块.

2> 代码块分类
(1) 局部代码块:   {}定义在局部位置(方法定义中定义);       

作用:限定局部变量的生命周期

(2) 构造代码块:   {} 定义在构造方法之前(类的成员位置);

特点:在执行构造方法之前,如果存在构造代码块,优先执行构造代码块,然后才是构造方法.

作用:将构造方法中初始化的过程,可以在构造代码块中使用(一般开发中很少,一些笔试题出现,考点:考的就是构造代码块在构造方法之前).

(3) 静态代码块:static{}

特点:随着类的加载而加载,优先于对象存在;  静态代码块只执行一次,因为类就加载一次.(考点)

3> 代码块优先级
静态代码块 > 构造代码块 > 构造方法

class Student{
 
    static{
        System.out.println("student的静态代码块1");
    }
    public Student(){
        System.out.println("student的无参构造方法");
    }
    public Student(String name){
        System.out.println("student的有参构造方法");
    }
    {
        System.out.println("student的构造代码块1");
    }
    static{
        System.out.println("student的静态代码块2");
    }
    {
        System.out.println("student的构造代码块2");
    }
}
 
public class StudentTest {
    static{
        System.out.println("静态代码块0");
    }
    public static void main(String[] args) {
        System.out.println("mian方法被执行");
        Student s = new Student() ;
        System.out.println("-------------------");
        Student s2 = new Student("张三") ;
    }
}


6.面向对象特征---------继承
6.1继承的概念
将多个类的共性内容抽取出来,放在一个独立类中,让这个独立的类和这多个类产生一种关系叫做 "继承".

6.2语法格式
class 子类名 extends 父类名{}

6.3继承的好处
(1)提高了代码复用性

(2)提高了代码的维护性

(3)类与类产生的这种"继承"关系,是多态的前提条件

6.4继承的弊端
因为存在"继承"关系,类与类之间就存在耦合性,开发中做到低耦合,高内聚.

6.5继承的特点
(1)在Java语言中,类与类之间的继承关系只支持单继承

(2)虽然类与类之间只支持单继承,但是可以多层继承

6.6继承的注意事项
最基本注意事项

<1>子类继承父类,只能继承父类非私有的成员,私有的成员可以间接通过公共访问方法访问,因为私有成员,只能在本类访问,外界类不能访问.

<2>子类继承父类,不能继承父类的构造方法,但是可以通过super访问

6.7继承中成员变量访问问题
(1)情况1:子类继承父类,子类的成员变量名称和父类的成员变量名称不一致的情况:分别调用即可

(2)情况2:子类继承父类,子类的成员变量名称和父类的成员变量名称一致的情况: 遵循就近原则

<1>先在子类的局部位置中找,如果存在,就使用

<2>如果不存在,那么就在子类的成员位置中找,如果存在,就使用

<3>如果子类的成员位置中不存在,那么就在父类的成员位置中找,如果存在,就使用;

<4>如果父类的成员位置中不存在,那么就报错了,压根不存在这个变量

6.8继承中构造方法的访问问题
子类继承父类,不能继承父类的构造方法,但是可以通过super访问.

访问方式:子类的所有构造方法都要(默认)访问父类的无参构造方法.

因为存在继承关系,子类的构造方法可能会用到父类的数据,所以需要让父类先初始化(构造方法),

然后子类在进行初始化;在子类所有构造方法中第一句话:super() :访问父类的无参构造方法

6.9面试题:开发中什么时候使用继承?
如果B类是A类的一种,或者A类是B类一种,这个时候就可以使用继承,继承是一种"is a"的关系.

7.this与super的区别
super:代表父类对象的地址值引用
this:代表当前本类的对象的地址值引用

(1)访问成员变量区别
 this.变量名 :访问当前类的成员变量

super.变量名:访问父类的成员变量

(2)访问构造方法区别
this(): 访问当前类的无参构造方法

super(): 访问的是父类的无参构造方法

this(xx):  访问的是当前类的有参构造方法

super(xx) :访问的是父类的有参构造方法

(3)访问成员方法区别
this.方法名(): 访问的是当前类的成员方法

super.方法名():访问的是父类的成员方法

8.方法重写(覆盖)
8.1方法重写概念
子类继承父类的时候,子类中出现了和父类一模一样的方法声明,子类的功能将父类的功能覆盖掉,使用自己的业务功能完成.

8.2方法覆盖原则
(1)方法名称,参数列表,返回值类型必须与父类相同.

(2)访问修饰符与父类相同或比父类更宽泛.

8.3方法重载与方法重写区别
(1)方法重载:overload:多个方法名称相同,形式参数列表不同,与返回值无关,目的:为了提高功能扩展性.

(2)方法重写:override:子类继承父类的时候,子类出现了 和父类一模一样的方法声明;目的:使用子类的功能将父类的功能覆盖掉.

9.final关键字
9.1概念
当父类中的功能不能让子类覆盖时,Java提供了一个关键字final:最终的,无法修改的.

9.2特点
(1)final修饰类,该类不能被继承,它不能在进行扩展了

(2)final修饰变量,此时这个变量是一个常量:自定义常量

(3)final修饰成员方法,此时这个方法不能被重写

9.3final修饰基本数据类型和修饰引用数据类型的区别
(1)修饰基本数据类型

修饰的基本数据类型:基本数据类型的值不能在改变,只能赋值一次,不能在赋值了;此时这种常量称

为"编译时期常量",Jvm只是检查语法,不需要加载.

(2)修饰引用数据类型

修饰的引用数据类型:引用数据类型的空间地址值不能在改变,但是里面的成员变量(没有加入final),

依然可以访问这种常量,Jvm加载引用数据类型,属于"运行时期常量"!
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值