【JAVA基础(对象和封装以及构造方法)】----第四天

对象和封装以及构造方法

  • 面向对象和面向过程
    • 面向过程
    • 面向对象
  • 类与对象及其使用
    • 定义类
    • 创建一个对象,操作类
      • 补充(成员变量和局部变量)
    • private 修饰类
  • 封装
  • 练习
    • 编写类
    • 编写测试
    • 输出结果

面向对象和面向过程

面向过程

在了解面向对象之前先来了解一下面向过程
面向过程:对于整个数据的操作都是基于步骤一步一步的进行实现的

// 面向过程的编程// 功能: 1、打印数组中的所有数据//       2、对数组中的数据进行逆序//       3、求数组中的最大值//       3、求数组中的最小值// 1、打印数组中的所有数据public static void printArr(int[] intArr) {for (int i = 0; i < intArr.length; i++) {if (i != 0 && i != intArr.length - 1) {System.out.print(" , " + intArr[i]);} else {if (i == 0) {System.out.print("[" + intArr[i]);} else {System.out.print(" ," + intArr[i] + "]");}}}}// 2、对数组中的数据进行逆序public static void reverseArr(int[] intArr){for (int i = 0; i < intArr.length / 2; i++) {int tmp = intArr[i];intArr[i] = intArr[intArr.length - 1 - i];intArr[intArr.length - 1 - i] = tmp;}}// 3、求数组中的最大值最小值public static int[] getMaxMin(int[] intArr) {int max = intArr[0];int min = intArr[0];for (int elem : intArr) {if (elem > max) {max = elem;}if (elem < min) {min = elem;}}// 将最大值和最小值包装成一个数组int res[] = new int[]{max, min};return res;}

面向对象

面向对象的编程:
就是不断的创建对象,使用对象,指挥对象做事
面向对象特征:
封装(encapsulation)
继承(inheritance)
多态(polymorphism)

类和对象的关系:class 修饰的为类通过class new出来的 称为对象描述一个类 需要从两个角度:属性:方法(功能):人类 -> 对象 -> 个体一般情况下 类是一个抽象  对象是一个具体
大象装进冰箱:面向过程:1.开冰箱2.把大象塞进冰箱3.关门面向对象:1.需要有冰箱的对象方法:开门关门2.需要有大象的对象方法:跳进冰箱3.操作对象伪代码:class IceBox{open();close();}class Elephant{jumpIceBox();}class Operator{main{iceBox = new IceBox()elephant = new Elephant()iceBox.open()elephant.jumpIceBox()iceBox.close()}}

类与对象及其使用

定义类

public class Person{成员变量类中的属性称为成员变量,该变量定义时 格式为:数据类型 变量名;注意:① 在类中定义的成员变量并不需要有初始值② 对于成员变量来说,其作用域是在整个类中有效String name;int age;double weight;定义成员的方法public 返回值类型(void) 成员方法名(参数列表){代码体return 返回数据}该方式定义的方法,只能通过对象进行调用,而不能在当前类中使用 main 方法进行调用//定义一个成员方法public void sayHello(){System.out.println("您好!我叫"+name+"今年"+age+"岁");}}

类实例

public class Student {/*成员变量:姓名 年龄 班级*/String name;int age;String clazz;String skill;/*成员方法*/public void study(){System.out.println("当前具有一些技能:"+skill);}public void eat(){System.out.println("爱吃XXX");}

创建一个对象,操作类

Person person = new Person();
创建对象的过程就相当于创建了一个人的实例
对于一个人需要给定其具体的姓名
//调用对象
person.sayHello();
System.out.println(person.name); // null 对于name来说其类型为String并且该类型为引用类型 引用类型的初始值为null
System.out.println(person.age); // 0  对于age来说其类型为int 并且该类型为基本数据类型  其初始值为0
System.out.println(person.weight);
// 给对象中的属性值进行赋值
person.name = "xx";
person.age = 18;
person.weight = 150;

补充(成员变量和局部变量)

成员变量和局部变量的区别:
成员变量:定义在类中,并且是在方法和成员方法外的
局部变量:定义在方法或成员方法内内存中的位置不同
成员变量:变量存储位置是在堆空间中
局部变量:变量存储位置是在栈空间中生命周期不同:
成员变量:在对象消亡时消失
局部变量:在方法使用完成后消失初始化值不同:
成员变量:有默认值
局部变量:定义时需要对其进行赋值操作(要看其调用)基本类型作为形式参数 : 基本类型会将具体的值赋予给方法的形参变量
引用类型作为形式参数 : 引用类型会将内存地址赋予给对应方法的形参变量 可以根据内存地址操作具体的数据引用类型数据基本存放在堆空间中

private 修饰类

对于private修饰的属性则只有在当前类中的其他方法才能访问,对于其他类创建的对象不能直接使用此方法,需要用get和set方法进行使用

public class StudentPri {/*对于name和age不能随意更改clazz 可以进行更改private修饰的成员属性,它的有效范围是在当前的类中*/private String name;private int age;String clazz;public void setName(){name = "xxxx";}public void setAge(){age = 20;}public void addAge(){age += 1;if (age % 12 == 0){System.out.println("今年是本命年,需要穿红裤衩...");}}public String getName(){return name;}public int getAge(){return age;}/*对于private修饰了成员方法,可以在当前类中的其他成员方法中进行调用 以此进行做逻辑判断 控制方法的调用*/public void privacy(String re){// 关系好 可以表达if (re.equals("好")){skill();}else {System.out.println("大数据好难,我不爱学...");}}private void skill(){System.out.println("我爱学习大数据..");}

此时创建的对象,不能在使用studentPi.name 或 studentPi.age 进行随意修改类中的属性值,只能调用类中的成员方法进行查看和修改,这就是涉及到了下一步的封装。

封装

封装:
封装概述:
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:
隐藏实现细节,提供公共的访问方式,对于有些属性不能由创建者随意更改提高了代码的复用性提高安全性

完整的类构造方法:

public class StuConstruct {// 私有属性,只能在此类下的成员方法中使用// 并且使用时要用 this.属性名 的格式private String name;private int age;private String clazz;// 提供的get 和 set 成员方法进行查看和修改属性值public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getClazz() {return clazz;}public void setClazz(String clazz) {this.clazz = clazz;}// 一般情况下 如果有有参构造,那么会再手动添加无参构造public StuConstruct(){// 无参构造的意义是可以使用set方法进行传入参数值}// 重载构造方法 (有参构造)// 有参构造的意义就是在创建对象时便可以传入参数接着就对      对象进行调用public StuConstruct(String name,int age,String clazz){this.name = name; // 使用this获取当前类中的成员变量this.age = age; // 使用this获取当前类中的成员变量this.clazz = clazz; // 使用this获取当前类中的成员变量}// 成员方法 进行展示属性值的public void show(){System.out.println("name:"+this.name+" age:"+this.age+" clazz:"+this.clazz);}}

无参构造和有参构造应当在一个类中同时定义:目的就是可以在创建一个对象时可以有两种给属性赋值的模式

  1. 使用set 和 get 方法来进行(无参构造提供)
  2. 直接在创建对象的时候进行赋值(有参构造提供)
  3. 无参构造和有参构造的方法名都要与类名保持一致

练习

1.使用面向对象的思想,编写自定义描述狗的信息。设定属性包括:品种,年龄,心  情,名字;方法包括:叫,跑。
要求:
1)设置属性的私有访问权限,通过公有的 get,set 方法实现对属性的访问
2)限定心情只能有“心情好”和“心情不好”两种情况,如果无效输入进行提示,  默认设置“心情好”。
3)设置构造函数实现对属性赋值
4)叫和跑的方法,需要根据心情好坏,描述不同的行为方式。
编写测试类,测试狗类的对象及相关方法(测试数据信息自定义)  

编写类

package com.fuhai.day04;import java.util.Scanner;public class Dog {// 属性私有,只能使用公有的get和set方法进行访问和修改private String variety;private int age;private String feeling = "心情好";private String dogName;// get 和 set 方法  // 可以使用快捷键 alt + fn + insert 快速设置public String getVariety() {return variety;}public void setVariety(String variety) {this.variety = variety;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getFeeling() {return feeling;}// set心情,对心情的输入进行判断,如果不满足条件则让再次输入,直到输入的结果满足条件,在进行之后的对象调用public void setFeeling(String feeling) {if ((feeling.equals("心情好") | feeling.equals("心情不好"))) {this.feeling = feeling;} else {System.out.println("心情只有'心情好'和'心情不好'请重新输入" + this.dogName + "的心情:");Scanner scanner = new Scanner(System.in);String fell = scanner.next();setFeeling(fell);}}public String getDogName() {return dogName;}public void setDogName(String dogName) {this.dogName = dogName;}// 无参构造public Dog(){}// 有参构造public Dog(String name,String variety,int age,String feeling) {this.dogName = name;this.variety = variety;this.age = age;if (feeling.equals("心情好") | feeling.equals("心情不好")) {this.feeling = feeling;} else {System.out.println("心情只有'心情好'和'心情不好'请重新输入" + this.dogName + "的心情:");Scanner scanner = new Scanner(System.in);String fell = scanner.next();setFeeling(fell);}}// 跑的成员方法public void run(){if (this.feeling.equals("心情不好")){System.out.println(this.dogName+"的心情不好,不想跑!");}else {System.out.println(this.dogName+"的心情好,跑起来了!");}}// 叫的成员方法public void woff(){if (this.feeling.equals("心情不好")){System.out.println(this.dogName+"的心情不好,不想叫!");}else {System.out.println(this.dogName+"的心情好,叫起来了!");}}}

编写测试

// 使用有参构造
Dog dog1 = new Dog("dog1", "土狗", 4, "心情不好");
dog1.run();
dog1.woff();
Dog dog2 = new Dog("dog2", "金毛", 3, "心情好");
dog2.run();
dog2.woff();
Dog dog3 = new Dog("dog3", "哈士奇", 2, "心情非常好");
dog3.run();
dog3.woff();// 使用无参构造
Dog dog4 = new Dog();
dog4.setDogName("dog4");
dog4.setAge(3);
dog4.setVariety("萨摩耶");
dog4.setFeeling("心情好");
dog4.run();
dog4.woff();Dog dog5 = new Dog();
dog5.setDogName("dog5");
dog5.setAge(3);
dog5.setVariety("柴犬");
dog5.setFeeling("心情不好");
dog5.run();
dog5.woff();Dog dog6 = new Dog();
dog6.setDogName("dog6");
dog6.setAge(3);
dog6.setVariety("犬");
dog6.setFeeling("好");
dog6.run();
dog6.woff();
// 进行默认值的检测
Dog dog7 = new Dog();
dog7.setDogName("dog7");
dog7.setAge(3);
dog7.setVariety("狗");
dog7.run();
dog7.woff();

输出结果

在这里插入图片描述

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

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

相关文章

用户行为分析遇到的问题-ubantu16,hadoop3.1.3【更新中】

用户行为分析传送门 我的版本 ubantu16 hadoop 3.1.3 habse 2.2.2 hive3.1.3 zookeeper3.8.3 sqoop 1.46/1.47 我sqoop把MySQL数据往hbase导数据时候有问题 重磅&#xff1a;大数据课程实验案例&#xff1a;网站用户行为分析&#xff08;免费共享&#xff09; 用户行为分析-小…

VR党建:VR全景技术如何助力党建知识传播

导语&#xff1a; 随着科技的不断发展&#xff0c;虚拟现实技术逐渐深入人们生活的方方面面。VR全景技术作为一种全新的沉浸式体验方式&#xff0c;被广泛应用于娱乐、教育、医疗等领域。而在党建学习中&#xff0c;VR全景技术也展现出了巨大的潜力&#xff0c;成为了一种创新…

「数据结构」二叉树1

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;C启航 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 文章目录 &#x1f349;树&#x1f349;二叉树&#x1f34c;特殊二叉树&#x1f34c;二叉树的性质&#x1f34c;存储结构 &#x1f349;…

ffmpeg入门之Windows开发之二(视频转码)

添加ffmpeg windows编译安装及入门指南-CSDN博客 的头文件和依赖库如下&#xff1a; main 函数如下&#xff1a; extern "C" { #ifdef __cplusplus #define __STDC_CONSTANT_MACROS #endif } extern "C" { #include <libavutil/timestamp.h> #in…

OpenCV-8RGB和BGR颜色空间

一. RGB和BGR 最常见的色彩空间就是RGB&#xff0c;人眼也是基于RGB的色彩空间去分辨颜色。 OpenCV默认使用的是BGR. BGR和RGB色彩空间的区别在于图片在色彩通道上的排列顺序不同。 二.HSV, HSL和YUV 1.HSV(HSB) OpenCV用的最多的色彩空间是HSV. Hue&#xff1a;色相&…

【分享】5种方法将Excel设置为“只读”

将Excel表格设置以“只读方式”打开&#xff0c;可以提醒或者防止表格被随意改动&#xff0c;今天小编来分享一下将Excel设置为“只读”的5种方法。 方法一&#xff1a;通过“保护工作簿”设置 首先&#xff0c;打开Excel表格依次点击菜单选项卡【文件】→【信息】→【保护工作…

【无标题】CTF之SQLMAP

拿这一题来说 抓个包 复制报文 启动我们的sqlmap kali里边 sqlmap -r 文件路径 --dump --dbs 数据库 --tables 表

数据库操作习题12.12

考虑如下的人员数据&#xff0c;其中加下划线的是主码&#xff0c;数据库模式由四个关系组成: employee (empname, street, city) works (empname, compname, salary) company(id, compname, city) managers (empname, mgrname) 其中 关系 employee 给出人员的基本信息,包括人员…

浅析 SaaS、CRM、OA、ERP、eHR、进销存、财务系统的区别

在当今数字化时代&#xff0c;各种企业管理软件如雨后春笋般涌现&#xff0c;为企业的日常管理和运营带来了极大的便利。其中&#xff0c;SaaS、CRM、OA、ERP、eHR、进销存、财务系统是我们常常会听到的软件。这些软件各具特色&#xff0c;为企业解决了不同的问题。它们到底是什…

Relocations for this machine are not implemented,IDA版本过低导致生成汇编代码失败

目录 1、问题描述 2、安卓app发生崩溃&#xff0c;需要查看汇编代码上下文去辅助分析 3、使用IDA打开.so动态库文件&#xff0c;提示Relocations for this machine are not implemented 4、IDA版本较老&#xff0c;不支持ARM64的指令集&#xff0c;使用7.0版本就可以了 5、…

猫罐头避雷!猫咪罐头该如何挑选?

近年来&#xff0c;国货猫罐头在国内市场的崛起&#xff0c;真的是又喜又忧。喜的是国货的崛起打破了进口猫罐头一家独大的局面&#xff0c;忧的是担心大家可能会被网上大量的内容所迷惑&#xff0c;导致踩了不少坑。 那么面对市面上种类繁多的猫罐头&#xff0c;我们应该怎么…

linux系统和网络(一):文件IO

本文主要探讨linux系统编程的文件IO相关知识。 文件IO 文件存在块设备中为静态文件,open打开文件,内核在进程中建立打开文件的数据结构在内存中用于记录文件的文件参数,开辟一段内存用于存放内容,将静态文件转为动态文件 打开文件后对文件的读写操作都为对动态…

【最新版】在WSL上运行 Linux GUI (图形用户界面)应用(Gnome 文本编辑器、GIMP、Nautilus、VLC、X11 应用)

文章目录 一、 安装WSL0. 先决条件1. 全新安装2. 现有 WSL 安装3. 注意事项 二、运行 Linux GUI 应用1. 更新发行版中的包2. 安装 Gnome 文本编辑器启动 3. 安装 GIMP启动 4. 安装 Nautilus启动 5. 安装 VLC启动 6. 安装 X11 应用 适用于 Linux 的 Windows 子系统 (WSL) 现在支…

MATLAB求解微积分(代码+详细解读)

大多数实际工程问题常常简化为微分方程&#xff0c;其求解显地至关重要。 符号微积分 极限 % matlab提供的求极限函数limit(),其调用格式为 % y limit(fun,x,x0) % fun为要求解的函数&#xff0c;x为函数自变量&#xff0c;x0为函数自变量的取值&#xff0c;x趋近于x0 clc;…

windows环境下cmd找不到pip

报错信息&#xff1a;pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 所在位置 行:1 字符: 1 pip ~~~ CategoryInfo : ObjectNotFou…

Linux-----13、用户、组

# 用户、组 # 一、用户管理 # ㈠ 用户概念及作用(了解) **用户&#xff1a;**指的是Linux操作系统中用于管理系统或者服务的人 一问&#xff1a;管理系统到底在管理什么&#xff1f; 答&#xff1a;Linux下一切皆文件&#xff0c;所以用户管理的是相应的文件 二问&#x…

【UML】第6篇 用例图

目录 一、什么是用例图 二、参与者 2.1 什么是参与者 2.2 如何识别参与者 2.3 参与者之间的关系 从今天开始&#xff0c;就到了最干的各种的图的梳理和学习了&#xff0c;未来AI就能编码了&#xff0c;把业务建模和设计的基本功打好&#xff0c;也许能和AI和平相处呢。 一…

UART协议——FPGA代码篇

一.串口&#xff08;UART&#xff09;协议简介 UART 串口通信有几个重要的参数&#xff0c;分别是波特率、起始位、数据位、停止位和奇偶检验位&#xff0c;对于两个使用UART 串口通信的端口&#xff0c;这些参数必须匹配&#xff0c;否则通 起始位&#xff1a;表示数据传输的开…

科技云报道:至简至强,新一代服务器的算力美学

科技云报道原创。 在这个时代&#xff0c;数据和计算的边界正在迅速扩张。 随着云计算、物联网和人工智能的日益成熟&#xff0c;对算力的需求已经突破了传统的限制&#xff0c;进入了一个全新的阶段。在这个阶段&#xff0c;不仅是算力的量级发生了变化&#xff0c;其性质和…

2-以太坊虚拟机

以太坊虚拟机&#xff0c;简称EVM&#xff0c;是用来执行以太坊上的交易的。业务流程如下图&#xff1a; 输入一笔交易&#xff0c;内部会转换成一个Message对象&#xff0c;传入EVM执行。 如果是一笔普通转账交易&#xff0c;那么直接修改StateDB中对应的账户余额即可。如果…