【韩顺平 零基础30天学会Java】面向对象编程(基础)(5days)

news2024/11/25 1:42:31

面向对象编程
在这里插入图片描述
Java设计者引入类与对象(OOP),根本原因就是现有的技术,不能完美的解决新的需求。
对象主要是由属性和行为构成的。
类就是数据类型(比如Cat),对象就是具体的实例。
在这里插入图片描述

//定义一个猫类Cat --> 自定义的数据类型
Class Cat{
	//属性
	String name;
	int age;
	String color;
}
//使用OOP面向对象解决
//实例化一只猫
Cat cat1 = new Cat();
cat1.name = ""
cat1.age = 3
cat1.color = "白色"

System.out.println("第1只猫信息"+cat1.name+" "+cat1.age+" " +cat1.color);

1)类是抽象的,概念的,代表一类事物。即它是数据类型。
2)对象是具体的,实际的,代表一个具体事物,即是实例。
3)类是对象的模板,对象是类的一个个体,对应一个实例。

对象在内存中存在形式
在这里插入图片描述
在这里插入图片描述
创建Person对象 Person p1 = new Person();
p1是对象名(对象引用)new Person()创建的对象空间(数据)才是真正的对象
在这里插入图片描述
创建对象的两种方式
1.先声明再创建 Cat cat; cat = new Cat();
2.直接创建 Cat cat = new Cat();
访问属性:对象名.属性名

对象分配机制
Person p2=p1;//把p1赋给了p2,让p2指向p1

在这里插入图片描述
在这里插入图片描述
成员方法

Class Person{
	String name;;
	int age;
	public void speak(){
		System.out.println(""):
	}
	
	//(int n)形参列表,表示当前有一个形参,可以接受用户输入
	public void cal02(int n){
		
	}
	
	public int getSum(int num1,num2){
		int res = num1 + num2;
		return res;
	}
}

//方法使用(调用)
Person p1 = new Person();
p1.speak();
p1.cal02(5);
int returnRes = p1.getSum(10,20);

方法调用机制
在这里插入图片描述
成员方法的好处

  1. 提高代码的复用性
  2. 可以将实现的细节封装起来,然后供其他用户来调用即可

成员方法的定义
在这里插入图片描述
成员方法注意细节
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
方法的传参机制
在这里插入图片描述
主栈和swap栈是独立的数据空间,基本数据类型不是引用,一个变化不会影响另一个。
基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参!
引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方法递归调用
简单地说,递归就是方法自己调用自己,每次调用时传入不同的变量。递归有助于编程者解决复杂问题,同时可以让代码变得简洁。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
老鼠出迷宫
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
扩展思考:如何求出最短路径?(1)穷举 (2)图–>求出最短路径

汉诺塔
在这里插入图片描述
八皇后
在这里插入图片描述
在这里插入图片描述
不会不会不会 太难了!!!
八皇后

方法重载
在Java中允许同一个类中,多个同名方法的存在,但要求形参列表不一致!
重载的好处:减轻了起名和记名的麻烦

注意事项和使用细节

  1. 方法名 必须相同
  2. 参数列表 必须不同(参数类型或个数或顺序,至少有一样不同,参数名无要求)
  3. 返回类型 无要求

可变参数
Java中允许将同一个类中多个同名同功能但是参数个数不同的方法,封装成一个方法。就可以通过可变参数实现。
基本语法

访问修饰符 返回类型 方法名(数据类型...形参名){
}

//1. int... 表示接受的是可变参数,类型是int,即可以接收多个int(0-多)
//2. 使用可变参数时,可以当作数组来使用,即nums可以当作数组
public int sum(int... nums){
	
}

在这里插入图片描述
pubic String calculate(String name, double… scores){

sum = 0;
for(int i=0;i<scores.length;i++){sum+=scores[i];}

}

作用域

  1. 在Java编程中,主要的变量就是属性(成员变量)和举报变量
  2. 局部变量一般是指在成员方法中定义的量。
  3. java中作用域的分类:全局变量 也就是属性,作用域为整个类体。局部变量 除了属性之外的其他变量,作用域为定义它的代码块中
  4. 全局变量(属性)可以不赋值,直接使用,因为有默认值,局部变量必须赋值后,才能使用,因为没有默认值。

注意事项和使用细节

  1. 属性和局部变量可以重名,访问时遵循就近原则。
  2. 在同一个成员方法中,两个局部变量不能重名。
  3. 属性生命周期较长,伴随对象的创建而创建,对象的销毁而销毁。局部变量,生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁,即在一次方法调用过程中。
  4. 作用范围不同 全局变量/属性 可以被本类使用,或其他类使用(通过对象调用)局部变量 只能在本类中对应的方法中使用
  5. 修饰符不同 全局变量/属性可以加修饰符 局部变量不可以加修饰符

构造方法/构造器
构造方法也叫构造器,是类的一种特殊方法,它的主要作用是完整对新对象的初始化。
它有几个特点(1)方法名和类名相同 (2)没有返回值 (3)在创建对象时,系统会自动调用该类的构造器完成对象的初始化。

Class Person{
	String name;
	int age;
}
// 构造器没有返回值,也不能写void 构造器的名称和类名一样 (String pName, int pAge)构造器形参列表,规则和成员方法一样
pulic Person(String pName, int pAge){
	name = pName;
	age = PAge;
}

Person p1 = new Person("Smith",80)

注意事项和使用细节

  1. 一个类可以定义多个不同的构造器,即构造器重载
  2. 构造器名和类名相同
  3. 构造器没有返回值
  4. 构造器是完成对方法的初始化,并不是创建对象
  5. 在创建对象时,系统自动的调用该类的构造方法
  6. 如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造器(也叫默认构造器)【可以使用javap指令反编译】
  7. 一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器,除非显式的定义一下,即Person(){}

对象创建的流程分析(啊啊啊啊希望我可以用文字描述出来!
在这里插入图片描述

  1. 加载Person类信息(Person.class),只会加载一次
  2. 在堆中分配空间(地址)
  3. 完成对象初始化【3.1 默认初始化age=0 name=null 3.2 显式初始化age=90 name = null 3.3 构造器初始化age = 20 name=小倩】
  4. 在对象在堆中的地址,返回给p(p是对象名,也可以是理解成对象的引用)
    背下来!!!背下来!!!背下来!!!

this关键字
Java虚拟机会给每个对象分配this,代表当前对象。

class Dog{
	String name;
	int age;
	public Dog(String name, int age){
		//this.name,this.age就是当前对象的属性name和age
		this.name = name;
		this.age = age;
	}
}

this是个隐藏的属性,它指向它自己的对象。
在这里插入图片描述
可以利用hashCode()来看对象的情况。
简单地说,那个对象调用,this就代表哪个对象。

this的注意事项和注意细节

  1. this关键字可以用来访问本类的属性、方法、构造器
  2. this用于区分当前类的属性和局部变量
  3. 访问成员方法的语法:this.方法名(参数列表)
  4. 访问构造器语法:this(参数列表);注意只能在构造器中使用(即只能在构造器中访问另外一个构造器,必须放在第一条语句)
class T{
	/*
	细节,访问构造器语法:this(参数列表);
	注意只能在构造器中使用(即只能在构造器中访问另外一个构造器)
	注意:访问构造器语法: this(参数列表);必须防止在第一条语句。
	*/
	public T(){
		System.out.println("T()构造器");
		//这里去访问T(String name, int age)构造器
		this("jack",100);
	}
	public T(String name, int age){
		System.out.println("T(String name, int age)构造器");
	}
}
  1. this不能在类定义的外部使用,只能在类定义的方法中使用

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

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

相关文章

QT转型Visual Studio(qmake项目到cmake项目的移植)

前言 由于工作需要&#xff0c;同时也为了方便以后的集成升级&#xff0c;希望将之前用Qt creator qmake开发的项目移植到cmake项目中&#xff0c;并使用Visual Studio 进行后续开发&#xff0c;本文主要用以记录该过程中的常规步骤和遇到的特殊情况。 qmake项目 在一开始&a…

MATLAB 的 figure 用法总结

文章目录 Syntax&#xff1a;DescriptionExamples1.figure2.figure(Name,Value)Position 属性: 设置 Figure 的位置和大小Name 属性: 设置 Figure 的名称NumberTitle 属性: 取消 Figure 名称里默认的数字units 属性color 属性 3.f figure(___)4.Working with Multiple Figures…

JAVA反序列化漏洞复现

Weblogic&#xff08;CVE-2017-10271&#xff09; 拉取容器 访问 http://192.168.142.151:7001/console/login/LoginForm.jsp ​ 启动nacs 进行漏洞扫描 下载weblogicScanner工具 git clone https://github.com/0xn0ne/weblogicScanner.git 开始扫描 访问http://192.168.1…

数据结构队列

数据结构队列 队列的概念及结构队列的是实现数据结构函数接口初始化销毁入队列&#xff08;尾插&#xff09;出队列&#xff08;头删&#xff09;求队列的长度判断队列是否为空取队头的数据取队尾的数据 队列的概念及结构 队列之允许在一段及进行数据插入操作&#xff0c;在另…

LeetCode 356. Line Reflection【数学,哈希表】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

IO day1

1->x.mind 2-> 3->计算一个文件的大小&#xff0c;计算一个文件有几行。封装成函数

MyBatisPlus查询条件设置、映射匹配兼容性、id生成策略、多数据操作

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 MyBatisPlus 一、 查询条件设置二、 映射匹配兼容…

数据结构day7栈-链式栈原理及实现

全部代码&#xff1a; main.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include "linkstack.h"int main(int argc, char *argv[]) {linkstack s;s stack_create();if(s NULL){return -1;}stack_push(s, 10);stack_push(s…

[图文并茂]C++线性表及其逻辑结构

1.1线性表的定义 线性表是具有相同特性的数据元素的一个有限序列 对应的逻辑结构图形&#xff1a; 从线性表的定义中可以看出它的特性&#xff1a; &#xff08;1&#xff09;有穷性&#xff1a;一个线性表中的元素个数是有限的 &#xff08;2&#xff09;一致性&#xff1a…

注册登录首选,趣味滑块验证码

前言 注册登录账户时&#xff0c;保障账户安全是首要任务&#xff01;使用趣味滑块验证码&#xff0c;既能有效防御恶意攻击&#xff0c;又能为验证过程增添一丝乐趣。让注册和登录变得更加有趣又安全&#xff01; HTML代码 <script src"https://cdn6.kgcaptcha.co…

Ubutnu python2与python3切换

python -V #查看默认版本 Python 2.7.17 python3 -V #查看电脑3的版本 Python 3.6.9 sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2 #设置两个版本的…

【Linux】虚拟地址空间理解

虚拟地址空间 虚拟地址是操作系统管理内存的一种方式。**方便不同进程使用的虚拟地址彼此隔离。方便物理内存中不相邻的内存在虚拟地址上视为连续的来使用。虚拟地址和物理地址的映射是通过MMU页表进行的。虚拟内存对实际内存有保护作用。

LeetCode(力扣)17. 电话号码的字母组合Python

LeetCode17. 电话号码的字母组合 题目链接代码 题目链接 https://leetcode.cn/problems/letter-combinations-of-a-phone-number/ 代码 class Solution:def __init__(self):self.letterMap ["", # 0"", # 1"abc", # 2"def&qu…

备战9月9日C/C++青少年等级考试(1~8级)

由中国电子学会举办的《全国青少年软件编程等级考试》将于9月9日&#xff08;周六&#xff09;举行&#xff0c;你准备的怎么样了&#xff1f;我在这里列举了1~8级的历届真题及解析&#xff0c;希望能助你考试通过&#xff01;&#xff01;&#xff01; C/C编程一级 一级标准 …

Go调用jenkins api执行流水线构建与停止

用到的库&#xff1a; "github.com/bndr/gojenkins" 代码如下&#xff0c;一次到位&#xff1a; import ("context""fmt""time""github.com/bndr/gojenkins" )// 构建指定任务 func buildJob(ctx context.Context, jenkins…

CUDA 问题 ,一直头大。。。。

1.卸载cuda ubuntu系统安装/卸载cuda和cudnn_怎么删除cudnn_Zhijun.liStudio的博客-CSDN博客ubuntu系统安装/卸载cuda和cudnn_怎么删除cudnnhttps://blog.csdn.net/weixin_45921929/article/details/128849198?ops_request_misc%257B%2522request%255Fid%2522%253A%252216939…

机器学习算法系列————决策树(二)

1.什么是决策树 用于解决分类问题的一种算法。 左边是属性&#xff0c;右边是标签。 属性选择时用什么度量&#xff0c;分别是信息熵和基尼系数。 这里能够做出来特征的区分。 下图为基尼系数为例进行计算。 下面两张图是对婚姻和年收入的详细计算过程&#xff08;为GINI系…

Hive_Hive统计指令analyze table和 describe table

之前在公司内部经常会看到表的元信息的一些统计信息&#xff0c;当时非常好奇是如何做实现的。 现在发现这些信息主要是基于 analyze table 去做统计的&#xff0c;分享给大家 实现的效果某一个表中每个列的空值数量&#xff0c;重复值数量等&#xff0c;平均长度 具体的指令…

Freecycle出现大规模数据泄露事件,影响700万用户

Freecycle是一个致力于交换二手物品的在线论坛&#xff0c;拥有来自全球5300多个地方城镇的近1100万名用户。该论坛近日发生了大规模数据泄露事件&#xff0c;700 多万用户受到影响。 该组织称是在上周三&#xff08;8月30日&#xff09;发现这一漏洞的&#xff0c;而在此之前…

Nand Flash的特性及烧录问题

目录 前言 一 Nand flash的特性 1 存储结构 2 OOB区域 3 位翻转 4 坏块及ECC 二 Nand系统裸片量产烧录 1 坏块处理策略 2 分区(Partition) 3 纠错码(Error Correction Codes&#xff0c;ECC) 4. 擦除坏块 &#x1f388;个人主页&#x1f388;&#xff1a;linux_嵌入式…