类和对象整理

类和对象
1.概念

类是具有相同行为和状态的一组对象的模板,类一般用于描述某一群体,或者某一类事物的共性,例如:鸟类,人类或者建筑工人,艺术家等等。类是抽象的。类是对象的模板,对象是类的实例。

2.语法
[修饰符] class ClassName{} 
3.类之间关系
  1. 依赖(uses-a)

  2. 聚合(has-a)

  3. 继承(is-a)

4.自定义类
  1. 语法:类是由属性(field)和方法(method)组成

class ClassName{
    field;
    field;
    method(){}
}
5.对象

类是对象的模板,对象是类的实例,类描述了一类事物或者群体,是抽象的,对象则是具体的,例如学生类是抽象的,但是学生张三则是具体的。

6.创建对象的方式
  1. new运算符

//类名 对象名 = new 构造方法(参数列表)
Hero h = new Hero();
  1. 反射

//第一种
Hero h = new Hero();
Class clazz = h.getClass();
//第二种
Class clazz = Hero.class;
//第三种
Class.forName("cn.itlaobing.java.Hero")
  1. clone

//类必须要实现CloneAble接口
Hero h = new Hero();
h.clone()
  1. 反序列化

//类必须实现序列化接口
7.变量
  1. 实例变量:定义在类内部,方法外部的变量

  2. 局部变量:方法参数,方法内部定义的变量,循环结构,分支结构,代码块内定义的变量

  3. 静态变量(类变量):定义在类内,用static修饰,有且只有一份

  4. 常量:使用fianl修饰的变量,值一旦确定就不能被修改

8.方法
  1. 定义:方法是完成特定功能的,可复用的独立代码片段。也可以叫做函数。

  2. 语法:

[修饰符] 返回值类型 方法名称(参数列表){}
  1. 分类

    1. 参数

      1. 有参方法

      2. 无参方法

    2. 返回值

      1. 有返回值(返回值类型要和方法头中返回值类型保持一致)

      2. 无返回值(方法头中返回值类型用void代替)

    3. 修饰符

      1. 实例方法

      2. 静态方法(static修饰)

    4. 作用:

      1. 构造方法

      2. 实例方法

  2. 方法调用:

实例方法静态方法
对象.方法名(参数列表)类名.方法名(参数列表)
  1. 可变参数:本质是一个数组

  2. 作用域和生命周期:一个变量的作用域只被限制在当前变量所在的语句块中(也就包含该变量的,离该变量最近的大括号)。

成员变量局部变量
在类内任意位置都可以使用只能在所在的方法内部使用
9.构造方法

创建对象时运行的方法,方法名和类名相同,构造方法没有返回值,也不用void修饰,为实例变量给定默认值

  1. jvm默认提供一个无参构造方法

  2. 构造方法是在创建对象时由jvm调用

  3. 当提供构造方法以后,jvm不再提供默认构造方法。

10.this
  1. 访问当前对象成员变量和成员方法,this可省略

  2. 构造方法内区分成员变量和方法参数,this不可以省略

  3. 调用其他构造方法,调用其他构造方法是放在第一行,this不可省略

方法重载

  1. 方法名相同,参数列表不同

  2. 与返回值类型无关

  3. 与异常无关

  4. 与访问修饰符无关

11.继承
  1. 定义:在已存在类的基础上构造一个新类。继承已存在的类就是复用这些类的方法和field,在此基础上可以添加一些新的方法和域(field),以满足新的需求。其中被继承的类又叫父类,基类,或者超类,新构造的类称为子类,派生类,在java当中继承是单继承,即一个子类只能继承一个父类,但是每个类都会隐式继承Object,另外,构造方法不能被继承

  2. 语法

class A extends B{} 
  1. 方法重写(两同两小一大)

    1. 方法名相同

    2. 方法签名相同(参数类型和顺序相同)

    3. 返回值类型等于父类方法返回值或者其子类

    4. 抛出异常小于等于父类抛出异常

    5. 访问修饰符大于等于父类访问修饰符

  2. super

    1. 访问父类成员变量和成员方法,不可省略

    2. 访问父类构造方法,访问父类构造方法是通常放在第一行

  3. 构造方法执行顺序:先父类,再子类

  4. Object类

方法描述
getClass()获得当前对象的类对象
hashCode()返回当前对象的hashCode()
equals()判断两个对象是否相等
clone()克隆并返回当前对象副本
toString()打印该对象
notify()线程唤醒
notifyAll()线程唤醒
wait()线程等待
finalize()通知垃圾回收器回收,该方法不确实实际执行时间,不推荐使用
  1. 重写equals方法

    1. 自反性:对于任何非空引用a,a.equals(a),应该返回true

    2. 对称性:对于任何引用x和y,当且仅当x.equals(y)返回true,y.equals(x)也应该返回true

    3. 传递性:对于任何引用x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,x.equals(z)也应该返回true。

    4. 一致性:如果x和y引用的对象没有发生变化,反复调用x.equals(y)应该返回同样的结果

    5. 对于任意非空引用x,x.equals(null),应该返回false。

  2. 重写equals方法步骤

    1. 检测this是否与obj对象为同一引用对象

    2. 检测obj对象是否为null,如果为null则返回false

    3. 比较this和obj是否属于同一个类。

    4. 将obj转换为相应的类型变量

    5. 对所有需要比较的域进行比较,基本类型使用==,引用类型使用equals

  3. 重写hashCode

    1. equasl和hashCode必须一致,如果x.equals(y)返回true,那么x.hashCode()就必须和y.hashCode()具有相同的值

    2. 所有的成员变量都参与计算hashCode

  4. 重写toString()

12.封装
  1. 定义:将对象的信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过类提供的方法来实现对内部信息的操作和访问。

  2. 访问修饰符范围

修饰符范围
public公共的
protected同包,子类
default同包
private类内
修饰符/范围类内同包子类同包非子类非同包子类非同包非子类
public
protected×
default××
private××××
13.包
  1. java文件的组织和管理,以及控制访问权限

  2. 包命名:域名倒置,在操作系统内以文件夹的形式展现

  3. 包的导入 1. import 2. java.util.Scanner 3. 静态导入

    4. 常用包:java.util   java.lang java.sql  java.text,java.time
13.多态
  1. java引用变量有两个类型,一个是编译时类型,一个是运行时类型。编译时类型是由声明该变量时使用的类型决定,运行时类型由实际赋值给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现多态。

  2. 表现形式

    1. 父类引用指向子类对象

10.工具类
  1. Math

方法作用
Math.sqrt()求平方根
Math.pow(x,a)幂运算,x的a次方
Math.floorMod(x,y)求余,x%y
Math.sin()求正弦
Math.cos()求余弦
Math.tan()求正切
  1. LocalDate

方法作用
now()构造一个表示当前日期的对象
of(int year,int month,int day)构造一个给定日期对象
getYear()获取年份
getMonthValue()获取月份
getDayOfMonth()得到当前日期的年月日
getDayOfWeek()获取当前星期几
plusDays()获取当前日期之后的n天
minusDays()获取当前日期之前的n天
面试题:
1.请简述方法重写和方法重载的的区别

方法重写(override)

  1. 方法重写也叫方法覆盖,必须存在于继承关系中,子类方法必须和父类方法具有相同的方法名称和参数列表。

  2. 子类方法返回值可以是父类方法返回值子类

  3. 子类方法抛出异常小于父类方法抛出异常

  4. 子类不能重新父类private修饰的实例方法,因为private修饰的方法无法被子类继承

  5. 父类构造方法不能被子类重写

方法重载(overload)

  1. 同一个类中,具有两个或者两个以上的方法拥有相同的方法名称、但是具有不同的参数列表即为方法重载

  2. 方法重载与返回值无关,访问修饰符无关,参数名称无关,抛出异常无关

2.请简述super和this的用法

super

  1. super主要用于对父类成员的调用,包括成员变量,成员方法,构造方法,this主要用于对本类内成员的调用

  2. super在继承了父类的不同子类内构造函数中使用,this是在同一个子类中构造方法内使用。

  3. this调用的是本类的成员变量或者方法,如果本类中没有被调用的成员变量或者方法,则从父类中查找,super访问的是父类的成员变量或者方法

  4. this代表当前对象,super代表父类对象

相同点

  1. this和super在构造函数中使用都必须放在第一行,因此this和super在同一构造方法内不能同时出现

  2. this和super操作的都是实例成员,而不是静态成员

3.请简述面向对象特征
  1. 继承:在已存在类的基础上构造一个新类。继承已存在的类就是复用这些类的方法和field,在此基础上可以添加一些新的方法和域(field),以满足新的需求。其中被继承的类又叫父类,基类,或者超类,新构造的类称为子类,派生类,在java当中继承是单继承,即一个子类只能继承一个父类,但是每个类都会隐式继承Object,另外,构造方法不能被继承。

  2. 封装:将对象的信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过类提供的方法来实现对内部信息的操作和访问。封装一般通过访问修饰符实现。

    1. public:类内,同包子类,同包非子类,非同包子类,非同包非子类

    2. protected:类内,同包子类,同包非子类,非同包子类

    3. default:类内,同包子类,同包非子类

    4. private:类内

  3. 多态:java引用变量有两个类型,一个是编译时类型,一个是运行时类型。编译时类型是由声明该变量时使用的类型决定,运行时类型由实际赋值给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现多态。即相同对象调用相同方法展现的不同行为,此外,父类只能调用子类从父类继承或者重写的方法,父类不能调用子类新增的方法。

4.请简述类方法实例方法和构造方法的区别
  1. 构造方法负责对象初始化,为实例变量赋初始值,方法名和类名相同,没有返回值也不用void修饰,不能用static,final修饰不能被子类继承,但是可以被重载。

  2. 被static修饰的方法为类方法,也叫静态方法,通常只能被类方法调用,不推荐使用对象调用

  3. 实例方法一般由对象调用。

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值