java类与对象_Java类与对象
类与对象
1,面向对象编程简介
Java语言最大的特点在于面向对象的编程设计,并且面向对象的编程设计也在由于Java自身的发展而不断发展。面向过程编程(C语言)、函数式编程(Scala)、面向对象编程(Java、C++、Python、Ruby)。
所谓的面向过程指的是面对一个问题的解决方案,更多的情况下是不会做出重用的设计思考的,而面向对象的主要设计形式为模块化设计,并且可以进行重用配置。在整个的面向对象的设计里面更多情况下考虑的是标准,在使用的时候根据标准进行拼装,而对于面向对象设计有三个主要的特征:
·封装性:内部的操作对外部而言不可见,当内部的操作都不可直接使用的时候才是安全的;
·继承性:在已有结构的基础上继续进行功能的扩充;
·多态性:是在继承性的基础上扩充而来的概念,指的是类型的转换处理。
在进行面向对象程序的开发之中一般还有三个步骤:
·OOA:面向对象分析;
·OOD:面向对象设计;
·OOP:面向对象编程;
2,类与对象简介
类是对一类事物的共性的抽象概念,而对象描述的是一个具体的产物。例如:现在将我和另外一个人进行比较时可以立刻区分出我还有别人。
我和其他的人都一样,都是一个个具体可以使用的个体产物,但是这些个体都有一些共性的标志:人。但是人和人有各不相同,所谓人和人之间的不同依靠的是我们各自的属性,每一个属性的集合就构成了一个对象,但是所有鄂属性都应该是群体的定义,而群体的定义就形成了一个类。
类是一个模板,而对象才是类可以使用的实例,先有类再有对象。
在类之中一般都会有两个组成:
·成员属性(Filed):有些时候为了简化称其为属性;
|-一个人的年龄、姓名都是不同的,所以这些对于整体来讲就称为属性;
·操作方法(Method):定义对象具有的处理行为;
|-这个人可以唱歌、跳舞、游泳、运动;
3,类与对象的定义及使用
在Java之中类是一个独立的结构体,所以需要使用class来进行定义,而在类之中主要由属性和方法所组成,那么属性就是一个个具体的变量,方法就是可以重复执行的代码。
产生对象的两种方式:
①声明并且实例化:类名称 对象名称 = new类名称();
②分步骤完成:
|-声明对象:类对象 对象名称=null;
|-实例化对象:对象名称=new类名称();
4,对象内存分析
Java之中类属于引用数据类型,引用数据类型最大的困难之处在于要进行内存的管理,同时进行操作的时候也会发生有内存关系的变化。
如果要进行内存的分析,那么首先给出两块最为常见的内存空间:
·堆内存:保存的是对象的具体信息,在程序之中堆内存空间的开辟是通过new完成的;
·栈内存:保存的是一块堆内存的地址,即:通过地址找到堆内存,而后找到对象内容;
栈溢出StackOverFlow
需要特别引起注意的是,所有的对象在调用类中的属性或方法的时候必须要实例化完成后才可以执行。
·范例:错误的代码示范
1 classPerson{2 String name;3 intage;4 public voidtell(){5 System.out.println("姓名:"+this.name+",年龄:"+this.age);6 }7 }8 public classMain {9 public static voidmain(String[] args) {10 Person person = null;//声明对象11 //person=new Person();//实例化对象
12 person.name="万雨";13 person.age=25;14 person.tell();15 }16 }
1 Exception in thread "main"java.lang.NullPointerException2
3 at Main.main(Main.java:12)
NullPointerException:空指向异常,没有在堆内存开辟后所产生的问题,并且只有引用数据存在此类问题。整个代码之中只是声明了对象,但是并没有为对象进行实例化,所以此时无法调用。
5,对象引用分析
类本身属于引用数据类型,既然是引用数据类型,那么就牵扯到内存的引用传递,所谓的引用传递的本质:同一块的堆内存空间可以被不同的栈内存引用,也可以更换指向。
这个时候引用传递是直接在主方法之中定义的,也可以通过方法实现引用传递处理。
引用传递可以发生在方法上,这个时候一定要观察方法的类型,同时也要观察方法的执行过程。
6,引用与垃圾产生分析
经过一系列的分析之后已经确定,所有的引用传递的本质就是一场堆内存的调戏游戏。但是对于引用传递不当,那么也会造成垃圾的产生,那么本次将针对垃圾产生的原因进行简单分析。
·范例:垃圾的产生
classPerson{
String name;
intage;
public voidtell(){
System.out.println("姓名:"+this.name+",年龄:"+this.age);
}
}
public classMain {
public static voidmain(String[] args) {
Person person1 = newPerson();//声明对象Person person2 = newPerson();//声明对象person1.name="张三";
person2.name="李四";
person1.age=18;
person2.age=25;
person1=person2;//引用传递}
}
此时已经明确发生了引用传递,并且也成功的完成了引用传递的处理操作,但是下面我们进行内存分析。
一个栈内存只能保存一个堆内存的地址数据,如果发生更改,则之前的地址数据将从此栈内存中彻底消失。
所谓的垃圾空间就是没有任何栈内存所指向的堆内存空间,所有的垃圾空间将被GC(Garbage Collector、垃圾收集器)不定期进行回收,并且释放无用空间,但是如果垃圾过多,一定将影响到GC的处理性能,从而降低整体的程序性能,那么在实际的开发之中垃圾的产生应该越少越好。
java类与对象_Java类与对象相关推荐
- java类和对象实例对象_Java类、对象和实例的理解
最近在看Python,这门面向对象的语言又引起了类的引用.对象和实例这些概念之间的纠结,我按照自己的理解总结了一下Java里三者的关系,如果有不对的地方还希望大家指出. 类的引用和对象的概念没什么好弄 ...
- java类放到对象_Java中类和对象总结
一.面向对象概述 1.1 对象:世界万物皆对象. 类:同一类事物的统称,是这类对象的统称.类就是对象的设计图. 例:面向对象解决大雁南飞. 1.抽出对象--大雁 2.识别对象的属性--静态属性(翅膀. ...
- java 类对象_Java中的对象和类是什么?
今天我们来了解一下在java中到底什么是类,什么是对象,学习之前首先要了解什么是面向过程?什么是面向对象. 计算机语言其实就是和生活中的事件是一样的,每一行代码都代表着一件事情的发展或者结果,是现实世 ...
- java建立类的思想_JAVA类和对象创建
面向对象 学习目标: 理解面向对象的编程思想 理解类与对象的关系 如何创建类与对象 方法重载 一:什么是面向对象编程(OOP) 面向对象编程(Object Oriented Programming,O ...
- java 类的域_Java类中对象域的初始化
java中,一个类的域(或者说类的属性,类的数据成员)可以是基本数据类型,也可以是对象的引用.对象域如果没有被初始化,会被置为null,如果在置为null的引用上调用方法,我们就会得到一个运行时错误. ...
- java类笔试题_Java类和对象笔试题
案例描述:领养宠物并打印宠物信息 创建宠物狗狗类(Dog),狗狗类的属性: 昵称(name).健康值(health).亲密度(love).品种(strain): 狗狗类的方法(print):打印自己的 ...
- java常见对象_Java/10_Java常见对象.md at master · DuHouAn/Java · GitHub
Java常见对象 Arrays Arrays:针对数组进行操作的工具类. Arrays的常用成员方法: public static String toString(int[] a) //把数组转成字符 ...
- java 父类转子类_Java多态,对象转型,和简单工厂模式。希望对您有帮助!
各位读者老爷们大家好鸭~图图又来了,今天我们要说一下"多态". 怎么理解这两个字呢?可以理解为同一个引用对象的不同表现形态,即将父类的引用指向子类的对象.这是比较官方的书面解释,大 ...
- java反射克隆对象_Java反射 - 2(对象复制,父类域,内省)
为什么要复制对象?假设有个类Car,包含name,color2个属性,那么将car1对象复制给car2对象,只需要car2.setName(car1.getName)与car2.setColor(ca ...
最新文章
- IDEA设置git提交需要忽略的文件
- win下手工启停数据库
- boost::fusion::make_fused_procedure用法的测试程序
- 2017安徽二级c语言,2017计算机二级C语言测试题及答案
- nginx php 协同工作,nginx和php之间工作原理
- jquery基本过滤选择器:first :last :not(.myclass) :even :odd :eq(1) :gt(5) :lt(1) :header :animated :focus
- 《无线通信与网络》第二章 信号传输基础
- 88se9230 linux raid,Marvell发布全球首颗PCI-E 2.0 x2 SATA 6Gbps主控
- Linux网络编程之epoll模型
- 通达OA任意文件删除/未授权访问+任意文件上传漏洞复现
- 分体式水晶头_超6类双屏蔽网线水晶头制作简易教程
- 浏览器播放m3u8文件
- React+Antd+TypeScript 开发规范
- 网络层提供的两种服务
- jrebel java.lang.ClassCastException: org.springframework.boot.actuate.endpoint.annotation
- Gap year | 最好金龟换酒
- Lambda表达式和Stream流
- 虚幻4command line 的注册
- python:keyword --- 检验Python关键字
- Android基础入门教程——7.6.1 Socket学习网络基础准备
热门文章
- 横空出世,席卷Csdn [评微软等公司数据结构+算法面试100题]
- 双中心积分计算氟化氢HF的动能和势能
- php动态网站开发报告,PHP动态网站开发pdf
- git提交后的代码在哪儿_别乱提交代码了,来围观下大厂的 Git 提交规范
- 【Paper】2020_Distributed optimal consensus with obstacle avoidance algorithm of mixed-order UAVs
- 1.1 为什么选择序列模型-深度学习第五课《序列模型》-Stanford吴恩达教授
- stm32--对固件库的认识2
- 了解万用表历史,万用表的前世今生
- 计算机网络·详解TCP流量控制,拥塞控制,运输连接管理
- greendao引起的NoClassDefFoundError异常解决