热门标签 | 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); } }

推荐阅读
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文详细介绍了Java中的访问器(getter)和修改器(setter),探讨了它们在保护数据完整性、增强代码可维护性方面的重要作用。通过具体示例,展示了如何正确使用这些方法来控制类属性的访问和更新。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • andr ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文提供了使用Java实现Bellman-Ford算法解决POJ 3259问题的代码示例,详细解释了如何通过该算法检测负权环来判断时间旅行的可能性。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 本文介绍如何在Java项目中使用Log4j库进行日志记录。我们将详细说明Log4j库的引入、配置及简单应用,帮助开发者快速上手。 ... [详细]
  • Java编程实践:深入理解方法重载
    本文介绍了Java中方法重载的概念及其应用。通过多个示例,详细讲解了如何在同一类中定义具有相同名称但不同参数列表的方法,以实现更灵活的功能调用。 ... [详细]
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社区 版权所有