JAVA学习day09

简介: 面向对象

1、面向过程与面向对象的思想
面向对象: 我该让谁来做
面向过程: 我该怎么做

2、大象装冰箱
我们把大象装冰箱为例进行分析。
在针对具体的需求,可以使用名词提炼的办法进行分析,寻找具体的对象。
需求:把大象装冰箱里
对象:大象、冰箱
分三步:
1、打开冰箱门
2、将大象装进去
3、关闭冰箱门
分析发现打开、装、关闭都是冰箱的功能。即冰箱对象具备如下功能:
冰箱打开
冰箱存储
冰箱关闭
用伪代码描述,上述需求中有两个具体的事物 大象 和 冰箱
描述大象:
class 大象
{
}
描述冰箱
class冰箱
{
void 打开(){}
void 存储(大象){}
void 关闭(){}
}
当把具体的事物描述清楚之后,需要使用这些具体的事物,Java使用具体的事物,需要通过new关键字来创建这个事物的具体实例。
使用对象:
1、创建冰箱的对象
冰箱 bx = new 冰箱();
2、调用冰箱的功能
对象.功能();
bx.打开();
bx.存储(new 大象());
bx.关闭();
 总结:
1、先按照名词提炼问题领域中的对象
2、对对象进行描述,其实就是在明确对象中应该具备的属性和功能
3、通过new的方式就可以创建该事物的具体对象
4、通过该对象调用它以后的功能。

3、对象的内存图

方法进栈,类进堆

4、成员变量和局部变量的差别

成员变量:定义在类中的
局部变量:定义在方法中的变量

区别:
1)定义位置上的区别
成员变量:定义在类中,方法外
局部变量:定义在方法中,语句内

2)作用域不同
成员变量:作用范围是整个类
局部变量:作用范围是方法内,语句内

3)默认值不同
成员变量:有自己的默认值
局部变量:没有默认值,不赋值不能使用

4)内存位置不同
成员变量:跟着对象进入堆内存存储
局部变量:跟着方法进栈内存

5)生命周期不同
成员变量:跟着对象,在堆中存储,内存等待JVM清理
局部变量:跟着方法,方法出栈,生命周期较短

5、方法参数是基本数据类型 或 引用数据类型

public class Person {
String name ;
}

/*

  • 方法的参数类型,是基本数据类型,引用数据类型
    */

public class TestPerson {

public static void main(String[] args) {
    int a = 1;
    function(a);
    System.out.println(a);
    
    Person p = new Person();
    p.name = "张三";
    System.out.println(p.name);
    
    function(p);
    
    System.out.println(p.name);
}
/*
 * 定义方法,参数类型是引用数据类型
 * 参数是Person类型
 * p接受的是一个内存的地址
 * main 中的变量p
 * function  中的变量p  保存的地址是一样的
 */
public static void function(Person p){
    p.name = "李四";
}

/*
 * 定义方法,参数类型是基本数据类型
 */
public static void function(int a){
    a+=5;
}

}

6、封装

将具体功能封装到方法中,学习对象时,也提过将方法封装在类中,其实这些都是封装。
封装,它也是面向对象思想的特征之一。面向对象共有三个特征:封装,继承,多态。接下来我们具体学习封装。
    封装表现:
    1、方法就是一个最基本封装体。
    2、类其实也是一个封装体。
    从以上两点得出结论,封装的好处:
    1、提高了代码的复用性。
    2、隐藏了实现细节,还要对外提供可以访问的方式。便于调用者的使用。这是核心之一,也可以理解为就是封装的概念。
    3、提高了安全性。

7、private关键字

  • 新的关键字 private 私有 属于成员修饰符,不能修饰局部变量
  • 被private修饰的成员,只能在自己的本类中被使用
  1. cn.itcast.demo04;

/*

  • 描述现实生活中的人的事物
  • 属性: 姓名 年龄
  • 功能: 说话
  • 出现安全问题: age问题,可能出现赋值为负数的情况
  • 负数不会导致程序问题,违反生活中的真实情况
  • 提高安全问题: 让外面的类,不允许直接调用我的成员变量
  • 新的关键字 private 私有 属于成员修饰符,不能修饰局部变量
  • 被private修饰的成员,只能在自己的本类中被使用
  • 对私有变量,提供公共的访问方式: 方法
    */

public class Person {

 //人的姓名,成员变量
String name;
//人的年龄,成员变量
private int age ;

//变量age被私有,提供方法,让外面的类使用
//定义方法,对age变量进行赋值,方法名字,必须set开头
public void setAge(int a){
    //对变量参数a进行范围的限制
    if(a<0 || a > 200){
        //如果a超过范围,手动将age赋值为20
        age = 20;
    }else{
    //如果a没有超过范围,直接对age赋值
    age = a;
    }
}

//定义方法,对变量age获取值使用,方法名字get
public int getAge(){
    return age;
}


//定义人的说话功能,方法中,要求说出自己的姓名和年龄
public void speak(){
    System.out.println(name+"..."+age);
}

}

package cn.itcast.demo04;
/*

  • 定义好的Person类进行测试
  • 创建对象,对象调用属性和方法
    */

public class PersonTest {

public static void main(String[] args) {
    //创建Person类的对象  new
    Person p = new Person();
    //对成员变量赋值
    //p.age = -200;
    //对成员变量age赋值,只能调用Set方法赋值
    p.setAge(50);
    
    p.name = "张三";
    //调用类中方法
    p.speak();
    
    //输出成员变量age值,必须调用get方法
    System.out.println(p.getAge());
}

}

 总结:

    类中不需要对外提供的内容都私有化,包括属性和方法。
    以后再描述事物,属性都私有化,并提供setXxx getXxx方法对其进行访问。

8、私有化Person类带get,set

私有化所有的属性(成员变量),必须有对应的get与set方法
凡是自定义的类,都必须有get与set方法

package cn.itcast.demo05;

/*

  • 类描述人:
  • 属性: 姓名和年龄
  • 方法: 说话
  • 私有化所有的属性 (成员变量) ,必须写对应的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);
}

}

public class PersonTest {

public static void main(String[] args) {
    Person p = new Person();
    //调用set方法,对成员变量赋值
    p.setAge(18);
    p.setName("旺财");
    p.speak();
    
    
    //调用get方法,获取成员变量的值

// System.out.println(p.getName());
// System.out.println(p.getAge());

}

}

9、this关键字——用于解决成员变量和局部变量的重名问题
方法中的局部变量和类中的成员变量,采用就近原则进行变量获取
由于存在成员变量和局部变量同名的情况,此时需要this关键字
所有this.的变量都是类中的成员变量

10、知识点总结
 类与对象
 类,用于描述多个对象的共同特征,它是对象的模板。
 对象,用于描述现实中的个体,它是类的实例。
 类的定义:使用关键字class来定义java中的类
 格式:

        class 类名 {
            //属性
            数据类型 变量名;
            …
            //方法
            修饰符 返回值类型 方法名(参数){   }
            …
        }

 创建对象:
 格式:
类名 对象名 = new 类名();
 封装(private关键字)
 封装,把对象的属性与方法的实现细节隐藏,仅对外提供一些公共的访问方式
 封装的体现:
 变量:使用 private 修饰,这就是变量的封装
 方法:也是一种封装,封装了多条代码
 类: 也是一种封装,封装了多个方法
 private关键字,私有的意思
 它可以用来修饰类中的成员(成员变量,成员方法)
 private的特点:
 private修饰的成员只能在当前类中访问,其他类中无法直接访问
 this关键字
 this关键字,本类对象的引用
 this是在方法中使用的,哪个对象调用了该方法,那么,this就代表调用该方法的对象引用
 this什么时候存在的?当创建对象的时候,this存在的
 this的作用:用来区别同名的成员变量与局部变量(this.成员变量)

        public void setName(String name) {
            this.name = name;
        }

image

目录
相关文章
|
2月前
|
编解码 Oracle Java
java9到java17的新特性学习--github新项目
本文宣布了一个名为"JavaLearnNote"的新GitHub项目,该项目旨在帮助Java开发者深入理解和掌握从Java 9到Java 17的每个版本的关键新特性,并通过实战演示、社区支持和持续更新来促进学习。
79 3
|
2月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
88 43
Java学习十六—掌握注解:让编程更简单
|
19天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
2月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
34 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
27天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
2月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
48 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
2月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
33 2
|
2月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
25 3
|
2月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
31 2
|
2月前
|
存储 Java 编译器
【用Java学习数据结构系列】初识泛型
【用Java学习数据结构系列】初识泛型
20 2
下一篇
无影云桌面