面向对象(Object Oriented)

面向过程:事物比较简单。将问题分解为若干个步骤。按照步骤依次执行。
面向对象:事物比较复杂。在解决面向对象的过程中,最后的执行部分还是面向过程方式,面向过程和面向对象不是对立的,而是相辅相成的。
面向对象和面向过程的总结:
1、都是解决问题的思维方式
2、解决简单问题使用面向过程
3、解决复杂问题:宏观上使用面向对象把握,微观上处理仍然是面向过程。
面向过程和面向对象举例子:大象装冰箱
面向过程:
1、打开冰箱
2、存储大象
3、关上冰箱
对于面向对过程的思想,强调的是过程(动作)【C语言】
面向对象:
1、冰箱打开
2、冰箱存储
3、冰箱关闭
对于面下对象思想,强调的是对象(实体)【C++、Java、C#】
面向对象核心:对象和类
对象(Object,instance):具体的事物。类的一个具体实例
类(class):是对 对象的抽象. (抽象:在类中只是表达了对象有什么属性,和会什么功能。属性的值都不具体)
类和对象的关系:
用Java语言对现实生活中的事物进行描述;通过类的形式来体现
类:描述对象
对象:该类的实例(用关键字new来创建对象)
先有对象还是先有类?
1:从现实的角度去考虑:先有对象,再有类。
2:从分析的角度:先分析问题中有几个对象,然后再用类去描述对象。先有对象,后有类。
3:从编码的角度:先定义类,然后通过类创建对象。先有类,后有对象。
例子:  类:高楼的图纸       类:树
        对象:盖起的高楼      对象:大门口的法桐
定义类:(类的组成)
属性  field
方法  method
构造方法 construtor
其他:代码块 、静态代码块、内部类
创建对象
类名  对象名 = new 类名();
Person p1 = new Person();
调用类的属性和方法
对象名.成员变量
对象名.成员方法
java虚拟机内存可分为三个区域:栈(stack)、堆(heap)、方法区(method area)

栈的特点
1、栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(操作数,局部变量,方法出口等)
2、JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数,局部变量等)
3、栈属于线程私有的,不能实现线程间的共享。
4、栈的存储特性:先进后出(弹夹)
5、栈由系统自动分配一个连续的内存空间,速度快!

堆的特点
1、堆用于存储创建好的对象和数组(数组也是对象)
2、JVM只有一个堆,被所有线程共享
3、堆是一个不连续的内存空间,分配灵活,速度慢!
4、堆的存储特性:先进先出

方法区(又叫静态区)
1、JVM只有一个方法区,被所有线程共享。
2、方法区实际上也是堆,只是用于存储类、常量相关的信息。
3、用来存放程序中永远不变的内容(类的信息,静态变量,字符串常量)

成员:成员变量 <=> 属性,成员函数 <=> 行为
成员变量与局部变量区别
1、成员变量定义在类中(整个类可访问)
   局部变量定义在函数中、语句、局部代码块中(所属的区域有效)
2、成员变量存在于堆内存的对象中
     局部变量存在于栈内存的方法中
3、成员变量随着对象创建而存在,随着对象的消失而消失
     局部变量随着所属区域的执行而存在,随着所属区域的结束而释放
4、成员变量都有默认初始化值(int类型 0;String 类型:null)
     局部变量没有默认初始化值(编译会报错)
5、成员变量与局部变量同名时,优先访问局部变量
构造器【构造方法】(Constructor)
构造器:1、构造器的方法名必须和类名一致!
    2、通过new关键字调用
    3、在创建对象时被自动调用的特殊方法。作用:为属性进行初始化
       默认的构造方法:类中若没有定义构造方法,该类有一个默认的空参数的构造方法。
       类中定义了指定的构造方法,默认的空参数构造方法就不存在。
    4、与普通方法一样,构造方法也可以重载
构造器的重载:方法名相同,参数列表不同。一个类中出现多个构造方法是以重载的形式体现,可给不同的对象进行不同初始化属性值。
&& example

 package com.boom0827;

 /**
* 练习: 定义一个学生类:描述学生,属性,年龄,age,分数score,名字 String name,性别 String gender
* 然后定义默认无参的构造方法,并对所有的属性 进行初始化 然后定义带参数的构造方法,四个参数,对所有的属性通过参数赋值。 然后定义 一个成员方法 show
* 展示学生的属性的。 定义测试类,生成两个学生对象,一个调用默认无参的构造方法,一个调用 带参数的构造方法 然后分别调用 show 方法。
*
* @author Administrator
*
*/ public class Test02 { public static void main(String[] args) {
Student student = new Student();
System.out.println("------无参的构造方法------");
student.show();
System.out.println("------有参的构造方法------");
Student student2 = new Student("小红", "女", 18, 60);
student2.show();
} } // 创建一个学生类
class Student {
String name;
String gender;
int age;
int score; // 学生类的无参构造方法 初始化成员变量
public Student() {
name = "小明";
gender = "男";
age = 18;
score = 60;
} // 定义有参的构造方法
public Student(String setNname, String setGender, int setAge, int setScore) {
name = setNname;
gender = setGender;
age = setAge;
score = setScore;
} void show() {
System.out.println("姓名:" + name + "\n性别:" + gender + "\n年龄:" + age + "\n分数:" + score);
}
}

对象数组

 /**
* 对象数组随机赋值初始化
*
* @author Administrator
*
*/
public class Test03 {
public static void main(String[] args) {
// 创建5个学生
Student[] students = new Student[5]; // 打印,空数据的信息
for (Student student : students) {
System.out.println(student);// null
} // 初始化随机数组分配姓名
String[] names = { "小红", "小黑", "小青", "小紫", "小绿", "小橙", "小蓝", "小黄", "小刚" };
// 对五个学生逐一进行初始化
for (int i = 0; i < students.length; i++) {
// 随机初始化姓名
int index = getRandomNumber(0, names.length);
String name = names[index];
// 随机初始化性别
String sex = getRandomNumber(0, 2) == 0 ? "男" : "女";
// 随机年龄
int age = getRandomNumber(18, 25);
// 随机分数
int score = getRandomNumber(60, 101); // 赋值
students[i] = new Student(name, sex, age, score);
students[i].show();
} } // 获取随机数
public static int getRandomNumber(int min, int max) {
return (int) (Math.random() * (max - min) + min);
}
} class Student {
String name;
String sex;
int age;
int score; // 创建构造方法初始化属性值
public Student(String name, String sex, int age, int score) {
this.name = name;
this.sex = sex;
this.age = age;
this.score = score;
} // 显示学生的基本信息
void show() {
System.out.println("姓名 = " + name + "\t年龄 = " + age + "\t性别 = " + sex + "\t成绩:" + score);
}
}

this关键字
this关键字:当成员和局部变量重名,this关键字区分
this代表对象(当前对象),代表当前对象的一个引用
this关键字必须放在第一行(Java虚拟机先初始化值)
this不能用和static关键字共存

static关键字
static特点:
1, static是一个修饰符,用于修饰成员变量和成员方法;不能修饰局部变量
2, static修饰的成员被所有的对象所共享;
3, static优先于对象存在,static的成员随着类的加载就已存在;
4, static修饰的成员可直接被类名所调用【类名.静态成员】;
5, static修饰的数据是共享数据,对象中存储的是特有数据;

成员变量跟静态变量的区别:
1,生命周期不同
成员变量随着对象创建而存在,随着对象的回收而释放;
静态变量随着类的加载而存在,随着类的消失而释放。(虚拟机消失)
2,调用方式不同
成员变量只能被对象调用;
静态变量可以被对象调用,也可被直接被类名调用。
3,别名不同
成员变量也称实例变量;
静态变量也称类变量
4,数据的存储位置不同
成员变量数据存储在堆内存的对象中,也叫对象的特有数据;
静态变量数据存储在方法区(静态区),也叫对象的共享数据。
Static使用注意事项:
1, 静态方法只能访问静态成员;
2, 静态方法中不可以使用this或者super关键字(this和super是赖于某个对象的);
3, 主函数是静态的 (由jvm 负责调用执行。不需要创建所在类的对象就可以直接运行)

  

静态代码块
特点:在类加载的时候,执行,并且仅执行一次。对类的静态成员变量初始化,并执行静态代码块。
作用:如果某些代码希望仅执行一次,可以在这里面进行,还有对静态成员变量初始化。

Java面向对象(一)的更多相关文章

  1. JAVA面向对象

    JAVA面向对象 对象   我们生活中能看到能摸到的一切事物都是对象.在程序中模拟出生活中的所有东西万物皆对象   只要是对象--属性和行为(方法)   属性   对象有什么   例如:学生有姓名.学 ...

  2. 理解JAVA - 面向对象(object) - 属性,方法

    理解JAVA - 面向对象(object) - 属性,方法 多态的体现:    向上造型,父类接收子类对象:向上造型:    从父类角度看不到子类独有的方法:面向对象,人类认知世界的方式:生活中每天都 ...

  3. Java面向对象㈠ -- 封装

    Java的面向对象有三大特征:封装.继承.多态.这里主要对封装进行讲解. 封装可以理解为隐藏一个类的成员变量和成员函数,只对外提供需要提供的成员函数. Java的封装主要通过访问权限控制符:priva ...

  4. 谈谈Java面向对象的三大特性

    Java面向对象的三大特性就是指封装.继承.多态了. 一.封装: 概念:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (举例:笔记本电脑就是一个封装体,Java语言中最小的封装体就是函数 ...

  5. Java面向对象:接口

    Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...

  6. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  7. java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final

    一.前言 一直以来都是拿来主义,向大神学习,从网上找资料,现在就把自己在工作中和学习中的所理解的知识点写出来,好记星不如烂笔头,一来可以作为笔记自己温习,二来也可以给走在求学之路的同学们一点参考意见, ...

  8. 20145212《Java程序设计》实验报告二 《 Java面向对象程序设计》

    20145212 实验二< Java面向对象程序设计> 实验内容 单元测试 三种代码 伪代码 百分制转五分制: 如果成绩小于60,转成"不及格" 如果成绩在60与70之 ...

  9. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  10. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

随机推荐

  1. php上传文件夹 ​

    用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个php文件夹上传下载的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下.希望能对你有所帮助. 以下是实例的部分脚本文件与代码: ...

  2. spring mvc 最详细文档,前无古人后无来者 掉渣天~

    一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--conf ...

  3. 【转载】用jquery给select option 赋值

    var dataList = [ "6211125886667895", "6211125886667892", "6211125886667897& ...

  4. 使用robotframework做接口测试5——一个用例中调多个接口

    凡是涉及一点点有接口关联的,都可能下一个接口需要上一个接口的某个返回值作为入参,最直接的例子,就是登录依赖.用接口做业务性的测试,也绝对离不开接口依赖的,业务都是一系列接口串联的结果,有时候一个接口操 ...

  5. OpenCV图像旋转

    图像旋转是指图像按照某个位置转动一定角度的过程,旋转中图像仍保持这原始尺寸.图像旋转后图像的水平对称轴.垂直对称轴及中心坐标原点都可能会发生变换,因此需要对图像旋转中的坐标进行相应转换. 如下图: 假 ...

  6. 微信小程序添加卡券到微信卡包,使用wx.addCard()方法传参及整体流程

    一.准备: 1.经微信认证过的微信公众号. 2.经微信认证过的微信小程序号. 先来看看微信小程序官方的文档,https://developers.weixin.qq.com/miniprogram/d ...

  7. C#中?的相关使用

    C#中?的相关使用 今天看了几篇博客,学习了一下与?相关的使用,大致分为一下几种: 1. 可空类型 看标题就能够很好的理解这个概念:可以为空的类型.而在C#中可以为空也就是null的类型,都是引用类型 ...

  8. 安装heat

    在控制节点上执行 controller-heat(){mysql -uroot -p${MYSQL_PASSWD} << EOF DROP DATABASE IF EXISTS heat; ...

  9. Spring Boot + Vue 跨域请求问题

    使用Spring Boot + Vue 做前后端分离项目搭建,实现登录时,出现跨域请求 Access to XMLHttpRequest at 'http://localhost/open/login ...

  10. 在Hadoop中ResourceManager是干什么的?

    [学习笔记] 1)ResourceManager:马克-to-win @ 马克java社区:防盗版实名手机尾号:73203.当应用程序对集群资源需求时,ResourceManager是Yarn集群主控 ...