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

    面向过程和面向对象的区别

    面向过程,强调的是功能行为,是将实现一个功能的步骤编写在一个函数中,以函数为最小单位。

    面向对象,是将需要的功能封装进一个对象中,使一个对象具有很多的功能特征,以类/对象为最小单位

    一、类和对象

    类:是对一类事物抽象性的描述,是一种概念上的定义,比如:人类,鸟类、虫类

    对象:是实际存在的某个类的个体,通常也称为实例(instance),比如:中国人,杜鹃,蚂蚁

    成员变量:是一个类的属性,用于定义一些类的属性特征,比如:长、宽、高、体重

    成员方法:是一个类的行为特征,用来执行一些类的特定行为,比如:吃饭、飞、运动

    一个类的基本构成

    class Person{ // 修饰符 class 类名
        // 属性声明
        int age;
        String name;
        // 方法声明
        public void speak(){ // 修饰符 返回值类型 方法名(){}
            System.out.println("I am a man");
        }
        
        public void eat(String food){ // 带参
            System.out.println("I eating " + food);
        }
    }
    

    类的基本使用

    // 声明对象类型并指向一个new 的对象
    Person p = new Person(); 
    p.age = 12; // 为对象属性赋值
    p.name = "zhangsna"; 
    p.speak(); // 对象调用方法
    p.eat("bread");
    

    说明:如果创建了一个类的多个对象,对于类中定义的属性,每个对象都有一套副本,且互不干扰。

    类的访问机制

    • 在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static,编译不通过)
    • 在不同类中的访问机制:先创建要访问类的对象,再通过对象去调用类中的成员变量和方法。

    匿名对象

    我们可以不做对象的声明和对象名的赋值操作,直接通过new 对象的方式调用对象中方法。

    new Person().show();
    

    属性

    语法格式:

    private int age;
    // 修饰符 数据类型 属性名
    

    类中的变量分为成员变量和局部变量,成员变量是指类中的变量,局部变量是指方法或代码块中定义的变量。

    类中的属性就是成员变量,成员变量有默认的初始值,可以使用修饰符。

    以下是对象属性的默认初始值

    成员变量类型 初始值
    byte 0
    short 0
    int 0
    long 0L
    float 0.0f
    double 0.0
    char 0 或写为:‘u0000’(表现为空)
    boolean false
    引用类型 null

    属性的赋值过程

    属性的赋值顺序

    1. 默认初始化 int age;
    2. 显式初始化 int age = 23;
    3. 构造器中初始化 this.age = age;
    4. 通过“对象.属性“或“对象.方法”的方式赋值

    方法

    方法是类或对象行为特征的抽象,用来完成某个功能操作,将功能封装成方法的目的是实现代码重用。

    基本格式:

    class Person{
        public void show(){ // 修饰符 返回值类型 方法名 (参数类型 形参1, 参数类型 形参2...){}
            System.out.println("jello");
        }
    }
    // void 表示没有返回值
    

    若有返回值,使用关键字return返回指定类型的数据

    注意:方法被调用一次,就会执行一次。返回值类型为void时, 也可以使用return关键字,只是这时是用于结束当前方法执行。

    构造器(构造方法)

    构造器的特征:

    • 与类名相同
    • 不声明返回值类型,不能有return语句
    • 不能被staticfinalsynchronizedabstractnative修饰

    构造器的作用:创建对象,为对象进行初始化

    语法格式:

    public Person(String name){	// 修饰符 类名 (参数列表)
        this.name = name;	// 初始化属性值
    }
    public Person(){} // 重载
    

    构造器分类

    • 隐式无参构造器(系统默认提供)
    • 显式定义一个或多个构造器(无参、有参)

    注意:

    • Java语言中,每个类都至少有一个构造器
    • 默认构造器的修饰符与所属类的修饰符一致
    • 一旦显式定义了构造器,则系统不再提供默认构造器
    • 一个类可以创建多个重载的构造器
    • 父类的构造器不可被子类继承,但子类可以通过super调用

    方法的重载

    重载(overload): 在一个类中,允许出现多个相同方法名但形参不同的方法。

    特点:与返回值的类型无关,只看参数列表,参数列表的个数或参数类型不同都构成重载,调用时,根据参数列表的不同来区分。

    例如:

    public void add(int x, int y){}
    public int add(int x, int y, int z){
        return x;
    }
    

    重载丰富了方法的参数类型,使一个方法的参数多元化,适用于不同的场景

    可变参数的方法

    JavaSE5.0中提供了Varargs机制,允许定义能和多个实参相匹配的形参,从而简化了传递多个实参的方式。

    public void test(int age, String...hobby){
        for(int i = 0; i < hobby.length(); i++){
            System.out.println(hobby[i]);
        }
    };
    

    说明:

    1. 声明格式:方法名(参数的类型名 ...参数名)
    2. 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
    3. 可变个数形参的方法与同名的方法之间,彼此构成重载
    4. 可变参数方法的使用与方法参数部分使用数组是一致的
    5. 方法的参数部分有可变形参,需要放在形参声明的最后
    6. 在一个方法的形参位置,最多只能声明一个可变个数形参

    方法参数的值传递机制

    Java里方法的参数传递方式只有一种:值传递。即将实际参数的“”传递进方法中.

    形参是基本数据类型时,传递的是基本数据类型变量的数据值

    形参是引用数据类型时,传递的是引用数据类型变量的地址值

    扩展:

    char[] arr1 = new char[3];
    System.out.println(arr1); // 猜猜结果
    

    递归方法

    递归方法:一个方法体内调用自身

    注意:递归一定要有一个结束条件,否则会无限递归,最终爆栈退出

  • 相关阅读:
    Android跨进程通信AIDL服务*
    Android跨进程通信广播(Broadcast)*
    Android跨进程通信Content Provider*
    Android跨进程通信访问其他应用程序的Activity*
    Android RecyclerView实现加载多种条目类型*
    Android ListView多布局*
    Android屏幕横竖屏切换和生命周期管理的详细总结*
    Android中的asserts和res/raw资源目录*
    Android系统服务 —— WMS与AMS*
    Android中为什么主线程不会因为Looper.loop()方法造成阻塞
  • 原文地址:https://www.cnblogs.com/welisit/p/11979221.html
Copyright © 2011-2022 走看看