类和对象的知识(2022.3.27)

目录

面向对象的封装类

构造方法

this关键字


  1. 面向对象的封装类

    • 封装之后,对于那个事务来说,看不到事物比较复杂的那一面,只能看到该事物简单的一面。复杂性封装,对外提供简单的操作入门。照相机就是一个很好的封装案例,照相机的实现原理非常复杂,但是对于使用者来说,操作起来是非常方便非常便捷的,还有电视机也是封装的,电视机内存实现非常复杂,但对于使用者来说不需要关心内部的实现原理,只需要会操作遥控器就行

    • 封装之后才会形成真正的“对象",真正的”独立体“

    • 封装就意味着以后的程序可以重复使用,并且这个事物应该适应比较强,在任何场合都可以使用

    • 封装之后,对于事物本身,提高了安全性【安全级别高】

    • 封装步骤:

      所有属性私有化,使用private关键字进行修饰,private表示私有的,修饰的所有数据只能在本类中访问

      对外提供简单的操作入口,也就是说以后外部程序想访问get属性,必须通过这些简单的入口访问:——对外提供两个公开的方法,分别是set方法(修改属性)和get方法(读取属性)

      1. set方法命名规范:

        public void set+属性名首字母大写(一个参数){ xx=一个参数; }

      2. get方法命名规范:

        public int get+属性名首字母大写(无参)){ return xx; }

      3. setter方法和getter方法没有static关键字;

      4. 有static关键字修饰的方法的调用:类名.方法名(实参);

      5. 没有static关键字修饰的方法的调用:引用.方法名(实参);

  2. 构造方法

    • 构造方法又被称为构造函数/构造器/Constructor

    • 构造方法语法结构:

      [修饰符列表] 构造方法名(形式参数列表){ 构造方法体 }

    • 对比普通方法语法结构:

      [修饰符列表] 返回值类型 方法名(形式参数列表){ 方法体 }

    • 对于构造方法来说,”返回值类型“不需要指定,并且也不能写void,只要写上void,这个方法就成为普通方法

    • 构造方法名必须与类名一致

    • 构造方法的作用,创建对象的同时,初始化实例变量的空间

    • 构造方法的调用:new 构造方法名(实参列表)

    • 构造方法没有返回值(每一个构造方法实际上执行结束之后都有返回值,但是这个“return 值“;这样的语句不需要写。构造方法结束时java程序自动返回值,并且返回值类型的构造方法所在类的类型。由于构造方法得到返回值类型就是类本身,所以返回值类型不需要写)

    • 当一个类中没有定义任何构造方法的话,系统默认给该类提供一个无参数的构造方法,这个构造方法被称为缺省构造器

    • 当一个类显示的将构造方法定义出来了,那么系统则不再默认为这个类提供缺省构造。建议开发中手动的为当前类提供无参数的构造方法,因为无参构造方法太常用了

    • 构造方法支持重载机制。在一个类当中编写多个构造方法,多个构造方法显然已经构成方法重载机制

    • 成员变量之实例变量,属于对象级别的变量,这种变量必须先有对象才能有实例变量,实例变量没有手动赋值的时候,系统默认赋值,实例变量的内存空间是在构造方法执行过程中开辟的,完成初始化的。系统在默认赋值的时候,也是在构造方法执行过程中完成赋值的

  3. this关键字

    • 没有static关键字的方法被称为“实例方法”,访问格式“引用.类名”

    • 没有static关键字的变量被称为“实例变量”

    • 当一个行为/动作执行的过程当中是需要对象参与的,那么这个方法一定要定义为“实例方法”,不要static关键字

    • this不能使用在带有static的方法中

    • this可以出现在实例方法中,this指当前正在执行这个动作的对象。this代表当前对象。

    • this可以省略

    • this是一个引用,是一个变量,this变量保存了内存地址指向了本身,this存储在JVM堆内存java对象内部

    • 实例方法必须先创建对象,通过引用.的方式访问,实例方法的调用必须有对象存在

    • public class ThisTest{
          //带有static
          //主方法
          public static void main(String[] args){
              //调用doSome方法
              ThisTest.doSome();
              /*ThisTest.dother();
              编译错误,因为dother()是实例方法,必须先创建对象,通过引用.的方式访问
              */
              ThisTest tt=new ThisTest();//创建对象
              tt.dother();
              //以上代码表示的含义:调用当前对象的dother()方法,但是由于main方法中没有         this,所以以下方法不能调用
              //无法从静态上下文引用非静态变量this
              //dother();
              //this.dother();无法从静态上下文引用非静态变量this
              tt.run();
          }
          //带有static
          public static void doSome(){
              System.out.println("do some!");
          }
          public void dother(){
              System.out.println("do ther!");
          }
          //run是实例方法,调用run方法的一定是有对象的存在的
          //一定是先创建了一个对象才能调用run方法的
          public void run(){
              //在大括号中的代码执行过程当中一定是存在“当前对象”的
              //也就是说这里一定是有this的
              System.out.println("run!");
              
              //dother是一个实例方法,实例方法调用必须有对象存在
              //以下代码表示的含义就是:调用当前对象的dother方法
              dother();//this大部分情况下是可以省略的
              //this.dother();这个是比较完整的
          }
      }
      /*总结
      带static的方法当中不能”直接“访问实例变量和实例方法
      因为实例变量和实例方法都需要对象存在
      而static的方法中是没有this的,也就是说当前对象是不存在的
      自然也无法访问当前对象的实例变量和实例方法的
      */

    • 内部类可以直接访问外部类的成员,包括私有成员

      外部类要访问内部类的成员必须要建立内部类的对象

      创建 内部类对象格式:

      外部类名.内部类名 对象名 = new 外部类型().new 内部类型();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值