Java面向对象(一)

Java面向对象(一)

一、面向过程(POP)与面向对象(OOP)

  • 二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对 象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
  • 面向对象的三大特征:
  • 封装
  • 继承
  • 多态
  • (抽象)
  • 例子:把大象装进冰箱

Java面向对象(一)
  • *Java语言就是一门面向对象的语言。

二、类和对象

  • 类和对象是 Java 语言两个基本元素。 类:对一类事物的描述,是抽象的、概念上的定义。 对象:实际存在的该类事物的每个个体,因而也称为实例(instance)。 例如:人是一个类,而每个特定的人就是一个对象。
  • 面向对象程序设计的重点是类的设计 。 类的设计,其实就是类的成员的设计。

2.1 类及类的成员

  • 类的成员:
  • 属性 = 成员变量,
  • (成员)方法 = 函数
  • 构造器
  • 代码块
  • 内部类

例如:

Java面向对象(一)

注意:一个类中不一定要包含所有的类的成员。

2.2 对象的创建与使用

  • 如何使用我们写好的 Java 类及类的成员?

​ 将 Java 类实例化,即创建对象来调用。

  • 创建对象语法: 类名 对象名 = new 类名();
  • 使用” 对象名.对象成员“的方式访问对象成员(包括属性和方法)
public class People {
    String name;
    int age;
    public void eat(){
    System.out.println("Eating.");
    }
    public viod move(){
    System.out.println("Move.");
    }
}
public class Text{
    public static void main(String args[]){
    //创建对象
    People p1 = new People();
    p1.age = 20;//访问属性
    System.out.println(p1.age);
    p1.eat();//访问方法
    p1.move();//访问方法

    People p2 = new People();
    People p3 = p1;
    }
}

注: 每创建一个类的对象,则每个对象都独立拥有一套类的属性(非static的)。例如上面代码中,p1和 p2对象都独立拥有一套类的属性,但是应为 p3对象是赋予了 p1对象的地址,所以它跟p1 指向堆空间中的同一个对象实体。

2.3 类的访问机制

在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static,编译不通过。)

在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员。

2.4 Java内存解析

Java面向对象(一)

特别的: 数组对象的内存解析:

Java面向对象(一)

2.5 匿名对象

  1. 概念:创建的对象没有显式的赋给一个变量名,即为匿名对象。
  2. 创建:new 类名().方法名()
  3. 特征:只能调用一次。(每 new 一次就相当于创建一个新的对象)
  4. 使用:
  5. 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
  6. 经常将匿名对象作为实参传递给一个方法调用。
public class InstanceTest {
    public static void main(String[] args) {
//      匿名对象的创建
        new Phone().sendEmail();
        new Phone().playGame();

//      每 new 一次就相当于新创建一个对象
        new Phone().price = 1999;
        new Phone().showPrice();//0.0

//      匿名对象做实参
        PhoneMall mall = new PhoneMall();
        mall.show(new Phone());
    }
}

class PhoneMall{
    public void show(Phone phone){
        phone.sendEmail();
        phone.playGame();
    }
}

class Phone{
    double price;//价格
    public void sendEmail(){
        System.out.println("发送邮件");
    }
    public void playGame(){
        System.out.println("玩游戏");
    }
    public void showPrice(){
        System.out.println("手机价格为:" + price);
    }
}

三、类的成员之一:属性(也叫成员变量)

语法格式: 修饰符 数据类型 属性名 = 初始化值 ;

  • 常用的权限修饰符有:private、缺省(default)、protected、public 其他修饰符:static、final (暂不考虑)
  • 数据类型:任何基本数据类型 或 任何引用数据类型。
  • 属性名:属于标识符,符合命名规则和规范即可。

变量的分类:成员变量与局部变量

  • 成员变量:在方法体外,类体内声明的变量
  • 局部变量:在方法体内部声明的变量
  • 注意:二者在初始化值方面的异同: 同:都有生命周期 *异:局部变量除形参外,均需显式初始化。

Java面向对象(一)

Java面向对象(一)

例子:

Java面向对象(一)

对象属性的默认初始化赋值

Java面向对象(一)

四、类的成员之二:方法

4.1 方法的声明格式:

修饰符 返回值类型 方法名(参数类型 形参1, 参数类型 形参2, ....){

        方法体程序代码

        return 返回值;
}

其中:
1.修饰符:public,缺省,private, protected等
2.返回值类型:
  (1) 没有返回值:void。
  (2) 有返回值,声明出返回值的类型。与方法体中"return 返回值"搭配使用
3.方法名:属于标识符,命名时遵循标识符命名规则和规范,"见名知意"
4.形参列表:可以包含零个,一个或多个参数。多个参数时,中间用","隔开
5.返回值:方法在执行完毕后返还给调用它的程序的数据。

4.2 方法的调用:

方法通过方法名被调用,且只有被调用才会执行。

Java面向对象(一)

4.3 注意:

  1. 方法被调用一次,就会执行一次。
  2. 没有具体返回值的情况,返回值类型用关键字void表示,那么方法体中可以不必使用return语句。如果使用,仅用来结束方法。
  3. 定义方法时,方法的结果应该返回给调用者,交由调用者处理。
  4. 方法中只能调用方法或属性,不可以在方法内部定义方法。

Original: https://www.cnblogs.com/xiaozhao01/p/16461035.html
Author: 小钊丶
Title: Java面向对象(一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/593521/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【Redis】ziplist压缩列表

    压缩列表 压缩列表是列表和哈希表的底层实现之一: 如果一个列表只有少量数据,并且数据类型是整数或者比较短的字符串,redis底层就会使用压缩列表实现。 如果一个哈希表只有少量键值对…

    Java 2023年6月8日
    088
  • HashMap不安全后果及ConcurrentHashMap线程安全原理

    Java集合HashMap不安全后果及ConcurrentHashMap 原理 HashMap JDK7 HashMap链表循环造成死循环 HashMap数据丢失 JDK7 Con…

    Java 2023年6月16日
    072
  • 信息系统项目管理师计划

    报名地址:https://bm.ruankao.org.cn/sign/welcome#test=2 课程内容 视频时长 计划开始时间 实际开始时间 完成时间 信息系统项目管理基础…

    Java 2023年6月9日
    061
  • 什么是拦截器?拦截器如何配置?

    今天这篇文章来介绍一下拦截器在SpringBoot中的如何自定义及如何配置的,拦截器的具体作用和应用场景。 SpringBoot版本 本文基于的Spring Boot的版本是2.6…

    Java 2023年6月8日
    080
  • Java面向对象编程思维导图

    Java面向对象编程知识点思维导图 Java面向对象编程思维导图 posted @2022-04-15 21:10 哆啦L 阅读(48 ) 评论() 编辑 Original: ht…

    Java 2023年6月5日
    080
  • Kubernetes-ConfigMap

    1. 简介 ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pods 可以将其用作 环境&amp…

    Java 2023年6月7日
    062
  • OptaPlanner将弃用DRL(Drools)评分方式!!!

    本来这段时间一直都在加紧我家”三胎”(易排通用智能规划平台)建设,毕竟我们的通用规划平台原定6月初就能上线,但因为其中遇到的各种技术问题及其它项目的突发情况…

    Java 2023年6月16日
    073
  • maven打包scala+java工程

    在 scala和java混合编程的时候,需要添加一些额外的配置到pom中,才能将scala文件的class加到最终的jar中 打包的命令 Original: https://www…

    Java 2023年5月29日
    063
  • 三万字+八十图,详解Redis五十二问!太全面了

    大家好,我是老三,面渣逆袭系列继续,这节我们来搞定Redis——不会有人假期玩去了吧?不会吧? 基础 1.说说什么是Redis? Redis是一种基于键值对(key-value)的…

    Java 2023年6月5日
    083
  • JAVA常量池

    Java中的常量池,实际上分为两种形态: 静态常量池和 运行时常量池。一、 静态常量池 即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包…

    Java 2023年5月29日
    069
  • java基础

    深入循环结构 for(循环条件1) { //循环操作1 for(循环条件2) { //循环操作2 } } 多层循环: 外层循环变量变化一次,内层循环变量要变化一轮。 一、循环打印输…

    Java 2023年6月13日
    061
  • 2022保研经历-有删减

    2022 保研经历 我也知道大家仅仅是想看题目而已。 恕我直言,那些 排版混乱 ,看起来讲了很多,实际上既没有提供面试题目,也没有提供备考经验,反而只感动自己、像记流水账、对别人没…

    Java 2023年6月7日
    057
  • MSSQL·FOR XML PATH语法转义尖括号解决方案

    阅文时长 | 0.14分钟字数统计 | 225.6字符主要内容 | 1、引言&背景 2、示例及解决方案 3、声明与参考资料『MSSQL·FOR XML PATH语法转义尖括…

    Java 2023年6月5日
    073
  • Spring Boot整合RabbitMQ

    Spring Boot整合RabbitMQ Spring Boot整合RabbitMQ 写在开头 整合流程 配置文件 RabbitMQ配置 RabbitMQ生产者 RabbitMQ…

    Java 2023年6月5日
    066
  • 引入Elasticsearch7.x版本后,原本好好的服务无法启动了

    问题背景 项目上使用的springboot版本是 2.1.1.RELEASE,现在因为要接入elasticsearch7.x版本,参考官方文档要求,需要将springboot版本升…

    Java 2023年6月6日
    084
  • 合并两个有序列表

    合并两个有序列表 问题重述: 问题分析: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输&a…

    Java 2023年6月7日
    060
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球