[Java]Java入门笔记(三):类、对象和方法
七、类、对象和方法
类和对象的关系
类定义了对象的本质;
类(class)是对象(object)的模板,而对象(object)是类的一个实例(instance)。
使多个对象的指向相同:
Student stu1 = new Student();
Student stu2 = stu1;
7.1 类
7.1.1 类的组成
变量:指对象的状态。
方法:指对象的功能单元。
消息:软件对象通过相互间传递消息来互相作用和通信;
- 一个消息由三部分组成:
- 接收消息的对象;
- 接收对象要采取的方法;
- 方法需要的参数。
- 一个消息由三部分组成:
注意:
类体中只能定义变量、常量和方法。
对于静态方法或变量,建议使用类名调用:Student.***;
7.1.2 类的三大特性
继承、封装、多态
7.1.3 类定义的语法规范
类的严格定义:
[类的修饰符] class 类的名称 [extends 父类名称][implements 接口名称列表]
{
变量定义及初始化;
方法定义及方法体;
}
类的修饰符:public, abstract, final.
public, abstract/final;
7.1.4 this 关键字
this指向自己的引用,即当前方法所在的对象。
- 主要作用:将自己这个对象当做参数,传给别的对象。
- 如果形参名和类属性名相同时,需要用到
this
。
7.1.5 构造器(构造方法)
构造器(构造方法)
创建类的对象(也可以初始化相关属性):
new 构造方法
显式定义类的构造器之后,系统不再提供默认的空参构造器。
this 调用构造器
① 在类的构造器中,显示的使用 this(形参列表)
的方式,调用指定的其他构造器。
② 构造器中不能通过 this(形参列表)
的方式调用自己。
③ 如果一个类中有 n 个构造器,则最多有 n-1 个构造器中使用了 this(形参列表)
。
④ 规定:this(形参列表)
必须在当前构造器的首行。
⑤ 构造器内部,最多只能声明一个 "this(形参列表)
" ,用来调用其他的构造器。
7.2 对象
7.2.1 匿名对象
没有显式赋给一个变量。
特征:匿名对象只能调用一次。
使用:
new phone
。如:
new Phone().playGame();
7.3 方法
7.3.1 方法定义的语法规范
方法的定义:
[方法修饰符] 返回类型 方法名称(参数1,参数2,...)[throws exceptionalList]
{
statement//方法体
}
方法修饰符:
[public/protected/private] [static] [final/abstract] [native] [synchronized]
有返回值的方法需要return语句,返回的值类型必须和方法类型相同。
静态方法不能访问非静态。
7.3.2 方法分类
按返回值分:
- 有返回值(return语句):需要后续使用。
- return语句可以不声明执行语句
return;
。
- return语句可以不声明执行语句
- 无返回值(void):主要用于设置。
- 有返回值(return语句):需要后续使用。
按参数分:
- 无参数
- 有参数(1个参数,多个参数)【实参与形参】
按功能分:
实例方法(实例成员方法)
类方法(静态方法)
构造方法(构造函数 / 构造器)
格式:
public 类名([参数]){...}
Java中的每个类都有构造方法,用来初始化该类的一个新的对象。
构造方法的名称和类名相同,并且不返回任何数据类型。
系统在创建对象时会自动执行。
构造方法应该包含的内容:
1)定义一些初值或内存配置工作;
2)一个类可以有多个构造方法(重载),根据参数的不同决定执行哪一个;
3)如果程序中没有定义构造方法,则创建实例时使用的是缺省构造方法,它是一个无内容的空实现的构造方法(
public 类名() {}
)。例(按功能分):
public class Test03Function {
//构造方法
public Test03Function() {
System.out.println("构造函数Test03Function()");
}
//静态方法
static void testStatic() {
System.out.println("静态方法");
}
//实例方法
void testFun() {
System.out.println("实例方法");
}
}
7.3.3 方法调用方式
静态方法:类名.方法名
静态访问非静态的内容:
创建对象 → 调用(对象名.需要调用的方法或变量)
创建对象:
类名 对象名 = new 类名();
例:
Scanner in = new Scanner(System.in);
7.3.4 方法重载
- 和返回值类型、形参的名称无关,只和参数列表有关。
7.3.5 [ jdk5.0 ] 可变个数形参
[ jdk5.0 之前 ]:数据类型[] 变量名
[ jdk5.0 ] 可变个数形参
采用可变个数形参来定义方法,传入多个相同类型的数据
格式:
数据类型 ... 变量名
。可以传入多个参数。
可变参数的方法与本类中的方法名相同,形参不同的方法之间构成重载。
与本类中的方法名相同,形参类型也相同的数组之间不构成重载,两者不能共存。
- 调用时可以用数组形式传递形参。
声明的位置在形参列表的末尾。
最多只能声明一个可变形参。
八、封装
封装性的体现
- 将类的属性私有化。
- 不对外暴露私有的方法。
- 单例模式。
权限修饰符
private
, 缺省(default)
, private
, protected
。
修饰符 | 类内部 | 同一个包 | 不同包的子类 | 同一个工程 |
---|---|---|---|---|
private |
√ | |||
缺省 |
√ | √ | ||
protected |
√ | √ | √ | |
public |
√ | √ | √ | √ |
- 对于
class
的修饰只能使用public
和缺省
。 - 可以用来修饰属性、方法、构造器、内部类(缺省、public)。
九、继承
关键字 extends
class A extends B{}
作用
子类可以继承父类的非私有内容。
继承性的优点
① 减少代码冗余,提高代码复用性。
② 便于功能的拓展。
③ 为多态性的使用,提供了前提。
9.1 格式
格式: class A extends B {}
① A:子类、派生类、subclass
。
② B:父类、超类、基类、superclass
。
③ 子类A 中获取了 父类B 中声明的结构:属性和方法。但是父类中,私有( private
)的属性和方法不能直接调用。
9.2 *注意
- 一个类可以被多个类继承。
- 单继承性:一个类只能有一个父类。
- 子父类是相对的概念。
- 子类直接继承的父类:直接父类;间接继承的父类:间接父类。
- 子类获取直接父类和所有简介父类中声明的属性和方法。
9.3 Object 类
Object
类
- 如果一个类没有显式声明父类,则此类继承于
java.lang.Object
类。 - 所有的 Java类(除了
java.lang.Object
类之外)都直接或间接继承于java.lang.Object
类。
9.4 方法的重写 (override / overwrite)
定义:在子类中根据需要对父类中继承的方法进行改造。(也称为重置、覆盖)。
在执行程序时,子类的方法将覆盖父类的方法。
应用:
重写以后,在执行程序时,子类的方法将覆盖父类的方法。
重写的规定:
方法的声明:
权限修饰符 返回值类型 方法名(形参列表) throws 异常的类型 {
// 方法体
子类中的是重写的方法,父类中的是被重写的方法。
子类重写的方法的 方法名和形参列表 相同。
子类重写的方法的 权限修饰符 不小于 父类被重写的方法。
- 子类中不能重写父类中
private
的方法。
- 子类中不能重写父类中
返回值类型:
父类被重写的方法的返回值 子类重写的方法的返回值 void
只能是 void
A
Object
A
类 或者A
类的子类String
基本数据类型
必须是相同的 基本数据类型
子类重写的方法抛出的异常类型 不大于 父类被重写方法抛出的异常类型。
子类和父类中的同名同参数的方法:
或者都声明为
非static
的(考虑重写), 或者都声明为
static
的(不是重写)。
9.5 super
关键字
super
可以理解为 "父类的" 。super
可以用来调用属性、方法、构造器。- 使用
- 可以在子类的方法或构造器中,使用
super.属性/方法
方式,显式调用父类中声明的属性或方法。但通常情况下省略super.
。 - 特殊情况:当子类和父类中定义了同名的属性时,必须通过显式调用
super.属性
来表示调用的是父类中的属性。 - 特殊情况2:当子类重写父类的方法以后,调用 父类被重写的方法 时,必须显示调用
super.方法
的方式调用被重写的方法。
- 可以在子类的方法或构造器中,使用
super
调用构造器- 显式使用
super(形参列表)
的方式调用 父类中声明的指定的构造器。 super(形参列表)
必须声明在子类构造器的首行。- 在类的构造器中,
this(形参列表)
和super(形参列表)
只能二选一,不能同时出现。 - 在构造器的首行,没有显式声明
this(形参列表)
和super(形参列表)
时,则默认调用的是super()
。 - 在类的多个构造器中,至少有一个类的构造器中使用了
super(形参列表)
调用父类中的构造器。
- 显式使用
[Java]Java入门笔记(三):类、对象和方法的更多相关文章
- Java SE学习笔记 --->高级类特性 ---> toString() 方法
概述: toString() 方法在面向对象当中十分常见,使用频率很高,和equals() 方法一样,也是Object类中定义的方法. jdk中 源码: java.lang.Object类中ToStr ...
- Java IO学习笔记三
Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...
- Java IO学习笔记三:MMAP与RandomAccessFile
作者:Grey 原文地址:Java IO学习笔记三:MMAP与RandomAccessFile 关于RandomAccessFile 相较于前面提到的BufferedReader/Writer和Fil ...
- JAVA之等号、传类对象参数与c++的区别
在JAVA中用等号对类对象进行赋值,实际上操作的是对象的地址. eg: package MyText; class ClassA { int value; public void seta(int v ...
- Java中Date和Calender类的使用方法
查看文章 Java中Date和Calender类的使用方法 2009-10-04 20:49 Date和Calendar是Java类库里提供对时间进行处理的类,由于日期在商业逻辑的应用中占据着 ...
- 《深入Java虚拟机学习笔记》- 第19章 方法的调用与返回
<深入Java虚拟机学习笔记>- 第19章 方法的调用与返回
- Python的高级特性8:你真的了解类,对象,实例,方法吗
Python的高级特性1-7系列是本人从Python2过渡3时写下的一些个人见解(不敢说一定对),接下来的系列主要会以类级为主. 类,对象,实例,方法是几个面向对象的几个基本概念,其实我觉得很多人并不 ...
- Java入门笔记 03-面向对象(下)
介绍:除了前面介绍的关于类.对象的基本语法之外,下面继续介绍Java面向对象的特性. 一. 包装类: 从JDK 1.5以后,Java就提供了自动装箱和自动拆箱操作,即: 自动装箱:将一个基本类型的变量 ...
- Java入门笔记 03-面向对象(上)
介绍:Java是面向对象的程序设计语言,类是面向对象的重要内容,可以把类当成是一种自定义类型,可以使用类来定义变量,这种类型的变量统称为引用变量.也就是说,所有类都是引用类型.Java也支持面向对象的 ...
- java虚拟机入门(三)- 你了解对象吗
对象对于java程序员来说,那是想要多少就有多少,所以那些嘲笑程序员的单身狗,哼,只有无知使你们快乐,想我大java开发,何曾缺少过对象.我们不仅仅知道创建对象,还知道创建对象的过程是啥样的,不信?往 ...
随机推荐
- 数组内sizeof与strlen的区别
1.数组在内存中是连续存放的,地址呈4个字节递增 2.数组的定义需要初始化,否则输出会已随机值输出 3.strlen()和sizeof()之间无关联:strlen():是求字符串长度的----只能针对 ...
- python pip无法安装到2.7
问题 pip默认指向python3.6,没有pip2,pip2.7 解决办法 加上应用路径 加上系统环境变量 参考 https://www.cnblogs.com/fanyuchen/p/712768 ...
- blender建模常用建模快捷键
编辑物体 M2选取 M2+SHIFT选取多个 A全选 B+M1矩阵选择 C+M1笔刷选择 CTRL+M1套索选择 CTRL+SHIFT+M1取消套索选择 ALT+M2选择边循环,面 CTRL+ALT+ ...
- gorm链接mysql的初始化配置和连接池的使用
1. mysql的初始化配置 dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?%s", user, passwd, host, port, db, ...
- JavaScript设计原则与编程技巧
1 设计原则概述 <UNIX/LINUX设计哲学>设计准则 ① 小既是美. ② 每个程序只做一件事情. ③ 快速建立原型. ④ 舍弃高效率而取可移植性. ⑤ 避免强制性的图形化界面交互. ...
- Java安全之C3P0链利用与分析
Java安全之C3P0链利用与分析 0x00 前言 在一些比较极端情况下,C3P0链的使用还是挺频繁的. 0x01 利用方式 利用方式 在C3P0中有三种利用方式 http base JNDI HEX ...
- 如何在 Qt Creator 中应用 one dark pro 主题
前言 Qt Creator 自带了几款主题,但是并不好看.在博客 <Qt Creator打造VScode one dark pro主题配色> 中给出了 one dark pro 主题的配置 ...
- 「BalkanOI 2018 Day1」Minmaxtree
「BalkanOI 2018 Day1」Minmaxtree 每个点都有一个最大和最小权值的限制. 然后每一个权值的限制都必须要取到. 每个点显然可以直接让他取到最大或最小权值. 可以想到每个点匹配一 ...
- 理解java线程的中断(interrupt)
一个线程在未正常结束之前, 被强制终止是很危险的事情. 因为它可能带来完全预料不到的严重后果比如会带着自己所持有的锁而永远的休眠,迟迟不归还锁等. 所以你看到Thread.suspend, Threa ...
- 学习JSP篇:jsp简单介绍
这几天开始学习JSP和Servlet,写些博客,记录自己的学习过程,算是自己从业开始的一个见证. 一.什么是JSP JSP的全称是Java Service Page,一种动态的网页开发技术,区别于静态 ...