zoukankan      html  css  js  c++  java
  • Java面向对象(一)

    面向对象(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
     1 package com.boom0827;
     2 
     3 /**
     4  * 练习: 定义一个学生类:描述学生,属性,年龄,age,分数score,名字 String name,性别 String gender
     5  * 然后定义默认无参的构造方法,并对所有的属性 进行初始化 然后定义带参数的构造方法,四个参数,对所有的属性通过参数赋值。 然后定义 一个成员方法 show
     6  * 展示学生的属性的。 定义测试类,生成两个学生对象,一个调用默认无参的构造方法,一个调用 带参数的构造方法 然后分别调用 show 方法。
     7  * 
     8  * @author Administrator
     9  *
    10  */
    11 
    12 public class Test02 {
    13 
    14     public static void main(String[] args) {
    15         Student student = new Student();
    16         System.out.println("------无参的构造方法------");
    17         student.show();
    18         System.out.println("------有参的构造方法------");
    19         Student student2 = new Student("小红", "女", 18, 60);
    20         student2.show();
    21     }
    22 
    23 }
    24 
    25 // 创建一个学生类
    26 class Student {
    27     String name;
    28     String gender;
    29     int age;
    30     int score;
    31 
    32     // 学生类的无参构造方法 初始化成员变量
    33     public Student() {
    34         name = "小明";
    35         gender = "男";
    36         age = 18;
    37         score = 60;
    38     }
    39 
    40     // 定义有参的构造方法
    41     public Student(String setNname, String setGender, int setAge, int setScore) {
    42         name = setNname;
    43         gender = setGender;
    44         age = setAge;
    45         score = setScore;
    46     }
    47 
    48     void show() {
    49         System.out.println("姓名:" + name + "
    性别:" + gender + "
    年龄:" + age + "
    分数:" + score);
    50     }
    51 }
    View Code

    对象数组

     1 /**
     2  * 对象数组随机赋值初始化
     3  * 
     4  * @author Administrator
     5  *
     6  */
     7 public class Test03 {
     8     public static void main(String[] args) {
     9         // 创建5个学生
    10         Student[] students = new Student[5];
    11 
    12         // 打印,空数据的信息
    13         for (Student student : students) {
    14             System.out.println(student);// null
    15         }
    16 
    17         // 初始化随机数组分配姓名
    18         String[] names = { "小红", "小黑", "小青", "小紫", "小绿", "小橙", "小蓝", "小黄", "小刚" };
    19         // 对五个学生逐一进行初始化
    20         for (int i = 0; i < students.length; i++) {
    21             // 随机初始化姓名
    22             int index = getRandomNumber(0, names.length);
    23             String name = names[index];
    24             // 随机初始化性别
    25             String sex = getRandomNumber(0, 2) == 0 ? "男" : "女";
    26             // 随机年龄
    27             int age = getRandomNumber(18, 25);
    28             // 随机分数
    29             int score = getRandomNumber(60, 101);
    30 
    31             // 赋值
    32             students[i] = new Student(name, sex, age, score);
    33             students[i].show();
    34         }
    35 
    36     }
    37 
    38     // 获取随机数
    39     public static int getRandomNumber(int min, int max) {
    40         return (int) (Math.random() * (max - min) + min);
    41     }
    42 }
    43 
    44 class Student {
    45     String name;
    46     String sex;
    47     int age;
    48     int score;
    49 
    50     // 创建构造方法初始化属性值
    51     public Student(String name, String sex, int age, int score) {
    52         this.name = name;
    53         this.sex = sex;
    54         this.age = age;
    55         this.score = score;
    56     }
    57 
    58     // 显示学生的基本信息
    59     void show() {
    60         System.out.println("姓名 = " + name + "	年龄 = " + age + "	性别 = " + sex + "	成绩:" + score);
    61     }
    62 }
    View Code

    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 负责调用执行。不需要创建所在类的对象就可以直接运行)

      

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


  • 相关阅读:
    不要让生命的车轮停下,否则再次驱动需要更多的力气
    计算机英语
    知我者谓我心忧,不知我者谓我何求
    Poverty in USA and China
    [转]PCI配置空间简介
    基于OpenGL的起重机模拟
    OpenGL 彩色旋转立方体
    asp.net下载文件几种方式
    Jquery+$.cookie()实现跨越页面tabs导航
    简单自定义实现jQuery验证
  • 原文地址:https://www.cnblogs.com/cao-yin/p/8903816.html
Copyright © 2011-2022 走看看