面向对象基础

news2024/11/26 8:53:39

目录

1. 类和对象

1.1 什么是对象

1.2 什么是面向对象

1.3 什么是类

1.4 什么是对象的属性

1.5 什么是对象的行为

1.6 类和对象的关系

 1.7 类的定义

1.8 对象的使用

 2. 成员变量和局部变量

2.1 什么是成员变量和局部变量

2.2 成员变量和局部变量的区别

3. 封装

3.1 private关键字

3.2 this关键字

3.3 封装

4. 构造方法

4.1 概述

4.2 注意事项

4.3 标准类制作


1. 类和对象

1.1 什么是对象

客观存在的事物都可以成为对象

1.2 什么是面向对象

面向对象(Object-Oriented Programming,简称 OOP)是一种软件开发的编程范例,它的核心概念是:万物皆对象,程序设计应该围绕对象展开。在面向对象编程中,一个“对象”是指一个特定的实体或数据结构,它封装了数据及对这些数据的操作方法。每个对象都有一个“类型”,它描述了对象的属性和方法。

1.3 什么是类

类是对现实生活中一类具有共同属性和行为的事物的抽象

类的特点:类是对象的数据类型;类是具有相同属性和行为的一组对象集合。

1.4 什么是对象的属性

属性:对象具有的各种特征,每个对象的每个属性都拥有特定的值。

1.5 什么是对象的行为

行为:对象能执行的操作,就是对象能够干什么。

1.6 类和对象的关系

类:类是对现实生活中一类具有相同属性和行为的事物的抽象

对象:是能够看得见摸得着的真实存在的实体

类是对象的抽象,对象是类的实体

 1.7 类的定义

类是java程序的基本组成单位。

类是对现实生活中一类具有共同属性和行为的事物的抽象,用来确定对象将会拥有的属性和行为。

对象有什么可以用属性来表示,可以干什么用行为来表示。

类的组成:属性+行为。

  • 属性:在类中通过成员变量来体现(类中方法外的变量)
  • 行为:在类中通过成员方法类体现(去掉关键字static)

类定义的步骤:

/*
 * 1.定义类
 * 2.编写类的成员变量
 * 3.编写类的成员方法
 */
public class 类名{
	//成员变量
	变量1 的数据类型 变量1;
	变量2 的数据类型 变量2;
	...
	
	//成员方法(无static)
	方法1;
	方法2;
	...
}

1.8 对象的使用

先创建对象,在使用对象。

创建对象:

格式:类名 对象名 = new 类名();

例如:Dog d = new Dog();

使用对象:

1.使用成员变量

  • 格式:对象名.变量名
  • 例如:d.a

2.使用成员方法

  • 格式:对象名.方法名()
  • 例如:d.eat()

案例:创建一个Dog类

public class Dog {
	String name;
	int age;

	public void eat() {
		System.out.println("吃");
	}
}
public class DemoDog {
	public static void main(String[] args) {
		// 创建对象
		Dog d = new Dog();
		// 使用成员变量
		System.out.println(d.name);
		System.out.println(d.age);
		d.name = "来福";
		d.age = 5;
		System.out.println(d.name);
		System.out.println(d.age);
		// 使用成员方法
		d.eat();
	}

}

结果:

 2. 成员变量和局部变量

2.1 什么是成员变量和局部变量

成员变量:类中方法外的变量

 局部变量:方法中的变量

 

2.2 成员变量和局部变量的区别

区别成员变量局部变量
类中位置不同类中方法外方法内或者方法声明上
内存中位置不同堆内存栈内存
生命周期不同随着对象的存在而存在,随着对象的消失而消失随看方法的调用而存在,随看方法的调用完毕而消失
初始化值不同有默认的初始化值没有默认的初始化值,必须先定义,赋值,才能使用

3. 封装

封装是面向对象的核心思想,是面向对象的三大特征之一,是指将对象的属性和行为封装起来。不让外界知道具体实现细节。

3.1 private关键字

  • 是一个权限修饰符
  • 可以修饰成员(成员变量和成员方法)
  • 作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问

针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作

  • 提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰
  • 提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰

例如:定义一个类

public class Dog {
	String name;
	// int age;
	private int age;

	// get/set方法
	public void setAge(int a) {
		// age = 11;
		if (a < 0 || a > 120) {
			System.out.println("年龄有误");
		} else {
			age = a;
		}

	}

	public int getAge() {
		return age;
	}

	public void eat() {
		System.out.println(name + age);
	}
}

测试:

public class DemoDog {
	public static void main(String[] args) {
		// 创建对象
		Dog d = new Dog();
		// 使用成员变量
		d.name = "张三";
		// d.age=18
		d.setAge(18);
		// 使用成员方法
		d.eat();
	}

}

例二:创建一个Student类


/*
 *把成员变量用private修饰
 *提供对应的get/set方法
 */
public class Student {
	// 成员变量
	private String name;
	private int age;

	// get/set方法
	public void setName(String n) {
		name = n;
	}

	public String getName() {
		return name;
	}

	public void setAge(int a) {
		age = a;
	}

	public int getAge() {
		return age;
	}

	public void show() {
		System.out.println(name + age);
	}
}

测试:

public class DemoStudent {
	public static void main(String[] args) {
		// 创建对象
		Student s = new Student();
		// 使用set方法给成员变量赋值
		s.setName("张三");
		s.setAge(18);

		s.show();

		System.out.println(s.getName() + s.getAge());

	}

}

3.2 this关键字

  1. this修饰的变量用于指代成员变量
    1. 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
    2. 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量
  2. 什么时候用this关键字?
    1. 解决局部变量隐藏成员变量
  3. this:代表所在类的对象引用
    1. 方法被那个对象调用,this就代表那个对象

例如:定义一个Student类


/*
 *把成员变量用private修饰
 *提供对应的get/set方法
 */
public class Student {
	// 成员变量
	private String name;
	private int age;

	// get/set方法
	// public void setName(String n) {
	// name = n;
	// }
	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	// public void setAge(int a) {
	// age = a;
	// }
	public void setAge(int age) {
		this.age = age;
	}

	public int getAge() {
		return age;
	}

	public void show() {
		System.out.println(name + age);
	}
}

测试:

public class DemoStudent {
	public static void main(String[] args) {
		// 创建对象
		Student s = new Student();
		// 使用set方法给成员变量赋值
		s.setName("张三");
		s.setAge(18);

		s.show();

		System.out.println(s.getName() + s.getAge());

	}

}

3.3 封装

1.概述:

是面向对象三大特征之一 (封装,继承,多态)。

是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的。
2.封则
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问成员变量private,提供对应的get/set方法

3.好处

通过方法来控制成员变量的操作,提高了代码的安全性

把代码用方法进行封装,提高了代码的复用性

4. 构造方法

4.1 概述

构造方法是一种特俗的方法

作用:创建对象

功能:完成对象数据的初始化

格式:
public class 类名{
    修饰符 类名(参数){
    }
}

例如:定义一个Student类

public class Student {
	private String name;
	private int age;

	// 构造方法
	public Student() {
		System.out.println("无参构造");
	}

	public void show() {
		System.out.println(name + age);
	}

}

测试:


public class DemoStudent {
	public static void main(String[] args) {
		// 创建对象
		Student s = new Student();
		s.show();
		// 无参构造
		// null0
		
	}

}

4.2 注意事项

1. 构造方法的创建
如果没有定义构造方法,系统将给出一个默认的无参数构造方法

如果定义了构造方法,系统将不再提供默认的构造方法

2. 构造方法的重载
如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法
3. 推荐的使用方式
无论是否使用,都手工书写无参数构造方法

例如:定义一个Student类


public class Student {
	private String name;
	private int age;

	// 构造方法
	// public Student() {
	// System.out.println("无参构造");
	// }
	// 当一个类中没有给任何构造方法,系统会给一个默认的无参构造方法
	public Student() {
	}

	public Student(String name) {
		this.name = name;
	}

	public Student(int age) {
		this.age = age;
	}

	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public void show() {
		System.out.println(name + age);
	}

}

测试:


public class DemoStudent {

	public static void main(String[] args) {
		// 创建对象
		Student s = new Student();
		s.show();// null0

		Student s2 = new Student("张三");
		s2.show();// 张三0

		Student s3 = new Student(30);
		s3.show();// null30

		Student s4 = new Student("张三", 30);
		s4.show();// 张三30

	}
}

4.3 标准类制作

1. 成员变量:使用private修饰
2. 构造方法:
提供一个无参构造方法
提供一个带多个参数的构造方法
3. 成员方法
提供每一个成员变量对应的set()/get()

提供一个显示对象信息的show()
4. 创建对象并为其成员变量赋值的两种方式

无参构造方法创建对象后使用set()赋值

使用带参构造方法直接创建带有属性值的对象

例如:定义一个Student类


public class Student {
	// 成员变量
	private String name;
	private int age;

	// 无参构造
	public Student() {
	}

	// 带多个参数的构造方法
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}

	// 成员方法
	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getAge() {
		return age;
	}

	public void show() {
		System.out.println(name + "," + age);
	}
}

测试:


public class DemoStudent {
	public static void main(String[] args) {
		// 无参构造方法创建对象后使用set()赋值
		Student s1 = new Student();
		s1.setName("张三");
		s1.setAge(18);
		s1.show();// 张三,18

		// 使用多个参数构造方法
		Student s2 = new Student("张三", 18);
		s2.show();//张三,18
	}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/764724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试基础篇(测试系列3)

目录 前言&#xff1a; 1.软件测试的生命周期 2.如何描述一个BUG 3.如何定义BUG的级别 4.BUG的生命周期 5.如何开始第一次测试 6.测试执行和BUG管理 结束语&#xff1a; 前言&#xff1a; 在两节中小编与大家简单的讲解了一些有关于软件测试的基础知识&#xff0c;带着…

Ubuntu开机自启动设置

一、创建执行脚本 这里有两个程序所以编写了两个脚本&#xff0c;第一脚本(master.sh)&#xff1a; gnome-terminal -- bash -c "source /home/zyy/anaconda3/bin/activate wood2;cd /home/zyy/pycharmProject/master_program;python main.py > /home/zyy/pycharmProj…

MYSQL常见面试题汇总

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 1、三大范式 2、DML 语句和 DDL 语句区别 3、主键和外键的区别 4、drop、delete、truncate 区别 5、基础架构 6、MyISAM 和 InnoDB 有什么区别&#xff1f; 7、推荐自增id作…

HCIP第十天

题目 拓扑图 配置IP地址和环回 启动OSPF&#xff0c;使得AS2内部互相学习到路由 BGP建立对等体关系&#xff0c;R1和R2为EBGP对等体&#xff0c;R234为AS64512的联邦&#xff0c;R567为AS64513的联邦&#xff0c;R7和R8为EBGP对等体&#xff0c;R2-R5和R4-R7为不同联邦的EBGP对…

UML类图的使用

相关概念 1. uml例图使用场景: 类图 类图的使用 1. 在UML类图中表示具体类 具体类在类图中用矩形框表示&#xff0c;矩形框分为三层&#xff1a;第一层是类名字。第二层是类的成员变量&#xff1b;第三层是类的方法。成员变量以及方法前的访问修饰符用符号来表示&#xff1…

文档加密软件有哪些(好用的文档加密软件排名)

在现代社会中&#xff0c;随着信息技术的快速发展&#xff0c;文档的保密性变得越来越重要。为了保护敏感信息不被未经授权的人访问&#xff0c;使用文档加密软件是一种常见的做法。本文将介绍文档加密软件的重要性&#xff0c;并列举一些常见的文档加密软件供读者参考。 文档加…

Git及Tortoisegit使用教程,设置中文

一、到git官网下载GIT 官网 二、下载安装Tortoisegit及中文语言包,Tortoisegit及语言包 语言包下载地址 三、在电脑某个盘的文件里右键 提示未设置git.exe 路径不能继续, 于是去下载git GIT下载 安装Git时, 一直点击 Next > 不要停, 直到结束 此时再跳到TortoiseGit…

[QT编程系列-21]:基本框架 - QT常见数据结构:QString、QList、QVector、QMap、QHash、QSet、QPair详解

目录 1 QString 2 QList 3 QVector 4 QMap 5 QHash 6 QSet 7 QPair 1 QString QString是Qt中用于存储和操作字符串的类。它提供了丰富的字符串处理方法和功能。 以下是QString的一些主要特点和常用操作&#xff1a; 创建QString对象&#xff1a; QString str "H…

远程在Ubuntu20.04安装nvidia显卡驱动

第零步&#xff0c;找人装一个todesk。 在终端运行&#xff1a; ifconfig 记住ip地址&#xff0c;后面要用。 第一步&#xff0c;安装软件&#xff1a; sudo apt-get update sudo apt-get install g gcc make 第二步&#xff0c;下载显卡驱动&#xff1a; 官方驱动 | NVI…

mac批量提取图片文件名到excel?

mac批量提取图片文件名到excel&#xff1f;最近有个小伙伴向我求助一个电脑操作上的问题&#xff0c;问我在Mac电脑上用什么方法可以快速批量的将大量图片的名称一次性提取出来&#xff0c;并且保存到excel表格里。记得小编曾经给大家分享过windows电脑上批量提取文件名称的方法…

关键点检测SIFT算法笔记

SIFT算法 SIFT&#xff08;Scale Invariant Feature Transform&#xff09;&#xff0c;尺度不变特征变换。具有旋转不变性、尺度不变性、亮度变化保持不变性&#xff0c;是一种非常稳定的局部特征。在目标检测和特征提取方向占据着重要的地位。 SIFT算法所查找到的关键点是一些…

LabVIEW实现基于DCT的野生动物监测无线图像传输

LabVIEW实现基于DCT的野生动物监测无线图像传输 针对野生动物物种数量不断下降的情况&#xff0c;需改进以增强当前野生动物监测系统的能力。目前的系统要求工人进入森林以收集存储在存储卡中的图像数据。这项任务风险很大&#xff0c;而且耗费大量时间。系统也无法提供实时报…

APP加固:助力移动应用安全合规

近日&#xff0c;工业和信息化部发布了2023年第2批侵害用户权益行为的App&#xff08;SDK&#xff09;名单&#xff0c;55款App因涉及强制、频繁、过度索取权限等问题而被通报。这一举措进一步凸显了合规对于APP发展的重要性。 根据工业和信息化部的通报&#xff0c;被通报的这…

redolog 、undolog 和binlog

redolog(可以恢复数据&#xff0c;保证数据不丢失) 、undolog(事务回滚) 和binlog&#xff08;主从同步数据&#xff09; 脏页 在mysql中&#xff0c;当内存数据页和磁盘数据页上的内容不一致时&#xff0c;则称这个内存页为脏页 脏页什么时候会刷入磁盘&#xff1f; ● redo…

MySQL-DQL-小结

基本查询 条件查询 分组查询 排序查询 分页查询

TX Barcode .NET for WPF Crack

TX Barcode .NET for WPF Crack 用于WPF软件的TX Barcode.NET包括一天完成的功能以及用于WPF的软件的2D条形码控制。 用于WPF的TX Barcode.NET的功能和属性&#xff1a; 它具有以下特性和属性&#xff0c;如&#xff1a; 常见的文字处理功能&#xff1a;它可以为用户和开发人员…

网络安全问题严重?Web3和IP代理能否提供解决方案?

在数字世界中&#xff0c;网络安全问题越来越严重。黑客和网络犯罪分子利用各种手段来窃取个人信息、盗取数字资产或破坏网络服务。为了应对这些威胁&#xff0c;Web3和IP代理成为了有力的工具&#xff0c;可以帮助改善网络安全性&#xff0c;提高网络防御水平。 首先&#xff…

Java 9 - JShell

JShell 的主要特点包括&#xff1a; 交互式输入&#xff1a;可以直接在 JShell 中逐行输入 Java 代码&#xff0c;无需编写完整的类或方法结构。即时执行&#xff1a;JShell 会即时执行输入的代码&#xff0c;并返回结果&#xff0c;让我们能够立即查看输出或执行效果。自动补…

Vue Router相关理解

vue-router是vue的一个插件库&#xff0c;专门用来实现SPA应用 SPA应用的理解 单页Web应用&#xff08;single page web application,SPA&#xff09; 整个应用只有一个完整的页面 点击页面中的导航链接不会刷新页面&#xff0c;只会做页面的局部刷新 数据需要通过ajax请求…

QT中QTimer的循环时间小于槽函数执行时间时的状况分析

目录 QTimer运行程序在控制台中实现&#xff1a; 当循环间隔时间大于槽函数时间时&#xff1a; 当存在两个定时器器&#xff0c;其中一个还是间隔100ms&#xff0c;另一个间隔1000ms&#xff1a; 当两个定时器的循环周期大于槽函数执行时间时 QTimer运行程序在控制台中实…