《弟哥带你学JAVA系列》 - 第三章 面向对象基础

150 阅读3分钟

基础知识

  1. 类内定义的成员变量会自动初始化(将内存里的比特全设为0),比如一个类定义了static int age; 在main里print(age)时会输出0;
  2. 类内的成员变量在类的范围内生效
  1. 调用函数时,会在栈内给形参分配位置,然后将实参的值赋给形参,函数结束后,栈内的形参被回收
  2. 构造函数不能有返回值和修饰符(public、final、static等)
  1. new一个对象时,在栈内生成引用(指针),在堆内生成对象

重载

  1. 方法名一致,形参类型一致会冲突,不算重载
  2. 方法名一致,形参类型不一致才是重载
  1. 由于在java中,整数常量会默认为int类型,所以下图的t.max()调用的是第一个

static

docs.oracle.com/javase/spec…

jvm各数据存储区

继承

类内部:只允许类内的方法访问该变量

继承的时候,private修饰的变量也会被继承,但无法通过子类内部的方法访问该集成的private变量,只能用父类的方法访问

java中,子类可以定义和父类一样的成员变量,jvm会为两个变量都分配内存空间,但若子类想访问父类的该变量,需要用super关键字

重写

子类的构造方法

Object类

object类是所有类的根类

toString 方法

返回 类名@hashcode

equals方法

equals默认情况比较两个对象地址是否相同(与==一样),故一般来说需要重写该方法

比如String类,就对该方法进行了重写,只要内容相同,就返回true

转型

注:Animal a = new Dog()

a instanceof Dog 返回的是true

此时,若想访问a所指的对象的Dog部分,需要:

Dog b = (Dog) a;

多态

动态绑定

在java中,用引用调用对象的方法时,是根据实际对象调用方法的,比如:

当子类重写父类的方法时,如Son类重写了Father类的方法,那么下面的代码将调用的是Son重写的代码

Father a = new Son();

a.name();

注意:动态绑定只对方法有效,不对成员变量有效!即若Son类里有和Father一样的成员变量,调用a.xxx时返回的是Father类的值!

深入解读:blog.csdn.net/sted_zxz/ar…

抽象类

抽象方法必须被重写

接口

JDK1.8之后,接口可以有静态方法,但必须有方法体,即body

静态方法无需也不能重写

可变参数列表

public static void executebindParam(PreparedStatement pstmt,Object ...os)

Object ...os这种写法是从Java 5开始的,Java语言对方法参数支持一种新写法,叫可变长度参数列表。

表示此处接受的参数为0到多个Object类型的对象,或者是一个Object[]

注意可变长度参数列表的格式:

  1. 参数类型和“...”三个点之间不必须有一个空格(Object ...os),Object...os也不会报错误;
  2. 可变长度参数列表这个参数必须是参数列表中的最后一个参数,不然会报错