zoukankan      html  css  js  c++  java
  • Java面向对象--类和对象

    面向对象是相对于面向过程而言的,是软件开发方法。面向对象把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统设计,更贴近事物的自然运行模式。本篇博客介绍Java面向对象的类和对象


    目录:


    面向对象整体概述

    **面向对象概述**

       面向过程,强调的
    是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。

    例子:

    人把大象装进冰箱

    面向对象三大特征

    ☃ 封装 (Encapsulation)

        ☄封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。

    ☃ 继承 (Inheritance)

        ☄继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等

    ☃ 多态 (Polymorphism)

        ☄按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

    面向对象分析问题的思路

    ☃ 根据问题需要,选择问题所针对的现实世界中的实体

    ☃ 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类

    ☃ 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序
    语言,把类构造成计算机能够识别和处理的数据结构

    ☃ 将类实例化成计算机世界中的对象


    类和对象

    类(class)和对象(object)是面向对象的核心概念。

    ☃ 类是对一类事物的描述,是抽象的、概念上的定义

    ☃ 对象是实际存在的该类事物的个体,因而也称为实例(instance)

    ☀ 万事万物皆对象


    Java类及类的成员

    **常见的类的成员**

    ☃ 属性:对应类中的成员变量    称呼:属性=成员变量=field=域、字段

    ☃ 行为:对应类中的成员方法    称呼:方法=成员方法=函数=method

    ☀ 面向对象程序设计的重点是类的设计,设计类也就设计类的成员

    例子:

    package ObjectStudy;
    
    public class Person{       //类
        static String name;    //属性,成员变量
        int age;        //属性,成员变量
        boolean isMarried;    //属性,成员变量
        public static void run(){            //方法,函数
            //执行代码.....
        	System.out.println("run方法");
        }
        public String doSomething(){  //方法,函数
            //执行代码.....
        	name = "李四";
        	return name; 
        }
        //代码块
        {   
            name = "张三";
            age = 18;
            isMarried = false;
        }
        //内部类
        static class Pet{
            String petName;
            int petAge;
        }
        //main方法,代码执行入口
    	public static void main(String[] args) {
    		int num;   //局部变量
    		run();   //本类内定义为static的方法可以在main方法中直接调用,也可以new对象后调用
    		Person person = new Person();   //new一个对象后调用方法或者成员变量
    		person.age = 21;
    		
    		Pet p = new Pet();   // new一个对象后调用方法
    		p.petName = "dfaf";    //调用内部类变量
    		Person.name = "王五";
    		
    		Animal.getAnimalName();   //外部类通过类名.方法名()的方式调用static方法或new一个新对象后调用
    		Animal animal = new Animal();
    		animal.getAnimalName();
    	}
    }
    //外部类,不允许定义为public
    class Animal{
    	static String animalName;  //属性,变量
    	int animalAge;
    	public static String getAnimalName() {   //方法,函数
    		animalName = "鸽子";
    		return animalName;
    	}
    }
    

    ☀ 通常都是通过new对象的方式调用类中的成员,static在合适的情况下使用较好

    ☀ (static)静态变量/方法在整个类中使用的是同一块空间,该类的所有对象对静态变量/方法操作的都是同一块空间,操作后其他对象再调用的就是操作后的成员,static的具体使用之后再详细讲解

    类的语法格式

    创建类的步骤

    ☃ 定义类(考虑修饰符、类名)

    ☃ 编写类的属性(考虑修饰符、属性类型、属性名、初始化值)

    ☃ 编写类的方法(考虑修饰符、返回值类型、方法名、形参等)


    对象的创建和使用

    **对象的创建和使用**

    ☃  创建对象语法:类名 对象名 = new 类名();

    //例如上面的Person类
    Person p1 = new Person();   //创建一个新对象
    

    ☃ 使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)

    //调用name属性,和run()方法
    p1.name = "张三";
    p1.run();
    

    ☀ 一个类可以new出很多个对象,对象之间互不关联,对当前对象成员的处理不会影响到其他对象的成员,静态成员除外(static定义的成员)

    类的访问机制

    ☃ 在一个类中的访问机制: 类中的方法可以直接访问类中的成员变量,main方法除外

    例外:static 方法访问非 static,编译不通过

    ☃ 在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员

    例子:

    public class Student {
    	String name;
    	int age;
    	static double meter;
    	public void run() {
    		System.out.println("跑了" + meter + "米");
    	}
    	public String personMessage() {
    		//在一个类中的访问机制: 类中的方法直接访问类中的成员变量,main方法除外
    		String message = "姓名:" + name + "年龄" +age; 
    		return message;
    	}
    	public static void main(String[] args) {
    		Student student1 = new Student();
    		Student student2 = new Student();
    		student1.name = "张三";
    		student2.name = "李四";
    		student1.age = 18;
    		student2.age = 21;
    //		student1.age = 24;  错误非静态变量不能直接赋值
    		student1.meter = 800;
    		student2.meter = 1000;
    		meter = 1500;
    //		Student.meter = 1200; 静态变量可以直接调用不用new对象
    		student1.run();
    		student2.run();
    		System.out.println(student1.personMessage());
    		System.out.println(student2.personMessage());
    	}
    }
    

    结果:


    内存解析

    堆(Heap)

      此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例(包括成员变量等)以及数组都要在堆上分配。

    栈(Stack)

      通常所说的栈(Stack),是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。方法执行完,自动释放。

    方法区(Method Area)

      用于存储已被虚拟机加载的类信息、类的实例方法、常量、静态变量、即时编译器编译后的代码等数据

    例子:

    Person p1 = new Person();
    p1.name = "Tom";
    p1.age = 1;
    p1.isMale = false;
    Person p2 = new Person();
    p2.age = 1;
    p2.isMale = false;
    System.out.println(p2.name);  //null
    Person p3 = p1;
    p3.age = 10;
    p3.isMale = true;
    //此时p3和p1是同一个对象,两者指向的地址相同,可以理解为p3是p1的小名,代表的还是同一个对象
    

    匿名对象

    我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象

    new Student().meter = 3000;   //匿名函数调用类变量(静态变量)
    new Student().run();          //匿名方法调用成员方法
    

    使用情况

    ☃ 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象

    ☃ 我们经常将匿名对象作为实参传递给一个方法调用


    本博客与CSDN博客༺ཌ༈君☠纤༈ད༻同步发布

  • 相关阅读:
    15.Python略有小成(内置模块Ⅰ)
    14.Python略有小成(自由模块)
    13.Python略有小成(装饰器,递归函数)
    12.Python略有小成(生成器,推导式,内置函数,闭包)
    11.Python初窥门径(函数名,可迭代对象,迭代器)
    python-正则表达式1消-?号除贪婪模式
    python-虚拟环境的搭建-学习20190529
    mysql 创建用户远程连接
    关于Apache php 报500错误
    嗅探主机的网络包并解析成ip地址
  • 原文地址:https://www.cnblogs.com/asio/p/12374409.html
Copyright © 2011-2022 走看看