每日打卡 2021.10.15

本文深入探讨Java中的数组使用,包括Arrays类的常见操作,如填充、排序和比较,以及面向对象编程的核心概念——封装、继承和多态。讲解了类、对象、构造器、静态与非静态方法的区别,以及抽象类、接口和内部类的特性。涉及内存分析、异常处理和OOP在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组

  • 数组对象本身是在堆中的

  • 有序,相同类型数据

数组的使用

Arrays类

  • java.util.Arrays

  • 常用

    • fill

    • sort

    • equals

    • binarySearch

稀疏数组

  • 行号,列号,不同的值

面向对象

Java的核心思想:OOP(Object-Oriented Programming,OOP)

  • 分类,一类物具有一些相同的方法或功能

  • 以类的方法组织代码,以对象的组织(封装)数据

  • 抽象

Java三大特征

  • 封装

  • 继承

  • 多态

方法的调用

  1. 静态方法(static)

    • 可以直接使用类名调用

    • 和类一起加载

  2. 非静态方法(无static) 实例化对象才可以调用

类是一种抽象的数据类型,不能代表某一个具体事务

对象是抽象概念的具体实例

  • 类实例化后会返回一个自己的对象

使用new关键字创建---->分配内存空间 + 默认的初始化 + 类中构造器的调用(构造方法)

构造器

  • 一个类即使什么都不写,也会存在一个构造器

  • 构造方法与类名相同

  • 不能有返回值

  • 实例化初始值(this.属性 = 初始值)

  • 有参构造和无参构造(一旦定义了有参构造,无参构造就必须显示定义)

  • alt + insert 快速构造(IDEA)

简单的内存分析

封装

高内聚,低耦合

  • 对属性私有使用,保证了高内聚

  • 提供一些public的 get,set方法获得或设置这些属性值

封装提高了程序的可维护性,也避免了外界直接改变程序关键的数据

方法重载

相同名称,不同参数

继承

对某一批类的抽象,java只有单继承,extends

  • 子类是对父类的拓展

  • Ctrl+H可以展示目前该类的父类和子类(IDEA)

  • java中所有的类都默认继承object类

  • 私有的东西无法被继承

super

  1. super用于调用父类中的构造方法

  2. super必须在子类的方法或构造中

  3. 调用父类的构造器必须在子类构造器的第一行

  4. super和this不能同时调用构造方法

方法重写

  • 方法名必须相同

  • 参数列表必须相同

  • 返回类型必须相同

  • 非静态方法的调用才可以重写

  • 修饰符范围可以扩大 public>Protected>Default>private,但是不能缩小

  • 抛出的异常 范围也是可以被缩小,不能被扩大


多态

动态编译(可扩展性)

  • 父类型的引用可以指向子类对象(Father f1 = new Son();):

public class Application {
    public static void main(String[] args) {
        //一个对象的实际类型是确定的
        //可以指向的引用类型就不确定了,父类的引用可以指向子类
        Student s1 = new Student();
        Person s2 = new Student();
        Object s3 = new Student();
        //对象能执行那些方法,主要看对象左边的类型,和右边关系不大
        //父类型可以指向子类,但是不能调用子类独有的方法
    }
}

  • 多态是方法的多态

  • 前提是父类和子类之间的多态

  • 方法重写过了才有意义

  • instanceof(类型转换)

静态

静态变量和静态方法

  • 静态方法不能调用非静态方法,反之可以

  • 静态变量可以用类名直接提取(jvm实现)

静态代码块和匿名代码块

  • 匿名代码块

    • 不能主动调用

  • 静态代码块

    • 加载即执行(永久只执行一次)

加载顺序:静态代码块(只执行一次)-->匿名代码块-->构造方法

静态导入包

抽象类

  • abstract 修饰的类

  • 抽象类只能靠子类去实现

  • 抽象类里面可以写普通方法(抽象方法必须在抽象类中)

  • 抽象的抽象:约束

public abstract class Action {
    public static void main(String[] args) {
​
    }
​
    //约束,有人帮我们实现
    //抽象方法,只有方法名字,没有实现方法
    //抽象类的所有方法,继承了他的子类都必须要实现他的方法,除非子类也是抽象类
    //接口可以多继承
    public abstract void doSomething();
​
}

接口

  • 接口就是规范,定义的是一组规则

  • 接口的本质是契约

  • public interface UserService {
        public  abstract  void add(String name);
    ​
    }
  • 类可以实现接口

    • 实现了接口的类,必须要重写接口中的方法

    • public class UserServiceImpl implements UserService,Timer{
          @Override
          public void add(String name) {
      ​
          }
      ​
          @Override
          public void Change() {
      ​
          }
      }
  1. 约束作用

  2. 定义一些方法,让不同的人实现

  3. 方法都是public abstract

  4. public static final

  5. 不能被实例化(没有构造方法)

  6. 可以实现多个接口

内部类

  1. 外部类

  2. 内部类

  3. 静态内部类(无法直接访问非静态的属性)

  4. 局部内部类

  5. 匿名内部类

  6. 一个java类只有一个public class

异常

error 和 Exception

  • error

    • 由java虚拟机抛出

    • 无内存资源时,OutOfMemoryError,此时JVM选择线程终止

  • Exception

    • 由程序逻辑错误引起

抛出异常和捕获异常

  • 异常处理

    • try catch finally

    • throw/throws(在方法中用)

  • 自定义异常类

  • package com.wang.OOP;
    ​
    public class MyException extends Exception{
        private int detail;
        public MyException(int a){
            this.detail = a;
        }
        //异常的打印信息
        public String toString(){
            return "MyException{"+"detail="+detail+'}';
        }
    }
    ​
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值