三、javase中类、对象相关概念
2021/6/5 14:22:29
本文主要是介绍三、javase中类、对象相关概念,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java中的类和对象概念的介绍
一、类和对象
1.Java语言的特点
- 简单
a.与正常人类思维相一致
b.来源于生活,但高于生活 - 跨平台(可移植性)
- 多线程(技术手段)
- 完全面向对象
2.类和对象
-
类
对名词的一种抽象的概念,是模子 -
对象
是一类事物的具体实例 -
属性
用于描述数据的名词 -
方法
事物所具有的功能 -
类与对象的关系
互推关系 -
类图的格式
例如:
-
定义类的格式
[访问权限修饰符][修饰符]class 类名{
//成员属性格式
[访问权限修饰符][修饰符…]数据类型 属性名[=值];
//成员方法格式
[访问权限修饰符][修饰符…][返回值类型]方法名([参数列表…]){
方法体;
}
}
注意:
1.在类的格式中[]表示可以省略
2.其中的…表示可以有多个
3.访问权限修饰符:
①类的访问权限修饰符有两种
public、缺省
在一个代码编辑区,可以编写多个类(一般不建议使用),但是类名不能重复,且只能有一个类是被public修饰的,其中都是缺省不写的。
②类成员中的权限修饰符
4.修饰符(4个)
⑴static:静态的,能够修饰类成员和代码块
注意:
①在被static修饰的代码块或者成员方法中调用static修饰的类成员,>则该成员一定要改成static修饰。
例如:
public class TestDemo {
static int age;
static{
age = 100;
}
}
② 被static修饰的类成员可以直接通过类名.的方式调用
例如:
public class Test {
public static int age = 100;
}
public class TestDemo {
public static void main(String[] args) {
System.out.println(Test.age);
}
}
③static代码块优先于主函数加载
⑵final:最终的,能够修饰类和类成员
①特点:
修饰的类不能被继承
修饰的成员属性是常量:其中的常量名全部大写且一定要有初始值。
修饰成员方法:常用的方法是public final Class getClass();该方法是通过反射机制获取当前正在运行的类。使用该方法可以代替new来创建对象,更节省内存空间。
⑶abstract:抽象的,能够修饰类和成员方法
修饰的类不能实例化(即不能new)
修饰的方法没有方法体
⑷synchronized:同步
能够修饰成员方法和代块
3.类成员详解
- 成员属性
⑴分类:
成员变量(全局变量):
可以不赋初始值,成员变量对整个类起作用。
局部变量:
定义在方法中的变量,必须赋初始值,局部变量只对定义位置的区域(方法体)起作用。 - 成员方法
⑴分类:
自定义方法分类:
类方法:一定被static修饰
实体方法(普通方法)
抽象方法:被abstract修饰的方法
参数列表分类:
有参方法
无参方法
返回值类型分类:
有返回值类型:Java中任意数据类
无返回值类型:void
没有返回值:缺省(构造方法)
总结:
①实参和形参:
实参:方法被调用时传递的参数
形参:方法被定义时传递的参数,一定要表明参数类型
②方法不能被嵌套,在一个完整的方法体中,不能定义另一个方法,但是可以调用另一个方法。
⑵方法的特性:方法的重载(OverLoad)
①含义:
在同一个类中出现一次以上并且名字相同的方法。
②含义:
方法重载三要素:
方法名一致
返回值类型无关
参数列表不同(位置不同或者个数不同或者数据类型不同)
4.面向对象特征之一:封装
- 什么封装?
将不想对外公布的代码保护起来。 - 使用封装的好处:
⑴提高代码的安全性
⑵防止外部任意调用
⑶简化主函数的代码
⑷降低类与类之间的耦合度 - 封装的是类成员
⑴成员属性:全部私有化(private)
⑵成员方法:封装所有的功能代码 - 构造器
⑴格式:
public 类名([参数列表…]){}
⑵特点:
①没有返回值
②方法名与类名一致
⑶作用:
①给成员属性赋值
②创建(实例化)对象
注意:
⑴ this关键字:
①代表本类对象
②只能定义在方法中
⑵声明和实例化(创建)对象的格式:
①声明:
类名 对象名;
②创建(实例化):
类名 对象名 = 类名();
⑶如果一个类没有明确定义构造器,JVM会提供一个默认无参构造器,如果定义了,JVM则不会提供任何的构造器。
⑷this和super关键字的区别:
super:父类对象,定义在方法体中
this:本类对象,定义在方法体中
如果this和super同时出现,先写super。
5.面向对象特征之二:继承
- 含义:
将一类事物中的所有共性找到,并将这些共性重新封装到一个类中,而其他的类想要使用共性,必须先继承存放共性的类。 - 优点
提高代码的重用性。
简化子类代码 - 分类
父类:将所有共性封装的类
子类:只封装了特性的类 - 继承格式:
public class 子类 extends 父类{}
- 一定能继承什么?一定不能继承什么?选择继承什么?
⑴一定能继承父类中所有被public/protected所修饰的类成员
⑵一定不能继承父类的构造器和所有被private修饰的类成员
⑶如果是同包下,缺省修饰的类成员也可以继承
注意:
在使用继承的时候,子类可以直接调用父类中的所有被public/protected修饰的类成员,然而父类不能调用子类中特有的特性。
- 方法的重写
⑴概念
子类对父类已有方法进行功能上的增强
⑵使用重写的前提:
①一定是父子类
②一定是对已有方法进行重写
③一定是增强功能
⑶实现重写的五大要素
①方法名一致
②返回值一致或其子类
③参数列表一致
④访问权限不严于父类(子类>=父类)
⑤不能抛出更大的异常(当子类重写父类的方法时,可以抛出一样的异常,可以了抛出更小的异常,可以不抛出异常。但是不能抛出更大的异常,以及抛出跟父类同级但不一样的异常)
⑷OverLoad(重载)和Override(重写)的比较
6.面向对象特征之三:多态
- 多态的概念
多态本质上就是指同一种事物表现出来的多种形态。
饮料:可乐、雪碧、乐虎、果啤、…
宠物:狗、猫、鸟、小强、…
整数:int i = 10; short s = 10; byte b = 10; …
… … - 语法格式
父类类型 引用名 = new 子类类型();
如:
Person p = new Student();
p.show();
解析:
在编译阶段p是Person类型的,只能调用Person类中的show()方法。
在运行阶段p指向的是Student类型的对象,因此最终调用Student类中的show()方法。
- 多态的效果
(1)当父类的引用指向子类的对象时,父类的引用可以直接调用父类的方法。
(2)当父类的引用指向子类的对象时,父类的引用不可以直接调用子类的方法。
(3)当父类的引用指向子类的对象时,编译阶段调用父类的,运行阶段最终调用子类的版本。
注意:上述方式指 非静态的成员方法。
(4)当父类的引用指向子类的对象时,对于静态方法来说,最终调用父类的版本。
- 多态中引用数据类型之间的转换
(1)子类类型向父类类型之间的转换自动完成,因此是自动类型转换。
(2)父类类型向子类类型之间的转换需要进行强制类型转换,格式如下:
目标类型 目标类型的引用 = (目标类型)源类型的引用;
(3)引用类型之间的转换必须发生在父子类之间,否则编译报错,执行不到运行阶段。
(4)只要拥有父子类关系则进行强制类型转换时,编译阶段不会报错,当转换的目标类型并不是该引用真正指向的类型时,则运行阶段产生类型转换异常。
为了避免上述错误的发生,可以使用instanceof运算符进行判断,格式如下:
if(引用变量名 instanceof 引用类型){ 语句块; }
当引用变量名真正指向的对象是后面的引用类型时,则返回true,并执行语句块;
否则返回false
- instanceof运算符的介绍
作用
判断指定对象是否是指定类或其子类对象的运算符,结果是一个boolean
例:
Animal a1 = new Animal(“动物”,18);//父类
Dog d1 = new Dog(“柯基”,17,“花色”);//子类
Animal a2 = new Dog(“柯基”,17,“花色”);//使用引用,父类的引用指向子类的对象
①System.out.println(a1 instanceof Dog);//false
②System.out.println(a1 instanceof Animal);//true
③System.out.println(a2 instanceof Dog);//true
④System.out.println(a2 instanceof Animal);//true
⑤System.out.println(d1 instanceof Dog);//true
⑥System.out.println(d1 instanceof Animal);//true
- interface/implements/instanceof
interface:定义接口的关键字
implements:实现接口的关键字
instanceof:判断指定对象是否是指定类或其子类的运算符
7.对象在内存中的分析
- 一个引用对应一个对象的情况
点击查看视频祥解
- 两个引用指向同一个对象的情况
点击查看视频祥解
- 对象作为参数传递的情况
点击查看视频祥解
- 对象作为返回值的情况
点击查看视频祥解
8.成员变量和局部变量的区别
- 在类中的位置不同
成员变量:类中,方法外
局部变量:方法中或者方法声明上(形式参数) - 作用范围不一样
成员变量:类中
局部变量:方法中 - 初始化值的不同
成员变量:有默认值
局部变量:没有默认值。必须先定义,赋值,最后使用 - 在内存中的位置不同
成员变量:堆内存
局部变量:栈内存 - 生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
这篇关于三、javase中类、对象相关概念的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26大厂数据结构与算法教程:入门级详解
- 2024-12-26大厂算法与数据结构教程:新手入门指南
- 2024-12-26Python编程入门指南
- 2024-12-26数据结构高级教程:新手入门及初级提升指南
- 2024-12-26并查集入门教程:从零开始学会并查集
- 2024-12-26大厂数据结构与算法入门指南
- 2024-12-26大厂算法与数据结构入门教程
- 2024-12-26二叉树入门教程:轻松掌握基础概念与操作
- 2024-12-26初学者指南:轻松掌握链表
- 2024-12-26平衡树入门教程:轻松理解与应用