面向对象(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. Go项目实战:打造高并发日志采集系统(四)

    前情回顾 前文我们完成了如下目标1 项目架构整体编写2 使框架支持热更新 本节目标 在前文的框架基础上,我们1 将之前实现的日志监控功能整合到框架中.2 一个日志对应一个监控协程,当配置热更新后根据新 ...

  2. 测试ssh转发

    端口转发提供: 1.加密 SSH Client 端至 SSH Server 端之间的通讯数据. 2.突破防火墙的限制完成一些之前无法建立的 TCP 连接. 但是只能转发tcp连接,想要转发UDP,需要 ...

  3. vue等单页面应用优缺点

    优点 Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件,核心是一个响应的数据绑定系统. 数据驱动 组件化 轻量 简洁 高效 模块友好 页面切换快 缺点 不支持低版本的浏览器 ...

  4. java导出execl报表

    1. 下载jar包: 官方下载:http://poi.apache.org/download.html这里可以下载到它的最新版本和文档,目前最新版本是3.7,这里使用比较稳定的3.6版. 百度网盘下载 ...

  5. MySQL知识篇-SQL3

    视图 1 提高重用性: 2 可用于数据库重构: 3 可用于不同用户,提高安全性: 定义视图: create view 视图name as select语句: 查看视图: show tables: 使用 ...

  6. C#ModBus Tcp

    C#ModBus Tcp 报文解析   上一篇博客已经完成 C#ModBus Tcp Master的实现 本篇主要对不同的功能码所发出的报文进行解析(包括请求报文及响应报文) 读操作 功能码 0x01 ...

  7. springboot获取项目的绝对路径和根目录

    springboot获取当前项目路径的地址 System.getProperty("user.dir") 输出目录:  G:\outshine\wangsoso //获取class ...

  8. [校内模拟赛T3]火花灿灿_二分答案_组合数学_贪心

    火花灿灿 题目: 数据范围: 题解: 这个题真的是个神仙题. 我们对于每块石头维护一个$01$串. 这个$01$串的长度是操作次数. 如果$01$串的当前位是$1$,表示这次操作中当前石子被划分到了贡 ...

  9. AGC040 Task C. Neither AB Nor BA

    Observations 对一个长为 $2N$ 的序列重复下述操作:取走两个相邻且不同的元素.最后能把序列取空的充要条件是序列中不存在出现超过 $N$ 次的元素. 证明:必要性,取 $N$ 次最多能取 ...

  10. 「java.util.concurrent并发包」之 ReentrantReadWriteLock

    一 引言 在多线程的环境下,对同一份数据进行读写,会涉及到线程安全的问题.比如在一个线程读取数据的时候,另外一个线程在写数据,而导致前后数据的不一致性:一个线程在写数据的时候,另一个线程也在写,同样也 ...