重学Java 10 面向对象

正是风雨欲来的时候,火却越烧越旺了     

                                          ——24.1.20

重点

1.为何使用面向对象思想编程

2.如何使用面向对象思想编程

3.何时使用面向对象思想编程

4.利用代码去描述世间万物的分类

5.在一个类中访问另外一个类中的成员 -> new对象

6.成员变量和局部变量的区别

一、面向对象的介绍

1.面向过程:自己的事情自己干,代表语言:C语言

                eg、洗衣服:每一步都自己干 -> 找个盆,加水,放洗衣粉,找搓衣板,开始洗衣

2.面向对象:自己的事情别人帮忙去做,代表语言:Java语言

                eg、洗衣服:自己的事情别人干 -> 全自动洗衣机

3.使用面向对象思想编程:方便快捷

                很多功能都已经实现好了,只需要将其拿来使用即可,简化了我们自己的编写过程,减少了代码量

4.什么时候使用面向对象思想编程:

                调用别人的功能时

                在一个类中想使用别的类中的思想时,就使用面向对象思想编程

                至于使用的代码功能细节,我们不关心,我们只需要知道如何使用即可

5.如何使用面向对象思想编程:

        ①new,new. -> 点代表的是调用

        ②特殊:如果调用的成员带static关键字,我们直接使用类名点即可

二、类和对象

2.1  类(实体类)_class

1.测试类:带main方法的类,主要是运行代码的

2.实体类:是一类事物的抽象表示形式

                 世间万物的分类:比如:犬类、人类、猫类、鼠标类

        组成部分:

                1.属性(成员变量):这一类事物有什么

                        ①定义位置:类中方法外

                        ②作用范围:作用于当前类

                        ③定义格式:数据类型 变量名

                        ④默认值:

                                整数:0        小数:0.0        字符:'\U0000‘        布尔:false        引用:null

                2.行为(成员方法):这一类的事物能干嘛

                        只需要将方法中所学的static干掉,其他的都一样

只需要将某个分类的属性和行为描述出来,就可以描述这个类

案例

人类

public class Demo65Object02Person {//属性 -> 成员变量String name;int age;//行为 -> 成员方法public void eat(){System.out.println("人要吃饭");}public void drink(){System.out.println("人要喝水");}
}

动物类

public class Demo66Object03Animal {String kind;//品种String color;//颜色public void eat(){System.out.println("动物要吃东西");}public void sleep(){System.out.println("动物要睡觉");}

小明类

public class Demo67Object04Phone {//属性String brand;String color;int price;//行为public void call(String name){System.out.println("给"+name+"打电话");}public String message(){return "给小明发短信";}

2.2 对象

1.概述:一类事物的具体体现

2.使用:

        ①导包

                如果两个类在同一个包下,想要使用对方的成员不需要导包

                如果两个类不在同一个包下,想要使用对方的成员需要导包

                特殊包:java.lang -> 使用lang包下的类,不需要导包 -> String

                注:在学习四种权限修饰符前,尽量让两个类在同一个包下

        ②创建对象:想要使用哪个类中的成员,就new哪个类的对象

                类名 对象名 = new 类名() -> 如:Person person = new Person();

                                                                         Animal animal = new Animal();

        ③调用成员(成员变量、成员方法) -> 想要使用哪个类中的成员,便用哪个类的对象去点哪个成员

                对象名.成员变量名 = 值

                对象名.方法名() -> 调用的是无参无返回值的方法

                对象名.方法名(实参)-> 调用的是无参有返回值的方法

                数据类型 变量名 = 对象名.方法名() -> 调用的是无参有返回值的方法

                数据类型 变量名 = 对象名.方法名(实参) -> 调用的是有参有返回值的方法

示例

public class Demo65Object02Person {//属性 -> 成员变量String name;int age;//行为 -> 成员方法public void eat(){System.out.println("人要吃饭");}public void drink(){System.out.println("人要喝水");}
}public class Demo66Object03Animal {String kind;//品种String color;//颜色public void eat(){System.out.println("动物要吃东西");}public void sleep(){System.out.println("动物要睡觉");}
}public class Demo67Object04Phone {//属性String brand;String color;int price;//行为public void call(String name){System.out.println("给"+name+"打电话");}public String message(){return "给小明发短信";}
}public static void main(String[] args) {Demo65Object02Person p = new Demo65Object02Person();p.age = 21;p.name = "小明";p.drink();p.eat();System.out.println(p.age);System.out.println(p.name);System.out.println("—————————————————————————————————————————————");Demo66Object03Animal a = new Demo66Object03Animal();a.color = "白色";a.kind = "金毛巡回犬";a.sleep();a.eat();System.out.println(a.color);System.out.println(a.kind);System.out.println("————————————————————————————————————————————");Demo67Object04Phone ph = new Demo67Object04Phone();ph.brand = "oppo findx3pro";ph.color = "white";ph.price = 5799;ph.message();ph.call("张三");System.out.println(ph.brand);System.out.println(ph.color);System.out.println(ph.price);ph.call("小明");ph.message();}

练习

用代码描述一个手机类,在测试类中为手机类中的属性赋值,并且调用手机类中的功能

public class Demo67Object04Phone {//属性String brand;String color;int price;//行为public void call(String name){System.out.println("给"+name+"打电话");}public String message(){return "给小明发短信";}
}public static void main(String[] args) {Demo67Object04Phone phone = new Demo67Object04Phone();//手机类类名phone.brand = "OPPO Findx3Pro";phone.price = 5599;phone.color = "白色";System.out.println(phone.brand);System.out.println(phone.price);System.out.println(phone.color);phone.call("小明");phone.message();
}

2.3.匿名对象的使用

1.int i = 10;

        ①int:是数据的类型

        ②i:变量名

        ③等号右边的10:真正的数据

2.Person p = new Person()

        ①等号左边的Person:对象的类型,好比是int

        ②p:对象名

        ③等号右边的new Person:真正的数据,是一个Person对象,将这个对象真正创建出来了

1.所谓的匿名对象,其实就是没有等号左边的部分,只有等号右边的部分(对象)

2.使用:

        new 对象().成员

3.注意:

        ①如果只想单纯的调用一个方法,让方法执行,我们可以考虑匿名对象

        ②但是如果涉及到赋值,千万不要使用匿名对象

示例

public class Demo65Object02Person {//属性 -> 成员变量String name;int age;//行为 -> 成员方法public void eat(){System.out.println("人要吃饭");}public void drink(){System.out.println("人要喝水");}
}public class Demo70Object07PersonNoName {public static void main(String[] args) {//原始方式Demo65Object02Person p = new Demo65Object02Person();p.name = "小明";System.out.println(p.name);p.eat();System.out.println();//匿名对象方式new Demo65Object02Person().eat();}
}

        //匿名对象方式:new Demo65Object02Person().eat();new Demo65Object02Person().name = "小红";System.out.println(new Demo65Object02Person().name);    //null//无法输出

涉及到赋值,千万不要使用匿名对象

三、对象的内存解析

1.一个对象的内存图

2.两个对象的内存图

phone1和phone2都是新new出来的对象,所以在堆内存中开辟了两个不同的空间,修改自己空间中的数据不会影响其他空间中的数据

3.两个对象指向同一个空间的内存图

    

phone2是phone1给的,phone1在内存中保存的是地址值,所以此时phone2和phone1的地址值一样,操作同一片空间中的数据,所以修改一个对象的数据会影响另一个对象

四、成员变量和局部变量的区别

1.定义位置不同*

        成员变量:类中方法外

        局部变量:方法之中或者参数位置

2.初始化值不同*

        成员变量:有默认值,不用手动赋值,可以直接使用

        局部变量:没有默认值,必须手动先赋值,才能使用

3.作用范围不同*

        成员变量:作用于整个类

        局部变量:只作用于自己所在的方法,其他方法用不了

4.内存位置不同

        成员变量:在堆中,跟着对象走

        局部变量:在栈中,跟着方法走

5.生命周期不同

        成员变量:随着对象的产生而产生,随着对象的消失而消失

        局部变量:随着方法的调用而产生,随着方法的调用完毕而消失

五、练习

定义一个类MyDate,属性有year、month、day

        在定义一个Citizen(公民类),属性有name(String类型),birthday(MyDate类型),idcard(string类型),为这三个属性赋值,然后将值取出

自定义生日类型

//自定义生日类型
public class Demo71Object08MyDate {int year;int month;int day;
}

自定义公民类 

//自定义公民类
public class Demo72Object09Citizen {//姓名String name;        //默认值null// 生日 Mydate类型// Mydate属于自定义类型(引用数据类型)// 这种类型要操作之前,必须要赋值// 这种自定义对象,需要new对象赋值Demo71Object08MyDate birthday;      //默认值null//身份证String idcard;      //默认值null
}

主函数

    public static void main(String[] args) {Demo72Object09Citizen citizen = new Demo72Object09Citizen();citizen.name = "张三";citizen.idcard = "04214047";citizen.birthday = new Demo71Object08MyDate();/*Stringbuildercitizen.birthday获取的是Mydate对象再去点year获取的是Mydate对象中的year链式调用*/citizen.birthday.year = 2002;citizen.birthday.month = 11;citizen.birthday.day = 4;System.out.println(citizen.name + "," + citizen.birthday.year + "年"+ citizen.birthday.month + "月" + citizen.birthday.day + "日 " + "学号:" + citizen.idcard);}

 

运行结果

给自定义的类型(引用数据类型)赋值,需要new对象(String比较特殊,可以直接=赋值)

六、总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/417892.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue流程图

效果图 组件 <template><div class"processBox" v-if"list.length"><div class"childs"><div class"child" v-for"(item,index) in list" :key"item.id -child-index"><div class&q…

计算机导论06-人机交互

文章目录 人机交互基础人机交互概述人机交互及其发展人机交互方式人机界面 新型人机交互技术显示屏技术跟踪与识别&#xff08;技术&#xff09;脑-机接口 多媒体技术多媒体技术基础多媒体的概念多媒体技术及其特性多媒体技术的应用多媒体技术发展趋势 多媒体应用技术文字&…

Codeforces Round 803 (Div. 2) E. PermutationForces II(思维题 位置序列)

题目 给定长为n(n<2e5)的两个序列a和b&#xff0c; a为n的一个排列&#xff0c; b也为n的一个排列&#xff0c;但有一些位置被-1替换了&#xff0c;保证没被替换的位置在[1,n]之间且两两不同 你有一个距离最大限制s&#xff0c;你可以执行n次操作&#xff0c; 第i次操作…

详解Python web框架到底是怎么来的?

前言 咱都知道软件开发的架构有两种&#xff0c;分别是C/S架构与B/S架构&#xff0c;本质上都是借助socket实现网络通信&#xff0c;因此Django作为一个web框架本质上也是一个socket服务端&#xff0c;浏览器则是客户端&#xff0c;我们可以自己实现简易的web框架来更好的理解…

一篇文章讲透python双层独立循环(--附案例(python如何实现循环存放文件)

看过电视剧《开端》的都知道&#xff0c;处在循环中是多么让人崩溃的事情&#xff0c;循环可以制造问题&#xff0c;但循环同样可以解决问题。现在我们要讲的这个案例就是利用循环来实现的。 案例说明&#xff1a; 有一个excel文档&#xff0c;一列记录的是文件名&#xff0c;…

2.1.4-相关性分析

跳转到根目录&#xff1a;知行合一&#xff1a;投资篇 已完成&#xff1a; 1、投资&技术   1.1.1 投资-编程基础-numpy   1.1.2 投资-编程基础-pandas   1.2 金融数据处理   1.3 金融数据可视化 2、投资方法论   2.1.1 预期年化收益率   2.1.2 一个关于yaxb的…

高级架构师是如何设计一个系统的?

架构师如何设计系统&#xff1f; 系统拆分 通过DDD领域模型&#xff0c;对服务进行拆分&#xff0c;将一个系统拆分为多个子系统&#xff0c;做成SpringCloud的微服务。微服务设计时要尽可能做到少扇出&#xff0c;多扇入&#xff0c;根据服务器的承载&#xff0c;进行客户端负…

sqli-labs关卡25(基于get提交的过滤and和or的联合注入)

文章目录 前言一、回顾上一关知识点二、靶场第二十五关通关思路1、判断注入点2、爆字段个数3、爆显位位置4、爆数据库名5、爆数据库表名6、爆数据库列名7、爆数据库数据 总结 前言 此文章只用于学习和反思巩固sql注入知识&#xff0c;禁止用于做非法攻击。注意靶场是可以练习的…

无忧秘书智脑:轻松驾驭“看图说话”功能,职场沟通更高效

在现代职场中&#xff0c;有效的沟通是提升工作效率的关键。然而&#xff0c;有时候我们面对一张图片或图表&#xff0c;却难以用言语准确表达其中的信息。这时&#xff0c;无忧秘书智脑的“看图说话”功能就派上了用场。这篇文章将手把手教你如何使用这一功能&#xff0c;以及…

【论文笔记】A Survey on 3D Gaussian Splatting

原文链接&#xff1a;https://arxiv.org/abs/2401.03890 1. 引言 NeRF在计算效率和可控性上具有局限性&#xff0c;这导致了3D高斯溅射&#xff08;3D GS&#xff09;的出现&#xff0c;重新定义了场景表达和渲染。 3D GS通过引入新的场景表达技术&#xff0c;用大量的3D高斯…

【Java】后端开发语言Java和C#,两者对比注解和属性的区别以及作用

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《Java》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…

HBase学习五:运维排障

1、负载均衡 1.1 Rgion迁移 在当前的HBase版本中,Region迁移虽然是一个轻量级操作,但实现逻辑依然比较复杂,≈复杂性主要表现在两个方面:其一,Region迁移过程涉及多种状态的改变;其二,迁移过程中涉及Master、ZooKeeper(ZK)以及RegionServer等多个组件的相互协调。 …