热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java学习进阶:面向对象编程基础详解(类、属性与方法)

本文主要内容 1、类与对象 2、局部变量和成员变量 3、封装思想 4、关键字private,this 01面向对象和面向过程 a、面向对象的思想的生活案例 例如: 买电脑(组装机) 面向过程:

本文主要内容
1、类与对象
2、局部变量和成员变量
3、封装思想
4、关键字private,this

01面向对象和面向过程

a、面向对象的思想的生活案例
例如: 买电脑(组装机)
面向过程:自己该怎么做
面向对象:找人帮我们做
b、对象的内存关系

Java学习笔记 8 - 面向对象基础(类、变量、方法)
image.png

c、类和对象的关系
类和对象的关系:类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体
* 类,用于描述多个对象的共同特征,它是对象的模板。
* 对象,用于描述现实中的个体,它是类的实例。
* 类的定义:使用关键字class来定义java中的类
d、类的定义格式:
class 类名 {
//属性
数据类型 变量名;

//方法
修饰符 返回值类型 方法名(参数){ }

}

e、创建对象格式:类名 对象名 = new 类名();

02 成员变量和局部变量

定义的位置
* 成员变量 定义在类中
* 局部变量 定义在方法中或者{}语句中
在内存中的位置
* 成员变量 存储在对内存的对象中
* 局部变量 存储在栈内存的方法中
声明周期
* 成员变量随着对象的出现而出现在堆中,随着对象的消失而从堆中消失
* 局部变量随着方法的运行而出现在栈中,随着方法的弹栈而消失
初始化
* 成员变量因为在堆内存中,所有默认的初始化值
* 局部变量没有默认的初始化值,必须手动的给其赋值才可以使用。

03 方法参数类型

a、基本类型

class Demo { public static void main(String[] args) { int x = 4; show(x); System.out.println("x="+x); } public static void show(int x) { x = 5; } }

基本类型作为参数传递时,其实就是将基本类型变量x空间中的值复制了一份传递给调用的方法show(),当在show()方法中x接受到了复制的值,再在show()方法中对x变量进行操作,这时只会影响到show中的x。当show方法执行完成,弹栈后,程序又回到main方法执行,main方法中的x值还是原来的值。
b、.引用类型

class Demo { int x ; public static void main(String[] args) { Demo d = new Demo(); d.x = 5; show(d); System.out.println("x="+d.x); } public static void show(Demo d) { d.x = 6; } }

当引用变量作为参数传递时,这时其实是将引用变量空间中的内存地址(引用)复制了一份传递给了show方法的d引用变量。这时会有两个引用同时指向堆中的同一个对象。当执行show方法中的d.x=6时,会根据d所持有的引用找到堆中的对象,并将其x属性的值改为6.show方法弹栈。
由于是两个引用指向同一个对象,不管是哪一个引用改变了引用的所指向的对象的中的值,其他引用再次使用都是改变后的值。

c、结论
* 对于基本类型形式参数改变不会影响到实际参数
* 对于引用类型形式参数改变会影响到实际参数

04 封装

a、面向对象三大特征:封装、继承、多态
b、封装:把对象的属性与方法的实现细节隐藏,仅对外提供一些公共的访问方式
c、封装的体现:
* 变量:使用 private 修饰,这就是变量的封装
* 方法:也是一种封装,封装了多条代码
* 类: 也是一种封装,封装了多个方法
封装提高了代码的复用性、隐藏了实现细节,还要对外提供可以访问的方式。便于调用者的使用。
这是核心之一,也可以理解为就是封装的概念。同时提高了安全性

05 关键字

a、private关键字
* private可以修饰成员内容包括成员方法和成员变量
* private修饰的成员只能在当前类中访问,其他类中无法直接访问

b、this关键字
*本类对象的引用

  • this是在方法中使用的,哪个对象调用了该方法,那么,this就代表调用该方法的对象引用
  • 当创建对象的时候,this存在的
  • this的作用:用来区别同名的成员变量与局部变量(this.成员变量)
    public void setName(String name) {
    this.name = name;
    }

    Java学习笔记 8 - 面向对象基础(类、变量、方法)
    image.png
06 get和set方法

一般对成员属性的访问动作:赋值(设置 set),取值(获取 get),因此对私有的变量访问的方式可以提供对应的 setXxx或者getXxx的方法。

class Person { // 私有成员变量 private int age; private String name; // 对外提供设置成员变量的方法 public void setAge(int a) { // 由于是设置成员变量的值,这里可以加入数据的验证 if (a 130) { System.out.println(a + "不符合年龄的数据范围"); return; } age = a; } // 对外提供访问成员变量的方法 public void getAge() { return age; } } /* * 类描述人: * 属性: 姓名和年龄 * 方法: 说话 * * 私有化所有的属性 (成员变量) ,必须写对应的get/set方法 * 凡是自定义的类,自定义成员变量,应该私有化,提供get/set * * this关键字: * 区分成员变量和局部变量同名情况 * 方法中,方位成员变量,写this. */ public class Person { private String name; private int age; // set方法,变量name,age赋值 public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } // get方法,变量name,age获取值 public int getAge() { return age; } public String getName() { return name; } public void speak() { String name = "哈哈"; int age = 16; System.out.println("人在说话 " + this.name + "..." + this.age); } }

推荐阅读
  • 探索偶数次幂二项式系数的求和方法及其数学意义 ... [详细]
  • 捕获并处理用户输入数字时的异常,提供详细的错误提示与指导
    在用户输入数字时,程序能够有效捕获并处理各种异常情况,如非法字符或格式错误,并提供详尽的错误提示和操作指导,确保用户能够准确输入有效的数字数据。通过这种方式,不仅提高了程序的健壮性和用户体验,还减少了因输入错误导致的系统故障。具体实现中,使用了Java的异常处理机制,结合Scanner类进行输入读取和验证,确保了输入的合法性和准确性。 ... [详细]
  • 在Python网络编程中,多线程技术的应用与优化是提升系统性能的关键。线程作为操作系统调度的基本单位,其主要功能是在进程内共享内存空间和资源,实现并行处理任务。当一个进程启动时,操作系统会为其分配内存空间,加载必要的资源和数据,并调度CPU进行执行。每个进程都拥有独立的地址空间,而线程则在此基础上进一步细化了任务的并行处理能力。通过合理设计和优化多线程程序,可以显著提高网络应用的响应速度和处理效率。 ... [详细]
  • 本文深入探讨了Java中正确使用return语句的方法。通过详尽的示例和解释,帮助读者理解return语句在不同场景下的应用,提升代码质量和可读性。希望读者在阅读后能够掌握return语句的最佳实践,从而在实际开发中更加得心应手。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • Python 实战:异步爬虫(协程技术)与分布式爬虫(多进程应用)深入解析
    本文将深入探讨 Python 异步爬虫和分布式爬虫的技术细节,重点介绍协程技术和多进程应用在爬虫开发中的实际应用。通过对比多进程和协程的工作原理,帮助读者理解两者在性能和资源利用上的差异,从而在实际项目中做出更合适的选择。文章还将结合具体案例,展示如何高效地实现异步和分布式爬虫,以提升数据抓取的效率和稳定性。 ... [详细]
  • 深入解析 Java UTC 时间处理技术与应用 ... [详细]
  • C++入门必备:首个博客知识点汇总
    本文总结了C++初学者需要掌握的关键知识点,特别强调了成员类型的区分。其中,protected成员与private成员在本类中的作用相同,但protected成员允许派生类的成员函数访问,而private成员则不允许。此外,文章还介绍了其他重要的C++基础概念,如类的构造函数、析构函数以及继承机制,为初学者提供了一个全面的学习指南。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
  • 基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析
    基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析 ... [详细]
  • 在分析Socket服务器程序接收中文数据时出现的乱码问题时,我们发现客户端使用C#编写的数据在返回时能够正常显示。本文详细探讨了该问题的成因,并提出了一种有效的解决方案。通过调整字符编码设置和优化数据传输格式,确保了中文数据在传输过程中的完整性与正确性。具体实现代码包括对Socket读取事件的处理,确保数据以正确的编码格式进行解析和显示。 ... [详细]
  • PHP中函数名、常量名和变量名大小写转换及规范详解
    在PHP编程中,初学者常常会遇到关于函数名、常量名和变量名大小写的问题。本文详细解析了PHP中这些名称的大小写敏感性及其命名规范,帮助开发者更好地理解和使用PHP。具体而言,文章探讨了PHP中的常量名是否区分大小写,自定义函数名的大小写敏感性,以及类名的大小写规则。此外,还提供了实用的代码示例和最佳实践,以确保代码的可读性和一致性。 ... [详细]
  • 二叉树的直径是指树中任意两个叶节点之间最长路径上的节点数量。本文深入解析了计算二叉树直径的算法,并提出了一种优化方法,以提高计算效率和准确性。通过详细的案例分析和性能对比,展示了该优化算法在实际应用中的优势。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
author-avatar
手机用户2502913853
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有