面向对象(二):常用知识上

一、成员变量和局部变量

1、区别
  1)在类中的位置不同
  • 成员变量:在类中方法外 
  • 局部变量:在方法定义中或者方法声明上 
  2)在内存中的位置不同
  • 成员变量:在堆内存 
  • 局部变量:在栈内存,随着方法在【栈】中运行  
  3)生命周期不同
  • 成员变量:随着对象的创建而存在,随着对象的消失而消失(new) 
  • 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失 
  4)初始化值不同
  • 成员变量:有默认初始化值 
  • 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用 
2、注意事项: 
  • 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
  • 就近原则与 this 关键字联合使用,可以明确的定位确定 局部变量、成员变量、内部类中的变量等。

二、形式参数的问题:(Java值传递)

1、基本类型:形式参数的改变不影响实际参数 。

2、引用类型:形式参数的改变直接影响实际参数。

<span style="font-family:Arial;font-size:18px;"><span style="font-family:Arial;">class StudentDemo {
     //如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。
     public void method(Student s) { //调用的时候,把main方法中的s的地址传递到了这里 Student s = new Student();
      s.show();
     }
}
</span></span>

三、匿名对象

<span style="font-family:Arial;font-size:18px;"><span style="font-family:Arial;">A a = new A();
new A();//匿名</span></span>

四、封装和private关键字

1、封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
2、private: 是一个权限修饰符,可以修饰成员变量和成员方法,被其修饰的成员只能在 本类中被访问
3、封装和private的应用:
  • 把成员变量用private修饰,类内部访问。
  • 提供对应的getXxx()和setXxx()方法。

五、this关键字

1、this:是当前类的对象引用。
  • 简单的记,它就代表当前类的一个对象。只有对象才能调用方法。
  • 谁调用这个方法,在该方法内部的this就代表谁。 
2、this的场景: 解决局部变量隐藏成员变量
3、内存图解:

六、构造方法

1、构造方法的注意事项:
  • 如果我们没有给出构造方法,系统将自动提供一个无参构造方法。 
  • 如果我们给出了构造方法,系统将不再提供默认的无参构造方法。 
  • 注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法。 
 2、给成员变量赋值有两种方式:(Spring的Ioc方式,其实也是属性输入与构造方法注入)
  • setXxx() 
  • 构造方法

七、创建对象做了哪些事情

八、static关键字

1、 static的特点:
  • 它可以修饰成员变量,还可以修饰成员方法,还可以修饰成员内部类。static 修饰的内容称其为:与类相关的,类成员。
  • 随着类的加载而加载,优先于对象存在 ,在构造方法执行之前,更在创建对象之前。
  • 静态方法中是没有this关键字的。静态是随着类的加载而加载,this是随着对象的创建而存在。
  • 存放在方法区,被类的所有对象共享。
  • 推荐使用类名调用。
  • 静态方法只能访问静态的成员变量和静态的成员方法 。简单记: 静态只能访问静态。
2、举例:咱们班级的学生应该共用同一个班级编号。
  • 如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
  • 举例:饮水机(用静态修饰),水杯(不能用静态修饰)
3、内存图:

九、final关键字

1、final可以修饰类,方法,变量
2、特点: 
  • final可以修饰类,该类不能被继承。
  • final可以修饰方法,该方法不能被重写。(覆盖,复写)
  • final可以修饰变量,该变量不能被重新赋值。因为这个变量其实是常量。
3、面试题:final修饰局部变量的问题?
  • 基本类型:基本类型的值不能发生改变。 
  • 引用类型:引用类型的地址值不能发生改变,但是,该对象的堆内存的值是可以改变的。
4、 final修饰变量的初始化时机
  • 被final修饰的变量只能赋值一次。
  • 在构造方法完毕前赋值(非静态的常量),即只能在定义的时候(推荐)和构造方法中赋值。
  • 静态的是在类加载器加载的时候,即final static 定义的时候即要赋值。
5、继承的代码体现 :由于继承中方法有一个现象:方法重写。 所以,父类的功能,就会被子类给覆盖掉。有些时候,我们不想让子类去覆盖掉父类的功能,只能让他使用。使用final关键字。

十、多态

1、前提
1)有继承或者实现关系。
2)要有方法重写。
  • 其实没有也是可以的,但是如果没有这个就没有意义。
          动物 d = new 猫(); 
          d.show(); 
          动物 d = new 狗(); 
          d.show();
3)有父类或者父接口引用指向子类对象。
  • 父 f = new 子();
2、多态中的成员访问特点: 
1)成员变量
  • 编译看左边,运行看左边。 
2)构造方法
  • 创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。 
3)成员方法
  • 编译看左边,运行看右边。 
4)静态方法
  • 编译看左边,运行看左边。 
  • 静态和类相关,算不上重写,所以,访问还是左边的。 
  • 由于成员方法存在方法重写,所以它运行看右边。
3、内存图

4、 对象转型
1)父类访问子类的功能:
  • 创建子类对象调用方法即可。(可以,但是很多时候不合理。而且,太占内存了) 
  • 把父类的引用强制转换为子类的引用。(向下转型) 
2)对象间的转型问题:
  • 向上转型: Fu f = new Zi(); 
    • 日常开发中,接口的使用最为常见
  • 向下转型: Zi z = (Zi)f;  
    • 要求该f必须是能够转换为Zi的,不然报ClassCastException-类型转换异常。
3)对象转型的内存图

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值