四、java基础-面向过程_对象_类中可出现的因素
1、面向过程和面向对象区别:
1)面向过程:开发一个应用程序、一个项目,必须先了解整个过程,了解各个步骤、模块间的因果关系,使的面向过程方式去开发程序时,代码和代码之间的关联程度是非常强。所以其中任何一个因果关系出现问题或者发生变动,都会影响到整个系统。缺点:扩展性差
2)面向对象:先去了解整个业务,然后将现实的业务分割成不同的单元,再使用java程序对各个单元进行实现,实现之后我们只要给它一个环境,驱动一下,让各个单元和各个单元进行合作,形成一个系统。优点:扩展能力强
备注:因为现实世界太复杂多变,面向过程的分析方法无法满足。
java、.net:都是面向对象的;c++:一半面向对象,一半面向过程;c语言: 纯面向过程
备注:为什么面向对象成为主流?
因为更符合人类的思维模式,更容易分析显示世界,从软件开发的生命周期来看:面向对象分为(OOA 面向对象的分析、OOD 面向对象的设计、OOP面向对象的线程)
2、类和对象的概念:
1)类:是一种类型,对现实世界中具有共同特征的一堆事物进行抽象,就形成了类。
类=属相+方法 属相源于类的状态,而方法来源于动作
2)对象:现实存在的个体,具体的存在称为对象,也叫实例;也就是说一个类的具体化,就是对象或实例
备注:通常是定义类型,创建对象;在java中类相当于引用数据类型,从类到对象的过程称为实例化过程,从对象到类的过程称为抽象的过程
java语言中对象封装性:
A、属性私有化。由private修饰的数据只能在本类中访问
B、对外提供set和get方法,在方法中可以写代码做业务逻辑控制,进一步提高数据安全性,外部程序无法直接访问私有的数据,但是可以通过调用set和get方法进行调用
3、java类中可以出现的因素:
1)成员变量(实例变量、非静态变量)-->是对象相关的,在堆中的对象中存储,必须有对象才能访问。引用.成员变量名进行调用成员变量必须先声明再赋值才能使用,若无手动赋值,则在无参构造方法执行的时候会自动赋值,但是加载该类的时候并不会给其中定义的成员变量赋值
2)成员方法(实例方法、非静态方法)-->引用.成员方法名进行调用
3)静态方法 -->类名.静态方法名进行调用
4)构造函数(构造方法)-->为了创建对象,并在创建对象的时(即调用无参构造方法时)给所又的成员变量赋值
构造方法的语法: [修饰符列表] 构造方法名(形式参数列表){//构造方法名必须和类名一致
方法体;//一个类没有提供任何构造方法,系统默认提供无参数的构造方法;一个类已经手动的提供了构造方法,那么系统不会再提供任何构造方法;
}
//构造方法和普通的方法一样,同样可以构成重载
//构造方法不具有任何返回值类型,即没有返回值,关键字void 也不能加入,加入后就不是构造方法了,就成了普通的方法了
备注:
对象:
A、java语言中所有new的东西只有在heap堆内存种才能看到。
B、new表示到堆里面开辟一个空间,new 在java语言中是个关键字。
C、Student stu1=new Student();其中的new Student 表示开辟的空间是一个Sutdent类型的空间,其实是在创建对象。 而stu1是个局部变量,它的类型是Student类型。是在栈中存储的。即new Student()创建一个对象,之后将赋给局部变量:stu1,而这个局部变量是有类型的,是Student类型。
D、对象在堆里面是占一定的空间的,这个空间在内存中有它的地址。这个内存地址被赋给了stu1,那么stu1这个地址就指向了堆里面的空间,这在C语言里面叫做指针,只不过在java中没有指针这么一说,这被称做引用,
注意:把stu1当做对象是错误的,stu1专业术语别成为引用,引用中保存的是内存地址指向堆中的对象。一般情况下都是通过一个地址去访问一个对象。一个类可以创建多个对象

4、 一个标准的实体类的4大基本规则:
A、封装(属性私有化,分别提供对应的get与set方法等),
B、提供无参构造 ,
C、重写:toString(),equals(),hashCode()这3个方法,
D、实现java.io.Serializable接口!
为什么要重写toString方法?
最后重写toString方法会让你打印和输出变得更顺利
为什么要重写equals方法?
重写它就是为了以后比较对象是否相等,比如你问题中的假如父类是person,子类是student,那么当我们new了几个student后,在程序中怎么去判断这几个 student实例是否是同一个学生呢?别告诉我用“=”去判断!这时如果我们的student重写了equals(比如你按照学号来比较),那么你就可以用S1.equals(S2)来比较了。
为什么重写hashCode方法?
至于hashCode,那是因为假如我们存取数据时 是存放在键值对中时(比如Map),这时候光靠equals效率不高,这时候用对象的哈希码(即hashCode方法得到的)来查找和比较更快,所以一般重写equals方法必须重写hashCode方法,因为java规定相等的对象必须有相等的哈希码
5、java虚拟机管理的内存
1)堆区heap
所有new出来的对象都放在堆区,java程序员无法直接对堆中的数据进行操作,必须通过一个引用去访问,也就是间接去访问。
另一种解释:存放new出来的对象,此对象由垃圾收集器收集,垃圾收集器,针对的就是堆区。
2)栈区stack
每一次调用方法的时候都会在栈中分配空间,每调用一个方法,会发生压栈动作;方法结束后发生弹栈动作,并且每一个栈帧中,会存放一个局部变量;
这个局部变量保存一个内存地址,指向堆(heap)中的一个对象,什么时候这个对象会被回收走呢?当中间的这根线断了,就代表再也没有人可以访问它了。 因为所有访问堆中的数据都是通过引用来实现的。如果堆中的对象没有更多的引用指向它,则该对象变成了垃圾,等待垃圾回收器的回收。
3)方法区
方法区存放的是.class 文件代码,还包括静态变量、常量另外一种解释:方法区存放类的所有消息,包括所有的方法,静态变量,常量。
*.class 文件通过装载机,将class的文件代码放到方法区里面。然后一步一步的执行代码,代码每执行一次就调用一次方法,每调用一次方法就在栈中分配空间,在这个过程中,假如用了一个new关键字,用来创建对象,一创建对象就会在堆区分配空间,
User u1= new User();//程序执行到此处,u1不再指向堆中的对象,即u1不指向堆中的任何东西,对象变成了垃圾。
u1=null;
//System.out.println(u1.name);//java.lang.NullPointerException 使用一个空的引用去访问成员会出现:空指针异常。
备注:
类加载到虚拟机的时候,成员变量是没有值的,因为在加载的时候根本就没有创建对象;
在构造方法执行的时候,才会给成员变量赋值。所以引用数据类型的默认值都是null
对象在堆中开启空间,对象在堆中的内存地址,让一个引用去保存,将来我们要向访问这个对象,要通过地址去访问,也即是通过“引用.”的方式去访问
四、java基础-面向过程_对象_类中可出现的因素的更多相关文章
- java基础学习总结六(对象与类、类的属性与方法)
一:面向过程与面向对象的区别 举例:一个人开门的动作,可以分解为开门,人进去,关门. 面向过程:人作为执行者,1:开门 2:进入 3:关门 面向对象:人作为指挥者,将开门,关门的动作都封装到门上 ...
- Java基础(三)对象与类
1.类的概念:类是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例. 2.封装的概念:封装(有时称为数据隐藏)是与对象有关的一个重要概念.对象中的数据称为实例域,操纵数据的过程称为方法.对于每 ...
- Java基础-面向接口(interface)编程
Java基础-面向接口(interface)编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的“类 ...
- java基础面向对象之类与对象
java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 •封装性:保护内部结构的安全性 •继承性:在已 ...
- JAVA基础语法:函数(方法)、类和对象(转载)
4.JAVA基础语法:函数(方法).类和对象 函数 在java中函数也称为方法,是一段具备某种功能的可重用代码块. 一个函数包括这几部分: 函数头 函数头包括函数访问修饰符,函数返回值类型, 函数名, ...
- Java基础-进程与线程之Thread类详解
Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- JAVA基础(二)—— 常用的类与方法
JAVA基础(二)-- 常用的类与方法 1 Math类 abs ceil floor 绝对值 大于等于该浮点数的最小整数 小于等于该浮点数的最大整数 max min round 两参数中较大的 两参数 ...
- python: 面向对象:类和对象调用类中的变量和方法
一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...
随机推荐
- 「JSOI2015」送礼物
「JSOI2015」送礼物 传送门 看到这题首先想到分数规划. 我们发现对于当前区间,如果它的最大值和最小值不是分居区间的两个端点的话,那么我们显然可以把两端多出去的部分舍掉,因为,在区间最大值最小值 ...
- composer基本命令
安装:https://getcomposer.org/download/ { "require":{ // "厂商/类库":"版本号", & ...
- 在xwindows界面中切换KDE与GNOME
在xwindows界面中切换KDE与GNOME 方法1: 在xwindows界面下通过菜单来切换,找到所需的菜单后执行,选择所需的桌面,重新启动xwindows即可. 方法2: 在命令提示符在xwin ...
- 【快学Docker】快速创建容器,容器常用命令
前言 容器是Docker的三大核心概念之一.简单地说,容器是独立运行的一个或一组应用,以及它们的运行态环境.对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面 ...
- Emprie 使用基础笔记
0x01 简介 empire 是一个后渗透攻击框架,具有加密通信和灵活框架的功能.Empire可以在不需要Powershell.exe的情况下执行PowerShell代理,后期利用的模块很强大,如sc ...
- Spring Boot Thymeleaf 模板引擎的使用
Spring Boot 中可以支持很多模板引擎,Thymeleaf 是 Spring Boot 官方推荐使用的模板引擎,虽然在社区 Thymeleaf 的性能被许多人所吐糟,但这仍然不影响大量的开发人 ...
- ubuntu安装zsh终端
搬砖博文:https://blog.csdn.net/lxn9492878lbl/article/details/80795413 1.安装zsh sudo apt-get install zsh 2 ...
- float元素上-margin的用法
css标准,float元素上的负margin表示把下面的元素向对应方向移动,并且覆盖上一个元素(这里是指html中元素的声明顺序). 标准情况下我们用float 时候是这样的. -margin通俗点说 ...
- 「AT2381 [AGC015C] Nuske vs Phantom Thnook」
题目大意 给出一个01矩阵,这个矩阵有一个特殊的性质: 对于任意两个 \(1\) 之间最多只有 \(1\) 条由 \(1\) 构成的路径.每次询问给出一个矩形范围,查询在这个范围内的联通快个数. 分析 ...
- redhat7.6 crontab 服务,周期性任务
系统默认安装开启 systemctl status crond.service 查看周期性任务(最多每隔1分钟做周期性任务) crontab -l 系统自身的周期性任务 配置周期性任务 cront ...