• Java类与对象


    类与对象

    1,面向对象编程简介

      Java语言最大的特点在于面向对象的编程设计,并且面向对象的编程设计也在由于Java自身的发展而不断发展。面向过程编程(C语言)、函数式编程(Scala)、面向对象编程(JavaC++PythonRuby)。

      所谓的面向过程指的是面对一个问题的解决方案,更多的情况下是不会做出重用的设计思考的,而面向对象的主要设计形式为模块化设计,并且可以进行重用配置。在整个的面向对象的设计里面更多情况下考虑的是标准,在使用的时候根据标准进行拼装,而对于面向对象设计有三个主要的特征:

      ·封装性:内部的操作对外部而言不可见,当内部的操作都不可直接使用的时候才是安全的;

      ·继承性:在已有结构的基础上继续进行功能的扩充;

      ·多态性:是在继承性的基础上扩充而来的概念,指的是类型的转换处理。

    在进行面向对象程序的开发之中一般还有三个步骤:

      ·OOA:面向对象分析;

      ·OOD:面向对象设计;

      ·OOP:面向对象编程;

     

    2,类与对象简介

    类是对一类事物的共性的抽象概念,而对象描述的是一个具体的产物。例如:现在将我和另外一个人进行比较时可以立刻区分出我还有别人。

    我和其他的人都一样,都是一个个具体可以使用的个体产物,但是这些个体都有一些共性的标志:人。但是人和人有各不相同,所谓人和人之间的不同依靠的是我们各自的属性,每一个属性的集合就构成了一个对象,但是所有鄂属性都应该是群体的定义,而群体的定义就形成了一个类。

    类是一个模板,而对象才是类可以使用的实例,先有类再有对象。

    在类之中一般都会有两个组成:

    ·成员属性(Filed):有些时候为了简化称其为属性;

    |-一个人的年龄、姓名都是不同的,所以这些对于整体来讲就称为属性;

    ·操作方法(Method):定义对象具有的处理行为;

    |-这个人可以唱歌、跳舞、游泳、运动;

     

    3,类与对象的定义及使用

    Java之中类是一个独立的结构体,所以需要使用class来进行定义,而在类之中主要由属性和方法所组成,那么属性就是一个个具体的变量,方法就是可以重复执行的代码。

    产生对象的两种方式:

    ①声明并且实例化:类名称 对象名称 = new 类名称();

    ②分步骤完成:

    |-声明对象:类对象 对象名称=null;

    |-实例化对象:对象名称=new 类名称();

     

    4,对象内存分析

    Java之中类属于引用数据类型,引用数据类型最大的困难之处在于要进行内存的管理,同时进行操作的时候也会发生有内存关系的变化。

    如果要进行内存的分析,那么首先给出两块最为常见的内存空间:

    ·堆内存:保存的是对象的具体信息,在程序之中堆内存空间的开辟是通过new 完成的;

    ·栈内存:保存的是一块堆内存的地址,即:通过地址找到堆内存,而后找到对象内容;

    栈溢出StackOverFlow

    需要特别引起注意的是,所有的对象在调用类中的属性或方法的时候必须要实例化完成后才可以执行。

    ·范例:错误的代码示范

     1 class Person{
     2     String name;
     3     int age;
     4     public void tell(){
     5         System.out.println("姓名:"+this.name+",年龄:"+this.age);
     6     }
     7 }
     8 public class Main {
     9     public static void main(String[] args) {
    10         Person person = null;//声明对象
    11 //        person=new Person();//实例化对象
    12         person.name="万雨";
    13         person.age=25;
    14         person.tell();
    15     }
    16 }
    1 Exception in thread "main" java.lang.NullPointerException
    2 
    3 at Main.main(Main.java:12)

    NullPointerException空指向异常,没有在堆内存开辟后所产生的问题,并且只有引用数据存在此类问题。整个代码之中只是声明了对象,但是并没有为对象进行实例化,所以此时无法调用。

     

    5,对象引用分析

    类本身属于引用数据类型,既然是引用数据类型,那么就牵扯到内存的引用传递,所谓的引用传递的本质:同一块的堆内存空间可以被不同的栈内存引用,也可以更换指向。

     

    这个时候引用传递是直接在主方法之中定义的,也可以通过方法实现引用传递处理。

    引用传递可以发生在方法上,这个时候一定要观察方法的类型,同时也要观察方法的执行过程。

     

    6,引用与垃圾产生分析

    经过一系列的分析之后已经确定,所有的引用传递的本质就是一场堆内存的调戏游戏。但是对于引用传递不当,那么也会造成垃圾的产生,那么本次将针对垃圾产生的原因进行简单分析。

    ·范例:垃圾的产生

    class Person{
        String name;
        int age;
        public void tell(){
            System.out.println("姓名:"+this.name+",年龄:"+this.age);
        }
    }
    public class Main {
        public static void main(String[] args) {
            Person person1 = new Person();//声明对象
            Person person2 = new Person();//声明对象
            person1.name="张三";
            person2.name="李四";
            person1.age=18;
            person2.age=25;
            person1=person2;//引用传递

        }
    }

    此时已经明确发生了引用传递,并且也成功的完成了引用传递的处理操作,但是下面我们进行内存分析。

    一个栈内存只能保存一个堆内存的地址数据,如果发生更改,则之前的地址数据将从此栈内存中彻底消失。

     

      所谓的垃圾空间就是没有任何栈内存所指向的堆内存空间,所有的垃圾空间将被GCGarbage Collector、垃圾收集器)不定期进行回收,并且释放无用空间,但是如果垃圾过多,一定将影响到GC的处理性能,从而降低整体的程序性能,那么在实际的开发之中垃圾的产生应该越少越好。

     

     

  • 相关阅读:
    html----有关图像
    前端开发初学者
    angular js 正序倒叙
    viewpager无线轮播获取网络图片
    angular js 球星
    angular js shopping
    angular js 公告墙
    Android 常用正则表达式
    Android 内存泄漏
    TCP/IP,必知必会的
  • 原文地址:https://www.cnblogs.com/Mufasa/p/11104552.html
Copyright © 2020-2023  润新知