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基础-面向过程_对象_类中可出现的因素的更多相关文章

  1. java基础学习总结六(对象与类、类的属性与方法)

    一:面向过程与面向对象的区别 举例:一个人开门的动作,可以分解为开门,人进去,关门. 面向过程:人作为执行者,1:开门  2:进入   3:关门 面向对象:人作为指挥者,将开门,关门的动作都封装到门上 ...

  2. Java基础(三)对象与类

    1.类的概念:类是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例. 2.封装的概念:封装(有时称为数据隐藏)是与对象有关的一个重要概念.对象中的数据称为实例域,操纵数据的过程称为方法.对于每 ...

  3. Java基础-面向接口(interface)编程

    Java基础-面向接口(interface)编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的“类 ...

  4. java基础面向对象之类与对象

    java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 •封装性:保护内部结构的安全性 •继承性:在已 ...

  5. JAVA基础语法:函数(方法)、类和对象(转载)

    4.JAVA基础语法:函数(方法).类和对象 函数 在java中函数也称为方法,是一段具备某种功能的可重用代码块. 一个函数包括这几部分: 函数头 函数头包括函数访问修饰符,函数返回值类型, 函数名, ...

  6. Java基础-进程与线程之Thread类详解

    Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...

  7. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  8. JAVA基础(二)—— 常用的类与方法

    JAVA基础(二)-- 常用的类与方法 1 Math类 abs ceil floor 绝对值 大于等于该浮点数的最小整数 小于等于该浮点数的最大整数 max min round 两参数中较大的 两参数 ...

  9. python: 面向对象:类和对象调用类中的变量和方法

    一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...

随机推荐

  1. xml配置问题--------不允许有匹配 "[xX][mM][lL]" 的处理指令目标

    剪不断,理还乱,是BUG   相遇:不允许有匹配 "[xX][mM][lL]" 的处理指令目标   在编写MyBatic框架时,纯手编写mybatic-config.xml文件,遇 ...

  2. selenium 元素查找与属性

    1.首先你要安装selenium库啦 pip install selenium 2.selenium查找元素就八种方法 from selenium import webdriver driver=we ...

  3. Codeforce 977E Cyclic Components

    dfs判断图的连通块数量~ #include<cstdio> #include<algorithm> #include<vector> #include<cs ...

  4. hadoop集群启动报错: java.io.IOException: Incompatible clusterIDs

    java.io.IOException: Incompatible clusterIDs in /export/hadoop-2.7.5/hadoopDatas/datanodeDatas2: nam ...

  5. 计划任务cron,date,时间同步ntp,chrony

    取出磁盘利用率最大值 ,写个脚本,做判断,只要快满了,就报警 计划周期性执行的任务提交给crond,到指定时间会自动运行 系统cron任务:系统维护作业  /etc/crontab 用户cron任务: ...

  6. RFID学习

    RFID:射频识别卡有读卡器和电子标签(有源/无源/半有源)组成,工作频率有LF/HF/UHF/MF,低频的通讯距离近(1m)常用来做门禁:高频的通讯距离远可以批量读取. 无源的轻巧/防拆一致性好,在 ...

  7. 【PAT甲级】1053 Path of Equal Weight (30 分)(DFS)

    题意: 输入三个正整数N,M,S(N<=100,M<N,S<=2^30)分别代表数的结点个数,非叶子结点个数和需要查询的值,接下来输入N个正整数(<1000)代表每个结点的权重 ...

  8. 字符串操作函数:JSON.parse()与JSON.stringify()的区别,字符串转数组 str.split(','),数组转字符串String(),以及对象拼接合并Object.assign(),数组拼接合并concat()

    1.JSON.parse()  把字符串转化为 json 对象 例如 arr={ , "site":"www.runoob.com" } var obj = J ...

  9. Spring Boot 项目本地运行无异常,部署到 Linux 服务器运行报错:java.lang.ClassNotFoundException

    一 背景 最近在用 Springboot 开发项目 A,引了小伙伴开发的模块 B,本地起服务,运行的好好的,等部署到服务器上,一运行就报错:Caused by: java.lang.ClassNotF ...

  10. Mybatis plus 插入数据时将自动递增的主键手动进行赋值设置

    1.首先设置好实体类:将类型设置为 @TableId(type = IdType.INPUT) 2.在插入数据前将id赋值给实体类对象即可