• 面向对象0---总体概述


    第一章、   面向对象和面向过程的区别

    一、面向过程和面向过程的区别

    (1)首先编程思想(举一个贴近生活的例子)

    面向过程:是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程。他是一个人做全部事情;

    面向对象:是遇到一件事时,思考“如何把这件事划分成多个小事情,然后每个小事情让某个对象来做,最后一群对象合力能把事。”

     

    (2)代码质量来说

    A:面向过程的代码缺乏对数据的封装,并且不安全;

    B:面向过程的变量是多个完全独立的变量, 并不是一个整体;操作过程让代码变得复杂,不好维护;

    例如方法中需要多个参数的时候等,面向过程需要定义多个参数,面向对象只需要定义一个对象就会;

    案例:

    1. /** 打印员工信息的方法   */
    2. public static void printEmpInfo(String name,int age,
    3. char gender,double salary) {
    4. System.out.println("--------------------");
    5. System.out.println("姓名: " + name);
    6. System.out.println("年龄:" + age);
    7. System.out.println("性别:" + gender);
    8. System.out.println("薪水:" + salary);
    9. }
    1. ** 打印雇员信息    */
    2. public  static  void  main  (String[ ]  args ){
    3.       //雇员1
    4.       String emp1Name = "黄河大虾";
    5. int emp1Age = 25;
    6.       char emp1Gender = '男';
    7. double emp1Salary = 8000.00;
    8.     
    9.       //打印员工信息

    10. printEmpInfo(emp1Name, emp1Age, emp1Gender, emp1Salary);

    1. 11.       
    2. 12.       //修改员工工资(增长20%)并打印
    3. 13.       emp1Salary *= 120.0 / 100.0;

    14. printEmpInfo(emp1Name, emp1Age,emp1Gender, emp1Salary);

    15. }

    二、面向对象在工作中对于一个需求的开发思路

    (1)   分析需要的对象:

    先按照名词提炼问题领域中的对象

    (2)   分析对象的属性和方法

    (3)   分析问题流程,通过new对象来,调用对于的属性和方法;

    三、相关概念

    1抽象数据类型

    可以理解为:将不同类型的数

    据的集合组成个整体用来描述一种新的事物。

    像如上程序中,可以将姓名、年龄、性别、工资这4个不同类型的数据组成一个整体来描述雇员这个新事物。

       

    四、类和对象的区别

    4.1概念

    类是对某一类事物的抽象描述;描述多个对象的共同特征,它是对象的模板

    对象用于表示现实中该类的具体事物;

    例如:动物是类,毛、狗等是对象;

    4.2开发使用

    类中可以定义事物的属性和行为;

    对象是使用new关键字创建出来,通过对象引用就可以调用该对象具体的属性和功能了。

    第二章、基本类型和引用类型作为参数传递

    A:基本类型:

    作为参数传递时,其实就是将基本类型变量x空间中的值复制了一份传递给调用的方法的变量;

    在方法中对于变量的操作,不会影响原来变量的值;

    B:引用类型:

    当引用变量作为参数传递时,这时其实是将引用变量空间中的内存地址(引用)复制了一份传递给了方法的引用变量。

    这时会有两个引用同时指向堆中的同一个对象。不管是哪一个引用改变了引用的所指向的对象的中的值,其他引用再次使用都是改变后的值。

    第三章、面向对象三大特征:

    一、封装

    l       封装概念

    n  封装,把对象的属性和方法的实现细节隐藏,仅对外提供一些公共的访问方式

     

    l  封装表现:

    n  1、方法:封装的是具体的业务逻辑实现

    n  2、类:封装的是对象的属性和行为变量

    n  3、变量:使用 private 修饰,这就是变量的封装

    n  4、访问控制修饰符:封装的是访问的权限

    l  封装的好处:

    n  1、提高了代码的复用性。

    例如需要某些功能,值需要通过对象调用对于方法就好,而不需要直接写方法的具体算法;

    n  2、提高了代码的安全性。

    n  隐藏了实现细节,还要对外提供可以访问的方式,便于调用者的使用。这是核心之一,也可以理解为就是封装的概念。

    二、继承:

    2.1)作用:代码的复用

    2.2)父类/基类:共有的属性和行为

    子类/派生类:特有的属性和行为

    2.3)子继承父之后,子具有:父+子

    2.4)传递性、单一继承,多接口实现

    三、多态:

    1)意义:行为的多态、对象的多态

    2)转换向上造型、强制类型转换、instanceof判断

    3)多态的表现形式:

    重写:根据对象来多态

    重载:根据参数来多态

    第四章、特殊的操作工具代码

    一、This

    1、概述

    作用:为了解决方法的局部变量和成员变量的混淆;

    工作原理:指代当前对象,哪个对象调用方法指的就是哪个对象

    2、使用位置

    2.1使用在方法体中:

    this关键字用在方法体中,用于指代调用该方法的当前对象;为了方便可以省略;

    简单的说:哪个对象调用方法,this指的就是哪个对象。严格来讲,在方法中需要通过this关键字指明当前对象

    2.2使用在构造方法中

    在构造方法中,用来初始化成员变量的参数一般和成员变量取相同的名字,这样会有利于代码的可读性,但此处就必须通过this关键字来区分成员变量和参数了

    2.3对于成员变量、方法、构造方法的调用

    3使用方式

    1)this.成员变量名------------访问成员变量

    2)this.方法名()--------------调用方法

    3)this()---------------------调用构造方法

    4、注意事项

    调用其他构造方法的语句必须定义在构造方法的第一行,原因是初始化动作要最先执行

    二、supper

    1、super:指代当前对象的父类对象

    2、super的用法: 1)super.成员变量名----------访问父类的成员变量 2)super.方法名()------------调用父类的方法 3)super()-------------------调用父类的构造方法

    三、package:

    1)作用:避免类的命名冲突

     2)类的全称: 包名.类名

     3)包名可以有层次结构,同包中的类不能同名 4)建议:包名所有字母都小写

    四、import:

    1)同包中的类可以直接访问 不同包中的类不能直接访问,若想访问有如下两种方式:

    1.1)先import声明类再使用----建议

    1.2)类的全称----------------太繁琐,不建议

    第五章、对象内存管理

    一、背景

    1代码的编译运行

    在JAVA中,有java程序、虚拟机、操作系统三个层次,其中java程序与虚拟机交互,而虚拟机与操作系统交互。编译好的java字节码文件运行在JVM中。

    2存储位置

    程序中无论代码还是数据,都需要存储在内存中

    3内存分配原理

    java程序所需内存均由JVM进行管理分配,开发者只需关心JVM是如何管理内存的,而无需关注某种操作系统是如何管理内存的,这就保证了java程序的平台无关性。

    4内存划分

    JVM会将申请的内存从逻辑上划分为三个区域:堆、栈、方法区。这三个区域分别用于存储不同的数据。

    二、内存分类介绍

    1、堆内存

    1.1概述

    3.1.1概念:JVM在其内存空间开辟了一个称为“堆”的存储空间

    1.1.2存储内容

    (一)存储使用new关键字所创建的对象

    (二)成员变量亦在此分配,并赋初始值(根据类型赋值);

    注:是基本数据类型的成员变量

    1.1.3生命周期

    (一)对象:当一个对象没有任何引用时,该对象被视为废弃的对象,属于被回收的范围;开发中就是将该引用赋值为null;

    (二)成员变量:从对象在堆中创建开始到对象从堆中被回收结束

    1.2内存问题

    1.2.1垃圾回收机制

    (一)概念:垃圾回收器(Garbage Collection,GC)是JVM自带的一个线程(自动运行着的程序),用于回收没有任何引用所指向的对象

    (二)运行原理:GC线程会从栈中的引用变量开始跟踪,从而判定哪些内存是正在使用的,若GC无法跟踪到某一块堆内存,那么GC就认为这块内存不再使用了,即为可回收的。

    (三)应用:java程序员不用担心内存管理,因为垃圾收集器会自动进行管理

    1.2.2 Java程序的内存泄露问题

    (一)概念:内存泄露是指,不再被使用的内存没有被及时的回收,严重的内存泄露会因过多的内存占用而导致程序的崩溃。在程序中应该尽量避免不必要的内存浪费。

    (二)内存泄漏减少:GC线程判断对象是否可以被回收的依据是该对象是否有引用来指向,因此,当确定该对象不再使用时,应该及时的将其引用设置为null,这样,该对象即不再被引用,属于可回收的范围。

    1.2.3System.gc()方法

    GC的回收对程序员来说是透明的,并不一定一发现有无引用的对象就立即回收。一般情况下,当我们需要GC线程即刻回收无用对象时,可以调用System.gc()方法。此方法用于建议JVM马上调度GC线程回收资源,但具体的实现策略取决于不同的JVM系统。

    2、栈内存

    1.1概述

    1.1概念:JVM在其内存空间开辟一个称为”栈”的存储空间

    2. 2存放内容

    (一)用于存储程序运行时在方法中声明的所有的局部变量、参数等;

    注:

    局部变量:方法中声明的变量即为局部变量

    变量的值:若变量为基本类型,则在栈中存储的就是该变量的值。若变量为引用类型,则在栈中存储的是堆中对象的地址

    2.1.3生命周期

    JVM会为每一个方法的调用在栈中分配一个对应的空间,这个空间称为该方法的栈帧。一个栈帧对应一个正在调用中的方法,栈帧中存储了该方法的参数、局部变量等数据。

    当某一个方法调用完成后,其对应的栈帧将被清除,局部变量即失效。

    1、 方法区

    5.1概述

    5.1.1概念:JVM在其内存空间开辟一个称为”栈”的存储空间

    5.1.2原理:先会通过类装载器载入类文件的字节码信息,经过解析后将其装入方法区。

    5.1.3存放内容

    (一)类的各种信息(包括类的类型信息、方法、字节码文件等)都在方法区存储

    (二)static变量

    (三)常量

    5.1.4特征

    (一)方法只有一份:多个对象会拥有各自在堆中的空间,但所有实例对象是共用在方法区中的一份方法定义的。意味着,方法只有一份

    (二)方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。 

    五、程序执行流程

    class Person {

        private int age;

        public int getAge() {

            return this.age;

        }

        public void setAge(int age) {

            this.age = age;

        }

    }

    public class PersonDemo {

        public static void main(String[] args) {

            Person p = new Person();

            p.setAge(30);

            System.out.println("大家好,今年我" + p.getAge() + "岁");

        }

    }

        下图为程序中内存对象的创建使用过程。

     

    图1-1   内存对象创建使用过程

    程序执行流程说明:

    1、 先执行main方法(压栈),执行其中的 Person p = new Person();

    2、 在堆内存中开辟空间,并为其分配内存地址0x1234,紧接着成员变量默认初始化(age = 0);将内存地址0x1234赋值给栈内中的Person p 变量

    3、 继续执行p.setAge(30)语句,这时会调用setAge(int age)方法,在栈中给该方法开辟一个内存空间;将30赋值为setAge方法中的“age”变量;执行this.age = age语句,将age变量值30 赋值给成员变量this.age为30;

    4、 setAge()方法执行完毕后(弹栈),将该方法的内存空间释放;回到main()方法,执行输出语句System.out.println(),控制台打印p对象中的age年龄值。

    向成为千里马奋斗,为伯乐打call;
  • 相关阅读:
    Varnish常用相关命令工具
    Varnish介绍
    varnish 内置函数详细说明
    job console部署
    Windows Server 2008(R2)配置apache+php+mysql环境问题事项
    Eclipse for php + Xdebug搭建PHP的调试环境
    DB2 SQL Error: SQLCODE=-805, SQLSTATE=51002 解决方法
    base64加密解密
    将输入流InputStream转换为String
    PowerDesigner16 安装包及破解文件
  • 原文地址:https://www.cnblogs.com/mhy666/p/9347291.html
Copyright © 2020-2023  润新知