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. 喵星之旅-狂奔的兔子-redis使用

    一.命令行使用 redis大概有200多命令,这里只是入门级别,列举了一些非常常见的内容,如果这些会了就可以开启redis进一步学习了. 1.登录数据库 我们需要知道ip地址.端口号.密码(如果有). ...

  2. python2.7环境下升级pip3,及出错解决办法

    执行 pip3 install --upgrade pip 进行升级 升级后若出现, Import Error:cannot import name main 是因为将pip更新为10.0.0后库里面 ...

  3. 吴裕雄--天生自然Numpy库学习笔记:NumPy 位运算

    bitwise_and() 函数对数组中整数的二进制形式执行位与运算. import numpy as np print ('13 和 17 的二进制形式:') a,b = 13,17 print ( ...

  4. component:(resolve) => require

    resolve => require(['../pages/home.vue'], resolve)这种写法是异步模块获取,打包的时候每次访问这个路由的时候会单调单个文件,按需加载,不过这种写法 ...

  5. 【PAT甲级】1065 A+B and C (64bit) (20 分)(大数溢出)

    题意: 输入三个整数A,B,C(long long范围内),输出是否A+B>C. trick: 测试点2包括溢出的数据,判断一下是否溢出即可. AAAAAccepted code: #defin ...

  6. 信息论相关概念:熵 交叉熵 KL散度 JS散度

    目录 机器学习基础--信息论相关概念总结以及理解 1. 信息量(熵) 2. KL散度 3. 交叉熵 4. JS散度 机器学习基础--信息论相关概念总结以及理解 摘要: 熵(entropy).KL 散度 ...

  7. js数组去重解决方案

    js数组去重是前端面试中经常被问的题目,考察了面试者对js的掌握,解决问题的思路,以及是否具有专研精神.曾经一位前端界大神告诉我,解决问题的方式有很多种,解决问题时多问问自己还有没有其他的方法,探求最 ...

  8. [read -p应用]插拔光模块去检查port present状态

    #!/bin/bash path="/sys/devices/platform/soc/fd880000.i2c-pld/i2c-0/i2c-4/i2c-15/15-0060" a ...

  9. Re库的基本使用

    # Re库的主要功能函数 """ re.search() 在一个字符串中搜索匹配正则表达式的第一个位置, 返回match对象 re.match() 在一个字符串的开始位置 ...

  10. GO判断输入

    判断用户密码输入: package main import"fmt" func main(){ var a int var b int fmt.Printf("请输入密码 ...