# java ## 介绍 java基础 #### static static 修饰的成员变量叫做静态成员变量 静态成员变量存储在方法区中 静态成员变量被当前类的对象共享 静态成员变量可以使用对象名.属性名访问 但是为了防止一个对象对静态成员变量修改造成众多对象的变化,也可以使用类名.属性名访问(推荐) 没有static修饰的成员变量叫做实例变量 实例变量存储在堆内存中 实例成员变量是每个对象独有的 static修饰的成员方法叫做静态成员方法 静态成员方法中只能直接使用静态成员方法,(可通过对象间接调) 静态成员方法中不能使用this关键字,this代表当前对象,谁调用这个方法就会指向哪个对象,如果是类调用,this不能指向 静态成员方法可以使用对象名.方法名方式调用,但是静态成员方法推荐使用类名.方法名 静态成员方法只能直接调用其他静态成员方法(可间接调用) 没有static修饰的成员方法叫做实例成员方法 实例成员方法既可以直接使用静态成员变量,也可以直接使用实例成员变量 实例成员方法只能使用对象名.方法名调用 实例成员方法可以使用this关键字,this关键字也只能在实例成员方法中使用 实例成员方法既能直接调用其他静态成员方法,也能直接调用其他实例方法 在构造方法中,往往不会对静态成员变量进行初始化,不能因为一个新对象的产生就修改公共对象使用的静态成员变量 在构造方法中,往往只会对实例成员变量进行初始化 静态的跟静态的,实例的都行 #### 代码块 定义 没有方法头的代码 类型 普通代码块 每次实例化对象时都会执行一次全部的代码块 一般可以用于初始化实例成员变量 静态代码块 #### static代码块 静态代码块只会执行一次,当类的字节码进入内存时执行一次,后续不会再执行了 静态代码块一般用于给静态成员变量赋初始值,不能给实例成员变量赋值 #### static代码块 普通代码块 构造方法 执行顺序 static代码块>普通代码块>构造方法 #### package包 访问权限控制 包名:域名倒着小写 #### 封装 封装就是把对象的属性和方法结合为一个独立的整体,并尽可能隐藏对象的内部实现细节,仅仅对外公开使用的接口 权限修饰符 定义任何一个类,都应该进行封装处理。 1所有的属性都是private, 2给属性提供共有的get set方法去获取属性值,设置属性值。可以在set方法中对属性值做特殊的处理 3提供两个构造方法 优点: 1提高代码的安全性 2提高代码的复用性 3体现高内聚低耦合 #### this关键字 创建一个对象分为如下四步 1分配对象空间,并将对象成员变量初始化为0或空 2执行属性值的显示初始化 3执行构造方法 4返回对象的地址给相关的变量 this的本质就是创建好的对象的地址 this常用用法 1区分局部变量和成员变量 2构造方法重载时,他们之间相会调用会使用 this在调用构造方法前不允许有其他代码 #### 继承 private修饰的成员变量不可以被继承,仅能在当前类内部使用 子类继承父类,可以获得父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问(比如父类的私有属性和方法) 父类可以理解为众多子类公共属性和公共方法的集合 #### 权限修饰符 范围从小到大 private<default<protected<public private当前类使用,如果是父类的方法,不可被子类继承 default同包可继承可调用(同一个类 同一个包) protected跨包可继承可调用(同一个类 同一个包 子类) public 当前项目所有包所有类可继承可调用(所有包所有类) #### 方法重写 当子类中定义了和父类同名的属性时,父类的属性默认隐藏了 如果在子类中想要继续使用父类中隐藏的同名属性,使用super关键字调用 子类中对于父类同名方法的再次定义,子类中如果重写了父类的方法,父类的方法会默认隐藏, 在子类中如果想要调用父类中隐藏的方法可以使用super关键字 为什么需要进行方法重写? 1子类对父类的方法中实现的功能或算法并不满意,子类可以实现相同的功能,但是用不同的算法 2子类要在父类方法基础之上做到更多的事 3子类拒绝继承父类的方法 方法重写注意事项 1重写发生在子类中 2方法名必须相同 3参数列表必须相同 4返回值类型必须相同 5子类方法的访问修饰符大于等于父类方法的访问修饰符(重写的目的就是为了实现更多的功能)