Java之Class类&面向对象

Class类

  1. 概念:
    1. 类是具有相同属性或者行为的一类事物
    2. 类本身可以再被抽象,因为类也有共同的属性和行为(比如类都有属性、构造器、方法,都能调用方法),所以把类们右抽象成一个类 Class。
  2. Java 中有一个 Object 类,是所有 Java 类的继承根源,其内部声明了数个应该在所有 Java 类中被改写的方法:hashCode()、equals()、toString()、getClass()等。其中 getClass() 返回一个 Class对象
  3. Class 类十分特殊。
    1. 它和一般类一样继承自 Object 类,其实体用以表达 Java 程序运行时的 classes 和 interfaces,也用来表达 enmu、array、primitive、 Java types(boolean、byte、char、short、int、long、float、double)以及关键词 void。
    2. 当一个 class 类被加载,或当加载器(class loader) 的 defineClass() 被 JVM 调用,JVM 便自动生成一个 Class 对象。
  4. 在学习 Class 类的过程中,还需要学习:
    1. Field类:类属性的抽象
    2. Method类:类方法的抽象
    3. Constructor类:类构造器的抽象
  5. Class 类中需要掌握的方法:获取类对象
    1. 通过 Class.forName("类的全路径")
    2. 通过类的名称打点 class ,如:Person.class
    3. 通过该类的对象调用 getClass() 方法

面向对象

  1. 特性:封装,继承、多态、抽象
  2. 类之间的关系:
    1. 依赖、聚合、继承
  3. 非静态方法依托对象而存在,非静态方法只能依托对象调用
  4. Java 引用类型的底层是 C 语言的指针形式:
    1. 引用类型 = 引用类型:代表两个变量的指向相同
    2. C 语言类型指针:
      1. 当指针指向别的变量的时候,此时原指针申请的空间产生内存泄漏问题
      2. 需要手动 free() 释放内存
    3. Java 不会存在内存泄漏,Java 有自动回收机制,回收没有被指向的变量
  5. 通过类名  方式调用方法,说明它是静态变量
    1. 静态变量用 static 修饰
  6. 查看器get()、更改器set():
    class mian{
        int[] arr = {2,4,5,6};
        public int[] get(){
            return arr;
        }
    }
    
    int[] set = mian.get();
    set[0] = 100;
    System.out.println(arr[0]);     //arr[0] = 100;
    1. 默认的 get()、set() 方法并不会并保障数据的安全
    2. 对于 private 类型变量修改和查询
    3. 比较灵活,如:可读不写、可写不读……
    4. 默认的 get()、set() 方法不安全:
      1. 只读的时候可以通过下标修改里面的数据
      2. 解决方法:
        1. get() 方法里重新定义一个变量,把原变量名的值赋给新变量,暴露新变量名的地址,即可保证安全
      3. class mian{
            int[] arr = {2,4,5,6};
            public int[] get(){
                int[] brr = Arrays.copyOf(arr,arr.length);
                return brr;
            }
        }
        
        int[] set = mian.get();
        
        set[0] = 100;    //此时修改的是 brr 内的值,不会影响到原数组 arr 内的值
        
        System.out.println(arr[0]);     //arr 内的数据不会发生改变
    5. 方法的调用是在堆内存中拷贝一份,放入栈内压栈执行
  7. 构造器:
    1. 构造器与类名同名
    2. 每个类可以有多个构造器(入参不能一样)
    3. 构造器可以有 0 个或多个入参
    4. 构造器没有构造器
    5. 构造器总是伴随 new 操作一起使用

类与对象 

  1. Java核心思想:封装、继承、多态、接口
  2. 类:类是创建对象的模板
    1. 所有代码都应该写在类里面
    2. 一个类里面可以通过 new 关键字创建多个对象
      class Test{
          public static void main(String[] args){
              Person p1 = new Person();
              //Person:数据类型,决定数据/对象在内存当中的存储形式
              //p1:变量名/对象名
              //new:在堆内存中开辟内存空间,创建对象
              //Person():构造器,在创建对象的时候给对象赋值
      
              Person p2 = new Person();
              Person p3 = new Person();
          }
      }    
    3. 相同的数据不同的存储类型,在内存中的存储形式是不一样的
    4. 类方法中可以直接调用本类的类方法
    5. 在类方法中可以调用实例方法 
  3. 类和对象的关系:
    1. Java 是面向对象的语言
    2. 类是构建对象的模板
    3. 类中有什么,该类的实例对象中就应该有什么
    4. 有类不一定有对象
  4. 面向过程和面向对象编程:
    1. 面向过程编程:
      1. 变量和方法都写在类中
      2. 调用者都调用当前这个类,此时就会出现数据覆盖情况
    2. 面向对象编程:
      1. 每次调用都是一个独立的对象,对象中的数据不会相互干扰
  5. 动态代理:
    1. 一个类通过反射的形式生成多个对象
    2. 通过对象来进行代理,运用于多个不同的对象
  6. 构造器:
    1. 见面向对象第七点
  7. 数据类型:数据在内存中如何存储
    1. int 类型的内存结构:
      1. 1 bit:代表正负号
      2. 31 bit:表示值
    2. float 类型的内存结构:
      1.  1 bit:代表正负号
      2.  8 bit:代表小数点当前的位置
      3.  23 bit:表示值
    3. byte 类型的内存结构:
      1.  1 bit:代表正负号(0,1)
      2.  7 bit:代表值
  8. new 关键字:
    1. 主要作用:在对内存中开辟一块内存空间
    2. 例:
      Class Test{
          public static void main(String[] args){
              //通过 new 关键字在堆内存中开辟一块内存空间
              Car car = new  Car;
          }
      }
  9. this 关键字:
    1. 专属于对象的关键字
    2. this 关键字:代指当前对象
    3. this 属于对象层面
    4. 方法名和参数列表:
      1. 方法名和参数列表共同组成了方法的签名,方法的签名在同一个类当中是不能重复
  10. static 关键字:
    1. 专属于类的关键字
    2. 被 static 修饰的方法叫类方法
    3. 被 static 修饰的变量或方法存储在方法区中的静态常量池,是被对象所共享的
    4. static 关键字不能修饰局部变量
    5. static 代码块只有加载到 JVM 内存中才会执行,创建对象时不会执行
    6. 内存基础运行见:Java之内存基础运行-优快云博客
  11. 全局变量和局部变量:
    1. 在类当中和方法同级的变量是全局变量
    2. 在方法中定义的变量是局部变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值