当前位置:

首页 > 编程开发 > Java类和对象原理示例分析

Java类和对象原理示例分析

面向对象、面向过程什么是类?什么是对象?这是非常抽象的两个概念!!!!!!!!在说清楚类和对象的概念之前,给大家讲一下什么是面向对象、面向过程,以此来推出我们类和对象的概念。面向过程:以洗衣服为例:拿盆、放水、放衣服、放洗衣粉、手搓、换水、拧干、晾衣服,这个过程就是面向过程。面向对象:以洗衣服为例:人把衣服放进洗衣机,倒入洗衣粉,洗完晾干,不需要关心洗衣服整个过程是怎么完成的,只需要找对象,创建对象,使用对象。在好比我们使用toString函数,我们并不关心toString函数具体的实现过程,我们直接交给

本文目录

    面向对象、面向过程

    什么是类?

    什么是对象?

    这是非常抽象的两个概念!!!!!!!!

    在说清楚类和对象的概念之前,给大家讲一下什么是面向对象、面向过程,以此来推出我们类和对象的概念。

    面向过程:以洗衣服为例:拿盆、放水、放衣服、放洗衣粉、手搓、换水、拧干、晾衣服,这个过程就是面向过程。 

    面向对象:以洗衣服为例:人把衣服放进洗衣机,倒入洗衣粉,洗完晾干,不需要关心洗衣服整个过程是怎么完成的,只需要找对象,创建对象,使用对象。在好比我们使用toString函数,我们并不关心toString函数具体的实现过程,我们直接交给Arrays帮我们实现就可以了,这就是面向对象。

    对象从哪来的?对象就是从类来的,有类之后才有对象,人,洗衣机 ,洗衣粉,都是单独的一个类。由类再产生对象,我们就叫做创建对象。对象都创建好了,每个对象都具备一些行为一些属性,然后对象之间相互完成就可以了。这就是面向对象和面向过程。

    要面向对象,我们就要找到对象,而对象是由类来的,类是从哪来的?我们是需要去抽象的。比如说:我们都是人,人的话都有共同的属性,姓名、性别、年龄、吃饭、睡觉,每个人都会具备这些,相当于这就是一个模板,通过这个模板可以产生很多的对象,这些对象都具备这些相同的属性。就是来抽象这个人,由这个人来创建对象,而这个人就是一个类。真正的要有这样一个人,让他是一个对象,是一个实体,就需要把他创建出来,通过new来创建。

    定义类

    class Person{
     
        
    }//定义一个类,这个类叫Person,类名一定要是大驼峰
     
     
     
     
     
    class Person{
        //类里面包含字段,也叫做属性,也叫做成员变量
        //也包含方法
        //一个类就是由方法和字段组成的
        public String name;//属性
        public int age;//属性
        //什么是方法?可以解读为这个人的行为
        public void eat(){
            System.out.println(name+" 正在吃饭");
        }
        public void sleep(){
            System.out.println(name+" 正在睡觉");
        }
     
    }

    由类产生对象的过程,术语我们叫做实例化,通过new关键字来实例化对象。

    public class TestDemo {
        public static void main(String[] args) {
            Person person//定义一个变量person,此时类Person也相当于类型的意思,和int a = 10,a的类型是int一样
     
        }
    }

    由类Person定义的变量person是引用变量,意味着它的初值可以给null

    public class TestDemo {
        public static void main(String[] args) {
            Person person = null;
     
        }
    }

    实例化对象

    public class TestDemo {
        public static void main(String[] args) {
            Person person = new Person();//由类Person实例化了一个对象
     
        }
    }

    一个类可以实例化多个对象

    public class TestDemo {
        public static void main(String[] args) {
            Person person = new Person();//由类Person实例化了一个对象
            Person person1 = new Person();
            Person person2 = new Person();
            Person person3 = new Person();
            Person person4 = new Person();
     
        }
    }

    类的成员

    普通成员变量

    字段是定义在类的内部方法的外部,如果定义到方法里头叫做局部变量,定义到方法外头叫做成员变量 

     如何访问成员变量,成员变量分为两种:(普通成员变量、静态成员变量)。普通的成员变量的访问方式通过引用来访问。

    Java类和对象原理示例分析

    成员变量没有赋初值的情况下都有一个默认的值

     如何给成员变量赋值

    Java类和对象原理示例分析

    如果是一个普通的成员变量,它的内存在对象里面,而不是说所有对象共用一份。每个对象都各有一份自己的name和age

    Java类和对象原理示例分析

    Java类和对象原理示例分析

    方法也分为两种:一种叫做普通成员方法,一种叫做静态成员方法

    普通的成员方法访问方式也是一样的,通过对象的引用来访问我的方法。

    Java类和对象原理示例分析

    静态成员变量

    被static修饰的的变量叫静态成员变量,也叫做类变量,是放在方法区的

    静态成员变量的访问方式是通过类名.静态的成员属性/方法。

    不依赖对象

    class Person{
     
        public String name;
        public int age;
     
        public static int count;
     
        public void eat(){
            System.out.println(name+" 正在吃饭");
        }
        public void sleep(){
            System.out.println(name+" 正在睡觉");
        }
     
    }
     
    public class TestDemo {
        public static void main(String[] args) {
            Person.count++;
            System.out.println(Person.count);
            System.out.println("================");
            Person.count++;
            System.out.println(Person.count);
     
        }
    }

    打印结果;

    Java类和对象原理示例分析

    count是被static修饰的静态成员变量,是放在方法区的,不属于某个对象,属于类。正确的访问静态成员变量或者方法只要  类名.静态成员变量/方法    就可以了,所有静态的东西在方法区里只存一份,所以加2遍都是加的count本身,所以第二次打印的结果是2。

    普通的方法内部不能够定义静态的变量

    Java类和对象原理示例分析

    1.static定义的变量是类变量,属于类,(定义在方法内部就属于方法了,所以是错误的)

    2.eat方法的调用,需要对应的引用来调用。但如果可以定义static的变量,类Person就可以调用,所以两者直接是矛盾的,eat需要对应的引用来调用。size只需要类就可以调用。所以普通的方法内部, 不能够定义静态的变量。

    静态的方法也不可以定义静态变量

    Java类和对象原理示例分析

    static定义的变量是类变量,属于类,(定义在方法内部就属于方法了,这样是做不到的,所以是错误的)

    总结:静态的成员变量是不可以在方法中定义的 

    普通方法里面是可以调用静态方法的

    class Person{
     
        public String name;
        public int age;
     
        public static int count;
     
        public void eat(){
     
            System.out.println(name+" 正在吃饭");
        }
        public void sleep(){
            staticFunc();
            System.out.println(name+" 正在睡觉");
        }
        public static void staticFunc(){
            System.out.println("static::func");
        }
     
    }
     
    public class TestDemo {
        public static void main(String[] args) {
            Person person = new Person();
             person.eat();
             person.sleep();
        }
    }

     打印结果:

    Java类和对象原理示例分析

     静态方法内部不能调用普通方法

    Java类和对象原理示例分析

     静态内部不可以调用普通方法,因为静态的方法不依赖于对象, 通过类名就可以调用,但没有对象普通方法没法调用。

    main函数为什么是静态的

    Java类和对象原理示例分析

     一个引用不可以同时指向多个对象

    Java类和对象原理示例分析

    引用肯定是在栈上吗?肯定不是

    Java类和对象原理示例分析

     看绿线,画图解析

    Java类和对象原理示例分析

    小写的person属于TestDemo这个类的成员变量 

    final修饰

    Java类和对象原理示例分析

    private实现封装

    private/ public 这两个关键字表示 "访问权限控制"

    被 public 修饰的成员变量或者成员方法, 可以直接被类的调用者使用.

    被 private 修饰的成员变量或者成员方法, 不能被类的调用者使用.

    Java类和对象原理示例分析

    提供接口

    Java类和对象原理示例分析

    Java类和对象原理示例分析

     打印结果:

    Java类和对象原理示例分析

    this代表当前对象的引用

    Java类和对象原理示例分析

    构造方法

    构造方法:方法名和类名是相同的,且构造方法比较特殊,没有返回值

    构造方法是干嘛的?我们需要知道一个对象的产生(对象的实例化) 分为几步

    1.为对象分配内存

    2.调用合适的构造方法

    Java类和对象原理示例分析

    Java类和对象原理示例分析

    这就是一个构造方法

    前面的访问修饰符可以是public,

    Java类和对象原理示例分析

     调用构造方法:

    Java类和对象原理示例分析

    打印结果:

    Java类和对象原理示例分析

    Java类和对象原理示例分析

    不带参数和带一个参数和带两个参数的构造方法

    Java类和对象原理示例分析

     调用构造方法:

    Java类和对象原理示例分析

    Java类和对象原理示例分析

    this的区别

    Java类和对象原理示例分析

    第一种:

    Java类和对象原理示例分析

     第二种:

    Java类和对象原理示例分析

    代表当前对象的eat方法

     第三种:

    调用不带参数的构造方法,

    Java类和对象原理示例分析

    Java类和对象原理示例分析

     打印结果 :

    Java类和对象原理示例分析

    this函数必须放到第一行,只能存放在构造函数当中

    Java类和对象原理示例分析

    代码块

    Java类和对象原理示例分析

    本地代码块:

    两个括号

    Java类和对象原理示例分析

     实例代码块和静态代码块:

    Java类和对象原理示例分析

    静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的。 静态代码块执行完毕后, 实例代码块(构造块)执行,再然后是构造函数执行。 

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Java
    相关文章 更多
    Java单元测试入门:使用JUnit 5编写第一个测试用例
    Java单元测试入门:使用JUnit 5编写第一个测试用例

    面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

    Java变量未初始化报错解析:局部变量与成员变量默认值差异
    Java变量未初始化报错解析:局部变量与成员变量默认值差异

    深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

    详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

    Java中final与static final常量的定义及初始化规则
    Java中final与static final常量的定义及初始化规则

    深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

    Java抽象方法与接口方法的区别及选型建议
    Java抽象方法与接口方法的区别及选型建议

    深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

    Java实现HTTP请求与JSON解析的完整代码示例
    Java实现HTTP请求与JSON解析的完整代码示例

    本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

    Java递归出现StackOverflowError的原因分析及栈空间优化方案
    Java递归出现StackOverflowError的原因分析及栈空间优化方案

    详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

    Java空指针异常(NPE)的代码排查与修复实例
    Java空指针异常(NPE)的代码排查与修复实例

    针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。