Java--基础

本文详细介绍了Java编程的基础,包括面向对象的封装、继承和多态,数组的使用,以及泛型的概念、优点、规则与限制。此外,还讨论了容器(集合类)如List、Set和Map,异常处理的机制,以及Java反射机制的应用。
摘要由CSDN通过智能技术生成

1.面向对象--封装、继承、多态

封装

        体现在:

  1. 私有成员变量,提供setXxx和getXxx方法
  2. 将代码抽取到方法中,这是对代码的一种封装
  3. 将属性抽取到类当中,这是对数据的一种封装

        好处:全性、复安用性

static注意事件:

        1.静态方法中,只能访问静态成员(成员变量,成员方法)

        2.非静态方法中,可以使用静态成员,也可以使用非静态成员;

        3.静态方法中,没有this关键字;

继承

Java的继承是单继承多实现,只能继承一个父类(如果不继承其他类,默认继承object类),但可以实现多个接口。子类可以直接使用父类中非私有的成员

  • 格式:public class 子类名 extends 父类名{}
  • super代表父类对象的引用
  • java只支持单继承,不支持多继承,但支持多层继承
  • new子类对象时,先新建父类对象,再新建子类对象,两者作为一个整体对象;调用成员时,先找子类,再找父类
  • 如果父类中的方法为 private 类型的,那么子类虽能继承,但无法覆盖
  • 子类拥有父类的所有非私有方法和属性,但可以不重写父类方法

        好处:复用性、维护性、是多态的前提

        super

  •  super()

        构造方法中的第一条语句默认都是:super() 。

        系统在每一个构造方法中,默认隐藏一句代码:super();

  • Super.xxxx()

        方法重写时,调用父类中同一个方法的代码

  • Super(参数)

        调用父类的构造方法,默认调用父类无参构造super(),手动调用有参构造super(),必须是首行代码

注意:super不能在静态方法中使用

        抽象类

abstract class

抽象方法:将共性行为(方法)抽取到父类之后,发现该方法的实现逻辑无法在父类中给出具体明确,该方法就可以定义为抽象方法;

抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类

        格式:

//抽象类
public abstract class Employee
{
   private String name;
   //其余成员
   
   public abstract double computePay();
   
   //其余代码
}

//子类
public class Salary extends Employee
{
   private double salary; // Annual salary
  
   public double computePay()
   {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }
 
   //其余代码
}
  • 抽象类不能实例化对象,所以抽象类必须被继承,才能被使用

                抽象类不能实例化对象:{防止调用没有方法体的方法;}

  • 抽象类中有构造方法
  • 抽象类的子类:
    1. 必须要重写父类中的抽象方法;
    2. 可以把自己也变成抽象类;
  • 抽象类中的方法

          抽象类中可以没有抽象方法,但是抽象方法的类一定是抽象类

多态

void f (父类型 o1) { }

多态前提:

   1:要有(继承\实现)关系

   2.要有方法重写

   3.要有父类引用,指向子类对象

             父类名 对象名 =new 子类名();

好处:派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。

  • 多态中转型存在的风险:

        如果被转的引用类型变量,对应的实际类型和目标类型不是同一种类型,那么在转换的时候就会出现ClassCastException(类型转换错误)

  •  避免强制转换出现的问题:

        关键字:instanceof
                使用格式:
                    变量名 instanceof  类型

                ( 理解:判断关键字左边的变量,是否是右边的类型,返回boolean类型结果)

  • 多态的实现方式:

        1.重写和重载

        2.接口

        3.抽象类和抽象方法

abstract class Animal {  
    abstract void eat();  
}  
  
class Cat extends Animal {  
    public void eat() {  
        System.out.println("吃鱼");  
    }  
    public void work() {  
        System.out.println("抓老鼠");  
    }  
}  
  
class Dog extends Animal {  
    public void eat() {  
        System.out.println("吃骨头");  
    }  
    public void work() {  
        System.out.println("看家");  
    }  
}

//使用:
Animal animal = new Cat(); //向上转型

2.数组

int[] a = new int[6];

        数组在内存。引用是在栈。
        因为数组是一个引用类型。所以传递进去的是它们的引用,故在方法中互换了它们的值,也必然影响到它们原来的值.

        数组是最为常见的一种数据结构,是相同类型的、用一个标识符封装到一起的基本类型数据序列或对象序列。可以用一个统一的数组名和下标来唯一确定数组中的元素。实质上,数组是一个简单的线性序列,因此访问速度很快。

        数组是具有相同数据类型的一组数据的集合。在程序设计中,可以将这些集合称为数组。数组中的每个元素具有相同的数据类型。在Java中同样将数组看作一个对象,虽然基本数据类型不是对象,但由基本数据类型组成的数组却是对象。

 Arrays 数组工具类

  1. Arrays.toString(数组) 把数组数据连接成字符串。
  2. Arrays.sort(数组) 数组排序 基本类型:优化的快速排序;引用类型:优化的合并排序。
  3. Arrays.binarySearch(数组,目标值)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值