java面对对象编程---其它关键字与java面对对象相关的知识

1. 其它关键字

1.1 this关键字

this关键字是当前实例化对象的引用,在方法或者构造器内部使用,它在方法内部使用,表示这个方法所属对象的引用;它在构造器内部使用,表示该构造器正在初始化的对象。this关键字可以调用类的属性、方法和构造器。
this关键字的使用说明:

  1. 在任意方法或构造器内,如果使用当前类的成员变量或成员方法可以在其前面添加this,
    增强程序的阅读性。不过,通常我们都习惯省略this。
  2. 当形参与成员变量同名时,如果在方法内或构造器内需要使用成员变量,必须添加this来表明该变量是类的成员变量。
    3.使用this访问属性和方法时,如果在本类中未找到,会从父类中查找。

使用this关键字调用构造器的注意点:
3. 可以在类的构造器中使用"this(形参列表)"的方式,调用本类中重载的其他的构造器!
4. 明确:构造器中不能通过"this(形参列表)“的方式调用自身构造器
5. 如果一个类中声明了n个构造器,则最多有 n - 1个构造器中使用了"this(形参列表)”
6. "this(形参列表)“必须声明在类的构造器的首行!
7. 在类的一个构造器中,最多只能声明一个"this(形参列表)”

1.2 super关键字

super关键字指代父类对象的引用,在子类使用来调用父类的属性、方法和构造器,其使用方法和this关键字类似。
super调用父类的属性和方法:

  1. 我们可以在子类的方法或构造器中。通过使用"super.属性"或"super.方法"的方式,显式的调用父类中声明的属性或方法。但是,通常情况下,我们习惯省略"super."
  2. 特殊情况:当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的使用"super.属性"的方式,表明调用的是父类中声明的属性。
  3. 特殊情况:当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须显式的使用"super.方法"的方式,表明调用的是父类中被重写的方法。

super关键字调用父类中的构造器:

  1. 子类中所有的构造器默认都会访问父类中空参数的构造器
  2. 当父类中没有空参数的构造器时,子类的构造器必须通过this(参数列表)或者super(参数列表)语句指定调用本类或者父类中相应的构造器。同时,只能”二选一”,且必须放在构造器的首行
  3. 如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有无参的构造器,则编译出错。
    子类对象实例化过程:
    当我们通过子类的构造器创建子类对象时,我们一定会直接或间接的调用其父类的构造器,进而调用父类的父类的构造器,…直到调用了java.lang.Object类中空参的构造器为止。正因为加载过所的父类的结构,所以才可以看到内存中父类中的结构,子类对象才可以考虑进行调用。图示如下:
    在这里插入图片描述

1.3 package关键字

package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。它的格式为:

package 顶层包名.子包名 ;

包对应于文件系统的目录,package语句中,用 “.” 来指明包(目录)的层次;包通常用小写单词标识。通常使用所在公司域名的倒置。
包的作用:

  1. 包帮助管理大型软件系统:将功能相近的类划分到同一个包中。比如:MVC的设计模式
  2. 包可以包含类和子包,划分项目层次,便于管理
  3. 解决类命名冲突的问题
  4. 控制访问权限
    JDK中主要的包介绍
    在这里插入图片描述

1.4 关键字import

为使用定义在不同包中的Java类,需用import语句来引入指定包层次下所需要的类或全部类(.*)。import语句告诉编译器到哪里去寻找类。语法格式为:

import 包名. 类名

使用import关键字注意点:

  1. 在源文件中使用import显式的导入指定包下的类或接口
  2. 声明在包的声明和类的声明之间。
  3. 如果需要导入多个类或接口,那么就并列显式多个import语句即可
  4. 举例:可以使用java.util.*的方式,一次性导入util包下所有的类或接口。
  5. 如果导入的类或接口是java.lang包下的,或者是当前包下的,则可以省略此import语句。
  6. 如果在代码中使用不同包下的同名的类。那么就需要使用类的全类名的方式指明调用的
    是哪个类。
  7. 如果已经导入java.a包下的类。那么如果需要使用a包的子包下的类的话,仍然需要导入。
  8. import static组合的使用:调用指定类或接口下的静态的属性或方法

1.5 static关键字

static关键字可以修饰属性、方法、代码块、内部类,表示该类独有的,所有的实例化对象共享一份。
staic修饰属性: 静态变量(类变量)
实例变量:我们创建了类的多个对象,每个对象都独立的拥一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值的修改。
静态变量:我们创建了类的多个对象,多个对象共享同一个静态变量。当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。
说明:

  1. 静态变量随着类的加载而加载。可以通过"类.静态变量"的方式进行调用
  2. 静态变量的加载要早于对象的创建。
  3. 由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中。
    内存解析
    在这里插入图片描述
    static修饰方法:静态方法(类方法)
    ① 随着类的加载而加载,可以通过"类.静态方法"的方式进行调用

    静态方法 非静态方法
    类 yes no
    对象 yes yes
    ③ 静态方法中,只能调用静态的方法或属性,非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性。

1.6 final关键字

final关键字用来修饰类、变量、方法,具体说明如下:

  1. final标记的类不能被继承。提高安全性,提高程序的可读性。如String类、System类、StringBuffer类。
  2. final标记的方法不能被子类重写。比如:Object类中的getClass()。
  3. final标记的变量(成员变量或局部变量)即称为常量。名称大写,且只能被赋值一次。如:
    final double MY_PI = 3.14;

2. javaBean

  • JavaBean是一种Java语言写成的可重用组件。
  • 所谓javaBean,是指符合如下标准的Java类:
  1. 类是公共的
    有一个无参的公共的构造器
  2. 有属性,且有对应的get、set方法
  3. 用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关
    心任何改变。
    栗子:
public class JavaBean {
private String name; // 属性一般定义为private
private int age;
public JavaBean() {
}
public int getAge() {
return age;
}
public void setAge(int a) {
age = a;
}
public String getName() {
return name;
}
public void setName(String n) {
name = n;
}
}

3. Object类的使用

Object类是所有Java类的根父类, 如果在类的声明中未使用extends关键字指明其父类,则默认父类
为java.lang.Object类。Object类中定义所有通用的方法,但没有属性,这些通用的属性包括方法:equals() / toString() / getClass() /hashCode() / clone() / finalize()/ wait()/ notify()/notifyAll()等。
equals()方法
说明:

  1. 是一个方法,而非运算符
  2. 只能适用于引用数据类型
  3. Object类中equals()的定义:
public boolean equals(Object obj) {
        return (this == obj);
  }
   //说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
  1. 像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。
  2. 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们就需要对Object类中的equals()进行重写.
    重写的原则:比较两个对象的实体内容是否相同.
    重写equals栗子
class User{
String name;
int age;
	//重写其equals()方法
	public boolean equals(Object obj){
		if(obj == this){
			return true;
		}
		if(obj instanceof User){
			User u = (User)obj;
			return this.age == u.age && this.name.equals(u.name);
		}
		return false;
	}
}

4. 包装类的使用

为了使基本数据类型具有类的特征,故引入包装类,基本数据类型对应的包装类对象如下:
在这里插入图片描述
包装类、基本数据类型、String间的转换
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值