深入变量
变量的定义语法:
数据类型 变量名 = 值;
根据位置不同,分为两大类:
-
成员变量:全局的变量 、 字段(定义到类里面的变量)
-
类成员变量(static修饰的变量, 类名.变量名)
-
实例成员变量(直接定义到类里面的)
-
-
局部变量;当前方法的变量
-
方法内部的变量
-
方法的形参
-
代码块里面的变量
public class VariableDemo { //类变量 public static final String VARIABLE_NAME = "类变量"; //实例变量 String name; public static void main(String[] args){ //局部变量 int a = 23; } public void eat(String name){ System.out.println("方法的形参"+name); for (int i = 0; i < 32; i++) { //也是局部变量 } { //代码块里面的局部变量 int b =44; } } }
变量的生命周期:
-
作用域范围内(最近的花括号) 销毁:作用域结束即销毁
-
成员变量(整个类里面都可以使用), 销毁:随 GC不定时回收
-
类的变量(整个代码里面都可以), 销毁:随类加载而加载进内存 --- 程序结束
-
什么时候用成员变量,什么时候用局部变量?
-
考虑变量的生存时间(会影响内存的开销)
-
能减少作用域的都需要减少,(节约内存的开销)
-
定义工具类的时候用成员变量,(static用起来方便),封装后利于多个方法的调用
package深入学习
<img src="C:\Users\wxj\AppData\Roaming\Typora\typora-user-images\image-20220503200545864.png" alt="image-20220503200545864" style="zoom: 33%;" />
-
java.lang java语言的核心包,是不需要导包的
-
java.util 工具类相关的包(Arrays)
面向对象
封装
封装是面向对象的特征之一。
表现:
-
方法就是一个封装
-
类也是一个封装
总结:
-
提高代码的复用性
-
影藏了实现细节,提高安全性
举例:电脑(cpu,内存,硬盘。。)
学生(名字,性别,年龄....)
访问修饰符
private:私有的,仅供类访问权限
缺省:包访问权限(本包访问)
protected:子类访问权限(给子类访问的)
public:公用的,任何地方都可以
修饰符 | 类内部 | 同一个包 | 子类 | 任何地方 |
---|---|---|---|---|
private | √ | × | × | × |
无 | √ | √ | × | × |
protected | √ | √ | √ | × |
public | √ | √ | √ | √ |
封装的实现
规范:
-
遵循javabean的规范
-
set get后面的单词一定使我们字段的首字母大写 setAge getAge
-
-
set不需要返回, get根据字段(成员变量的返回类型) int
-
当set里面的传入参数与成员变量的参数名一样时,则需要使用this关键字
this.name = name;
private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; }
需求:建一个person类,含有 name age address 字段
注意
-
静态方法里面不能用this关键字,默认get不写this,底层编译的时候会自动加上
-
this关键字可以在构造器构造方法里面使用
继承
创建对象的时候,构造方法是如何执行的?
-
先执行父类构造器
-
子类构造器
-
set get 方法
-
创建什么对象,打印的this就是谁
重写
重写本身与重载没什么关系
特点(一同,两小,一大):
-
方法名必须相同
-
参数列表必须相同 (类型,变量名)
-
发生在子类和父类之间
-
子类的返回类型是和父类一致或者比他小
-
子类的抛出异常是和父类一致或者比他小
-
子类的修饰符必须大于等于父类
重写与重载的区别:
-
方法重写:override
-
解决继承中父类不满足子类需求的要求,需要在子类中重写本方法
-
-
方法重载:overload
-
解决一个类中,相同功能的方法名不同的问题
-
抽象类方法
1.定义
public abstract class UsbAbstract { public abstract void usb(); public void print(){ System.out.println("这是抽象方法的print方法"); } }
-
注意事项:
-
抽象类也有构造方法,但是抽象类不能实例化(只能通过子类创建)
-
可以创建普通方法
-
抽象方法没有方法体,必须等子类实现
-
当子类继承是抽象类的时候,需要去实现抽象类(父类)的抽象方法
-