Java学习随笔 Java基础知识 2020-1-8

预览和回顾

  • 可变参数的作用和特点
  • 方法重载和方法重写
  • ==和equals
  • static关键字

可变参数

  1. 可变参数的作用和特点
    1.可变参数的形式 ...
    2.可变参数只能是方法的形参
    3.可变参数对应的实参可以0,1,2.....个,也可以是一个数组
    4.在可变参数的方法中,将可变参数当做数组来处理
    5.可变参数最多有一个,只能是最后一个
    6.可变参数好处:方便 简单 减少重载方法的数量
    7.如果定义了可变参数的方法,不允许同时定义相同类型数组参数的方法

  2. 数组做形参和可变参数做形参联系和区别
    联系:
    1.实参都可以是数组;
    2.方法体中,可变参数当做数组来处理
    区别:
    1.个数不同 可变参数只能有一个 数组参数可以多个
    2.位置不同 可变参数只能是最后一个 数组参数位置任意
    3.实参不同 可变参数实参可以0,1,2.....个,也可以是一个数组,数组的实参只能是数组

方法重载和方法重写(覆盖)的区别

英文 位置不同 作用不同
重载 overload 同一个类中 在一个类里面为一种行为提供多种实现方式并提高可读性
重写 override 子类和父类间 父类方法无法满足子类的要求,子类通过方法重写满足要求
修饰符 返回值 方法名 参数
重载 无关 无关 相同 不同
重写 大于等于 小于等于 相同 相同

==和equals

==和equals的区别和联系

==:
a) 基本类型,比较的是值
b) 引用类型,比较的是地址
c) 不能比较没有父子关系的两个对象
equals()
a) 系统类一般已经覆盖了equals(),比较的是内容。
b) 用户自定义类如果没有覆盖equals(),将调用父类的equals(比如是Object),而Object的equals的比较是地址(return (this == obj);)
c) 用户自定义类需要覆盖父类的equals()

注意:Object的==和equals比较的都是地址,作用相同

Integer类比较的问题

在java中,用【Integer a = 数字】来赋值的时候Integer这个类调用的是public static Integer valueOf(int i)这个方法。
而valueOf()函数的源码为:

public static Integer valueOf(int i) {
        if(i >= -128 && i <= IntegerCache.high) return IntegerCache.cache[i + 128]; else return new Integer(i); } 

可以发现对传入参数i做了一个判断。在-128<=i<=127的时候是直接用的int原始数据类型,而超出了这个范围则是new了一个对象。Byte Short Long 等有同样现象,使用.equals()来比较。

static关键字

static关键字的作用(修饰变量、方法、代码块)

static可以修饰变量、方法、代码块和内部类
static属性属于这个类所有,即由该类创建的所有对象共享同一个static属性。可以对象创建后通过对象名.属性名和类名.属性名两种方式来访问。也可以在没有创建任何对象之前通过类名.属性名的方式来访问。

static变量和非static变量的区别

1.在内存中份数不同
不管有多少个对象,static变量只有1份。对于每个对象,实例变量都会有单独的一份
static变量是属于整个类的,也称为类变量。而非静态变量是属于对象的,也称为实例变量
2.在内存中存放的位置不同
静态变量存在方法区中
实例变量存在堆内存中
3.访问的方式不同
实例变量: 对象名.变量名 stu1.name="a";
静态变量:对象名.变量名 stu1.name="b"; 不推荐如此使用
类名.变量名 Student.name="c"; 推荐使用
4.在内存中分配空间的时间不同
实例变量:创建对象的时候才分配了空间。
静态变量:第一次使用类的时候

static方法

静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。

static代码块

当类被第一次使用时(可能是调用static属性和方法,或者创建其对象)执行静态代码块,且只被执行一次,主要作用是实现static属性的初始化。

static内部类

属于整个外部类,而不是属于外部类的每个对象。不能访问外部类的非静态成员(变量或者方法),.可以访问外部类的静态成员

posted @ 2021-01-08 15:33  Sheldon-Cooper  阅读(42)  评论(0)    收藏  举报