类 和 对象

目录

1、面向对象编程

2、面向对象编程

2.1面向对象编程特征

 

 3、类和对象的概念

3.1类的定义

3.11属性

3.12方法

3.13重载 

3.14递归

 

 3.13返回值return

 3.2对象

 3.2.1对象组合

4、jvm内主要三块内存空间

 5、参数传值


1、面向对象编程


面向过程:关注的是步骤中的因果关系,一个因果关系断链整个程序废掉(蛋炒饭)                  

步骤和步骤之间因为因果关系构成模块 ,模块和模块之间因为因果关系构成系统。一个因果关系断链整个程序废掉
     优点:对于业务逻辑比较简单的程序,可以达到快速开发,前期投入成本低

     缺点:难以解决非常 复杂的业务逻辑,另外面向过程的方式导致软件之间的耦合度非常高,只要其中一环出现问题,整个系统会受到影响导致软件的扩展力差另外由于没有独立个体的概念,所以无法达到组件的复用
 

2、面向对象编程



面向对象: 关注的是独立的个体,这个个体能为我做什么 
一个抽烟的场景你可能会想到:一个抽烟的人,一个打火机,一包烟,抽烟的地方。这几个对象放在一起就构成了这个抽烟的场景。
也可以给对象进行扩展,每一个对象都是独立的,关注是对象的功能 
优点:耦合度低扩展力强。更容易解决现实业务中更复杂的业务逻辑。组件复用性强
缺点:前期投入成本较高,需要进行独立体的抽取,大量的系统分析与设计 

2.1面向对象编程特征


耦合度:关联强度

低耦合高扩展力 面向对象能够实现
面向对象的三大特征
封装
继承
多态
所有面向对象的编程语言都有这三大特征

采用面向对象的方式开发一个软件,生命周期当中(整个生命周期当中贯穿使用OO面向对象方式)

面向对象的分析OOA
面向对象的设计OOD
面向对象的编程OOP

 3、类和对象的概念


java程序员是虚拟和现实之间的桥梁
对象是存在的,共同特征称为类



什么是类?
类在现实世界中是不存在的,是一个模板,是一个概念,是人类大脑思考抽象的结果
类代表一类事物
在现实世界中对象a和对象b之间具有共同的特征,进行抽象总结出一个模板,这个模板称为称为类



什么是对象?
对象是实际存在的个体,现实世界当中实际存在


描述一下整个程序开发的过程:
*程序员先观察现实世界,从现实世界中寻找对象
*寻找n个对象后,所以的对象都有一个共同的特征
*程序员在大脑中形成一个模板(类)
*java程序员可以通过java代码来表示一个类
*java程序中有了类的定义
*然后通过类就可以创建对象
*有了对象之后,可以让对象直接协作起来形成一个系统

*类————[实例化]——对象
*对象又被称为实例
*对象————【抽象】——类


*重点:
类描述的是对象的共同特征
共同特征例如:身高特征
这个身高特征在访问的时候,必须先创建对象,通过对象去访问这个特征
特征具体到某个类上之后,值不同。有的对象身高1.8,有的对象身高1.6
一个类主要描述的是什么信息:特征+动作
特征信息:名字,身高,性别,年龄..
动作信息:吃,唱歌,跳舞,学习

3.1类的定义


类{属性://描述对象的特征信息方法://描述对象的动作信息
}
类的定义,从这里开始写代码语法结构:
【修饰符列表】class 类名 {属性:方法:
}学生类:描述所有学生对象的共同特征学生对象有哪些状态信息:学号【int】名字【String】性别【性别是一个属性,是一个数据,是数据就应该有数据类型】...学生对象有哪些动作信息:吃饭睡觉学习玩唱歌
public class Student {//Student是一个类,代表了所有的学生对象,是一个学生模板//属性描述的是对象的状态信息,通常采用变量的方式定义//学号 int oo;// 姓名String name;//年龄int  age;//方法描述的是对象的状态信息//当前例子只描述属性,不描述方法

3.11属性

属性通常采用一个变量的形式来完成
int oo;
int age;
String name;
String address;
java语言中包含两种类型:
基本数据类型
boolean
char
byte
short
int
long 
float
double        
引用数据类型
String.class   sun公司提供
student.class sun公司提供
User.class    程序员自己编写
product.class 程序员自己编写
Customter.class 程序员自己编写
......

3.12方法

//以下这个程序不使用方法,分析程序存在那些缺点public class MethodTest{public static void main (String [] args) {//编写10+20=30int a=10;int b=20;int c=a+b;System.out.println(a+"+"+b+"="+c);//编写888+66的和int x=888;int y=666;int z=x+y;System.out.println(x+"+"+y+"="+z);}}//以上这个需求为一个需求,计算两个int类型的和,功能相同,只不过每次参与的数据不同//缺点:代码没有得到重复的利用//改善:某个功能代码只写一遍,只给这个功能传入具体的数据,提高代码重复性public class MethodTest02{public static void main (String [] args){MethodTest02.sumInt(10,20);MethodTest02.sumInt(888,666);}public static void sunInt(int a,int b){int c=a+b;System.out.println(a+"+"+b+"="+c);}}

/*方法的本质是什么?
    1.方法是一段代码片段,并且这个代码片段可以完成某个特定的功能,并且可以重复利用
    2.方法定义在类体当中,在一个类体当中可以定义多个方法,方法的编写顺序没有先后
    3.方法体中不能定义方法
    4.方法体由java语句组成,遵守自上而下运行
    5.方法怎么样定义:【修饰符列表】返回值类型 方法名 (形式参数列表){}
       【修饰符列表】可有可无
       返回值类型:一个方法完成某个特定的功能后,大多数需要返回值最终执行结果,执行结果可能是一个具体的数据,这个就是返回值
       怎么写?
       return 值;
       返回值数据类型和方法的数据类型一致,返回值类型是void的时候不能书写返回值
       方法名:首字母小写,见名知意,符合标识符规范
       形参:局部变量。int a,double b,String s。形参中起决定作用的的数据类型,形参的名字就是局部变量的名字
       方法在调用的时候,实际给这个方法传递的真实数据称为:实际参数,简称实参
       实参与形参
       1.数量相同
       2.类型对应相同
    6.方法怎么调用?
    方法只是定义而不调用是不会执行的,只有在调用的时候才会执行
    静态方法:类名.方法名(实参)
    实例方法:引用.方法名(实参)
    */

//方法执行得时候内存在哪里分配?执行代码片段在哪里?
//方法代码片段属于.class字节码文件的一部分。字节码文件在类加载的时候将其放进了方法区当中,所以JVM三块内存中方法区内存最先有数据
//存放的代码片段虽然在方法区内中只有一份,但可以重复调用
//每次调用的时候,需要给方法分配独立的活动空间,在栈内存中分配方法所运行的所属内存空间
//方法在调用的瞬间会给方法分配独立的内存空间,方法只定义不调用不会给该方法分配所属的内存空间
//在栈内存中分配,此时发生压栈动作,方法执行结束后,会给方法分配的内存空间全部释放,此时发生弹栈动作
//压栈:分配内存。弹栈:释放内存
//局部变量在方法体中声明,局部变量运行阶段内存在栈中分配
/*

	public class MethodTest06{public static void main(String [] args){MethodTest06.m();m();//省略类名,默认从当前类中找方法,若在当前类中找方法找不到则不能省略}public static void m(){System.out.println("HelloWorld");}}//定义一个方法该方法可以计算两个int类型数据的商,要求最终结果返回给调用者public class MethodTest08{public static void main(String [] args) {//调用方法,这里没有接收这个方法的返回值,采用变量方式接收divde(10,3);	//变量的类型要求和返回值的数据类型相同(自动类型转换也可以)int a=dvide(10,3);//在调用方法的时候主方法暂停,进入调用的方法中去,待完成该方法后
再去执行主方法内容System.out.println(a);//这样写也行System.out.println(divde(10,3));}public static int dvide(int x,int y){return x/y;}}
public class Ex{public static void main(String [] args) {sum(10l,20l);sum(10,20);sum((long)2.9,(long)2.0);A.doOther();//在主程序访问方法不是该类的时候不能省略类名}public static void sum(long a,long b) {System.out.println(a+"+"+b+"="+(a+b));}}
class A{public static void doOther() {System.out.println("你好");}
}

3.13重载 


数据处理麻烦--->方法,方法之间相似--->重载‘ 方法重载:多个方法之间相似,给他们起一个相同方法名,在调用的区别是依靠的是参数的数据类型
什么条件下满足方法重载1.在同一个类中2.方法名相同3.参数列表不同:类型不同 顺序不同 数量不同public static void m(){}
pubiic static void m(int a){}public static void m2(int a,double b){}
public static void m2(double a,int b){}public static void m3(int a){}
public static void m3(double a){}public static void m4(int a,int b){}
public static void m4(int b,int a){}
//****方法重载只和方法名,参数列表有关

3.14递归

public class RecursionTest01{public static void main(String [] args) {System.out.println("main begin");doSome();}public static void doSome(){System.out.println("dosome begin");doSome();//方法递归,System.out.println("doSome over");}
}
/*
main begin
dosome begin
dosome begin
...*/
//什么是递归?
//方法自身调用自身,递归是很耗费内存的

 3.13返回值return

深入return语句
1.带有return关键字的java语句只要执行,所在的方法执行结束
2.在同一个作用域中,return语句下面不能编写任何代码,因为这些代码永远执行不到,编译报错
3.在返回值是void方法中,使用return语句是为了结束当前方法
 

 3.2对象

什么是对象?
new 运算符在堆内存中开辟的内存空间,称为对象
什么是引用?
引用是一个变量,只不过这个变量保存了某一个java对象的内存地址
java语言中程序员只能通过引用去访问堆内存的数据


 

//对象
/*no,age,name这个实例变量不能采用类名的方式直接访问,no,age,name是实例变量,对象级别的变量,变量存储在java对象的内部,必须先有对象,通过对象才能访问no,age,name这个实例变量
*/public class OOtest
{public static void main(String [] args) {Student s =new Student();//通过一个类可以实例化n个对象//语法格式:new 类名();new 是运算符,他的作用是创建对象,在jvm堆内存中开辟新的内存空间//该内存空间有一个地址,该地址赋值给s,称为引用}
}
class Student
{int no;int age;String name;
}

 3.2.1对象组合

//对象组合
public class OoTest04
{public static void main ( String [] args) {//创建丈夫对象Husband huang =new Husband();huang.name="黄晓明";//创建妻子对象Wife bady=new Wife();bady.name="bady";//结婚,能通过妻子找到丈夫,能通过丈夫找到妻子haung.w=bady;bady.h=huang;System.out.println(huang.name+"的妻子名字叫:"+bady.name);System.out.println(bady.name+"的丈夫名字叫:"+haung.name);}}
//丈夫类
public class Husband
{String name;//丈夫对象当中包含妻子引用wife w;
}
//妻子类
public class Wife
{String name;//妻子对象当中含有丈夫引用Husband h;}

4、jvm内主要三块内存空间


1.JVM主要包括三块内存空间
方法区内存,堆内存,栈内存
2.一个线程一个堆内存
3.方法不调用不分配所属的内存空间,调用的时候会在栈内存中分配,称为压栈。方法执行结束之后,该方法所属的内存空间释放,称为弹栈
4.栈中主要存储的是方法体当中的局部变量
5.方法的代码片段以及整个类的代码片段都会存储在方法区内存当中,在类加载的时候这些代码会载入
6.在程序执行过程中使用new运算符创建java对象存储在堆内存当中,对象内部有实例变量,所以实例变量存储在堆内存当中
7.变量分类:
           局部变量(方法体中声明)
           成员变量(类体内,方法体外):实例变量,静态变量
8.静态变量存储在方法区内存
9.三块内存当中变化最频繁的是栈内存,最先有数据的是方法区内存,垃圾回收处理器主要针对的是堆内存
/*
垃圾回收器[自动回收垃圾机制,GC机制]什么时候考虑将某个java对象内存回收?
当堆内存当中java对象成为垃圾数据的时候
什么时候堆内存中的java对象成为垃圾数据?
没有引用指向他们的时候
这个对象无法访问,因为访问对象只能通过引用的方式。
*/

public class OoTest05
{public static void main(String [] args) {Customer c=new Customer();System.out.println(c.id);c=pull;/*System.out.println(c.id);报错空引用访问实例相关数据,编译可以通过,但运行会出现空指针异常
*/}

 5、参数传值

//参数传值
public class Test02
{public static void main (String [] args) {User u =new User(20);add(u);/传递的是u变量中保存的值,该值是java对象的内存地址System.out.println("main-->"+u.age);//21}public static void add(User u){u.age++;System.out.println("add-->"+u.age);//21}
}
class User
{int age;public User(int age){this.age=age;
}
//方法在调用的时候涉及参数传值问题,传递的时候,java值遵循一种就是将变量中保存的“值”传递过去。
//只不过这个值有时候是字面值,有时候是内存地址。

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

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

相关文章

webpack笔记二

文章目录 背景拆分环境清除上次构建产物插件:clean-webpack-plugin合并配置文件插件:webpack-merge实时更新和预览效果:webpack-dev-server babel配置参考 背景 webpack笔记一 在前面的学习,完成了webpack的基本配置&#xff0c…

【云原生】k8s之包管理器Helm

前言 每个成功的软件平台都有一个优秀的打包系统,比如Debian、Ubuntu 的 apt,RedHat、CentOS 的 yum。Helm 则是 Kubernetes上 的包管理器,方便我们更好的管理应用。 1.Helm的相关知识 1.1 Helm的简介与了解 Helm本质就是让K8s的应用管理&…

Profibus DP主站转Modbus TCP网关profibus从站地址范围

远创智控YC-DPM-TCP网关。这款产品在Profibus总线侧实现了主站功能,在以太网侧实现了ModbusTcp服务器功能,为我们的工业自动化网络带来了全新的可能。 远创智控YC-DPM-TCP网关是如何实现这些功能的呢?首先,让我们来看看它的Profib…

Linux 学习记录52(ARM篇)

Linux 学习记录52(ARM篇) 本文目录 Linux 学习记录52(ARM篇)一、汇编语言相关语法1. 汇编语言的组成部分2. 汇编指令的类型3. 汇编指令的使用格式 二、基本数据处理指令1. 数据搬移指令(1. 格式(2. 指令码类型(3. 使用示例 2. 立即数(1. 一条指令的组成 3. 移位操作指令(1. 格式…

Meta 最新发布 LLaMA 2(允许商业化)

2023年7月18日,Meta 发布了LLaMA 2,包含7B,13B,70B三种参数(34B暂时还未发布)。 官方: https://ai.meta.com/llama/ 论文:Llama 2: Open Foundation and Fine-Tuned Chat Models 模型…

网络编程——RPC与HTTP基本介绍、历史追溯、主流应用场景、对比分析、为什么还需要使用RPC

一、HTTP与RPC基本介绍 HTTP协议(Hyper Text Transfer Protocol)超文本传输协议: 一个用于在网络上交换信息的标准协议,它定义了客户端(例如浏览器)和服务器之间的通信方式。如平时上网在浏览器上敲个网址url就能访问网页&#x…

关于电脑显示器屏幕看不出灰色,灰色和白色几乎一样无法区分,色彩调整方法

问题: 电脑显示器屏幕看不出灰色,灰色和白色几乎一样无法区分。白色和灰色有色差。 解决方法: 打开“控制面板” ->“色彩管理” ->“高级” ->“校正显示器” 在下一步调节中调成中间这一个实例的样子就可以了 进行微调&#x…

如何用3D格式转换工具HOOPS Exchange读取颜色和材料信息?

作为应用程序开发人员,非常希望导入部件的图形表示与它们在创作软件中的外观尽可能接近。外观可以在每个B-Rep面的基础上指定,而且,通过装配层次结构的特定路径可以在视觉外观上赋予父/子覆盖。HOOPS ExchangeHOOPS Exchange可捕获有关来自各…

亚信科技荣任「DBL电信行业工作组」副组长单位,AntDB数据库连年入选《中国数据库产品图谱》

日前,“2023可信数据库发展大会”在京圆满召开。亚信科技凭借自研的电信级核心交易数据库AntDB在通信行业15年的技术积累和行业贡献,成功当选为数据库应用创新实验室(DBL)电信行业工作组副组长单位。AntDB数据库连续两年入选《全球…

11、动手学深度学习——语言模型和数据集:代码详解

我们了解了如何将文本数据映射为词元,以及将这些词元可以视为一系列离散的观测,例如单词或字符。 假设长度为 T T T的文本序列中的词元依次为 x 1 , x 2 , … , x T x_1, x_2, \ldots, x_T x1​,x2​,…,xT​。于是, x t x_t xt​&#xff08…

Type-C带充电的OTG转接器方案 LDR6028

近些年随着社会生活水平提高,每个人的的电子设备逐渐的多了起来,各大品牌都在发售自家品牌的全家桶。手机、平板、笔记本电脑、智能手表、无线耳机、任天堂Switch、索尼PS5等电子设备一种不落。 那么多的电子设备基本来说都是需要充电,比如手…

求出0~100000之间的所有“水仙花数”并输出

求出0~100000之间的所有“水仙花数”并输出。 “水仙花数”是指一个N位数,其各位数字的n次方之和正好等于该数本身。 如:1531^3 5^3 3^3 , 则153是一个“水仙花数” 先来了解一下水仙花数的概念: 水仙花数只是自幂数的一种,严…