JAVA面向对象编程 JAVA语言入门基础

类与对象的概念

类 (Class) 和对象 (Object)面向对象程序设计方法中最核心的概念

是对某一类事物的描述(共性),是抽象的、概念上的定义;而对象则是实际存在的属该类事物的具体的个体(个性),因而也称为实例(Instance) 。所谓“道生一,生万物”,所谓类就是“道”,其“万物”为对象。

面向对象程序设计思想的重点是类的设计,而不是对象的设计。

类的构成

类主要由数据成员(属性,Field)与函数成员(方法,Method)封装而成。

如下抽象定义:

[类修饰符] class 类名称

 {

           [修饰符] 数据类型  属性名;// 属性

           [修饰符] 类名称 (形参列表) {…} // 构造方法

           [修饰符] 返回值类型  方法名(形参列表){…} // 方法

}

定义类的语法格式

定义类

类修饰符可以是 public、abstract、final,类修饰符也可以省略

类名只要是合法的标识符即可(推荐驼峰规则)

类体可以由属性、方法、构造方法组成

属性的语法格式

定义属性:

语法格式:[修饰符] 属性类型 属性名 [= 默认值];

修饰符包括:public、private、protected、final、static 等

属性类型可以是基本数据类型或者引用数据类型

属性名遵守驼峰规则(第一个单词首字母小写,后面每个单词首字母大写)

默认值可以是基本数据类型字面值,也可以是对象

static 关键字修饰的属性被称为类属性否则被称为实例属性

方法的语法格式

定义方法

语法格式:[修饰符] 返回值类型 方法名(形参列表) {方法体}

方法的修饰符可以是 public、protected、private、static、final、abstract

方法名推荐用驼峰规则(同属性)

返回值类型可以是基本类型或引用类型。如果无返回值,要用 void 来声明

形参列表,可以由零个或多个组成,彼此用逗号(“,”)隔开

用 static 关键字修饰的方法被称为类方法,否则被称为实例方法

构造方法的语法格式

构造方法

语法格式:[修饰符] 类名(形参列表) {构造方法体}

修饰符可以是 public、protected、private

构造方法名必须和类名相同

构造方法没有返回值

如果程序员没有为 Java 类提供任何构造方法,则系统会默认为这个类提供一个无参的构造方法,一旦程序员提供了自定义的构造方法,则系统不再提供默认的构造器

例子:

定义圆柱体类型

class Cylinder{                            //定义圆柱体类 Cylinder
    private double radius;            //声明属性 radius
    private double height;           //声明属性 height
    private double pi=3.14;         //声明属性 pi 并赋初值
    
    public Cylinder(){                   // 构造方法
        radius = 1.0;
        height = 1.0;
    }
    
    public double area( ) {               //定义方法 area(),用来计算底面积
        return pi*radius* radius;
    }
    public double volume( ) {         //定义方法 volume(),用来计算体积
        return (pi*radius* radius)*height;
    }
}

 UML 图

UML 图 (Unified Modeling Language Diagram,UML) 称为统一建模语言或标准建模语言,是一个支持模型化和软件系统开发的图形化语言。

例子:定义一个圆柱体类 Cylinder,并创建相应对象,然后计算圆柱体的底面积和体积

// 定义一个圆柱体类 Cylinder,并创建相应对象,然后计算圆柱体的底面积和体积
class Cylinder {
    double r;
    double h;
    double dimMianJi() {
        return r * r * Math.PI;
    }

    double tiJi() {
        return dimMianJi() * h;
    }
}

public class App {
    public static void main(String[] args) {
        Cylinder Cylinder = new Cylinder();
        Cylinder.r = 2.8;
        Cylinder.h = 5;
        System.out.println("Area: " + Cylinder.dimMianJi());
        System.out.println("Volume: " + Cylinder.tiJi());
    }
}

对象的产生和使用

创建对象(实例)的方法:new 操作符

语法格式:类名 x = new 类名(实参列表)

x 是一个引用,关联到对象 new 类名(实参列表)

对于实例属性和实例方法,只能通过对象来调用

调用方式:x.实例属性名,x.实例方法名(实参列表)

对于静态属性和静态方法,即可以通过类调用,也可以通过对象调用

调用方式1:类名.静态属性名,类名.静态方法名(实参列表)

调用方式2:x.静态属性名,x.静态方法名(实参列表)

 例子:同时创建多个圆柱体的实例

class Cylinder {
    double r;
    double h;

    double dimMianJi() {
        return r * r * Math.PI;
    }

    double tiJi() {
        return dimMianJi() * h;
    }
}

public class App {
    public static void main(String[] args) throws Exception {
        Cylinder c1 = new Cylinder();
        Cylinder c2 = new Cylinder();
        c1.h = 1;
        c1.r = 2;
        c2.h = 3;
        c2.r = 4;
        System.out.println("c1.r = " + c1.r);
        System.out.println("c2.h = " + c2.h);
    }
}

 this 引用

每个实例方法和构造方法中均包含一个隐含形参:this 引用

this 引用指向当前对象,三种应用场景

第一,访问实例方法或实例属性,尤其是当形参与实例属性同名是,用 this 引用来区分形参和实例属性(this.实例属性名 = 形参名)// Cylinder(double radius, double height) {this.radius = radius; this.height = height;}

第二,返回当前对象:return this;

第三,调用其他构造方法:this(其他构造方法的形参列表)

static 方法中没有 this 引用

实例方法可以直接调用其他的实例方法,也可以调用其他的静态方法

例子:

public class App {
    double r;
    double h;

    public App setr(double r) {
        this.r = r;
        return this;
    }

    public App seth(double h) {
        this.h = h;
        return this;
    }

    public void setdh(double r, double h) {
        seth(h).setr(r);
    }

    public static void main(String[] args) throws Exception {
        App a = new App();
        a.setdh(2, 3);
        System.out.println(a.h + " " + a.r);
    }
}

方法扩展

方法的所属性

方法不能独立定义,必须定义在类中

方法不能独立执行:静态方法可以用类或者对象调用,实例方法只能用对象调用

方法的参数传递机制:值传递:基本数据类型,引用传递:引用类型

数组作为形参,数组作为返回值例子:

找数组最小值

public class App {
    public static int min(int[] nums) {
        int result = nums[0];

        for (int i = 1; i < nums.length; i++) {
            if (result > nums[i])
                result = nums[i];
        }

        return result;
    }

    public static void main(String[] args) throws Exception {
        int[] a = new int[] { 1, 2, 3, 4, 5 };
        System.out.println("min = " + min(a));
    }
}

数组作为返回值:将一个矩阵转置后输出

public class App {
    static void daying(int[][] a) {
        for (int[] row : a) {
            for (int shu : row) {
                System.out.print(shu + "\t");
            }
            System.out.println();
        }
    }

    static int[][] diaohuan(int[][] b) {
        int[][] result = new int[b[0].length][b.length];// 注意行列的数量
        for (int i = 0; i < b.length; i++) {
            for (int j = 0; j < b[0].length; j++) {
                result[j][i] = b[i][j];
            }
        }
        return result;
    }

    public static void main(String[] args) {
        int[][] mat = new int[][] { { 1, 2, 3 }, { 4, 5, 6 } };
        daying(mat);
        System.out.println();
        daying(diaohuan(mat));
    }
}

可变形参

定义方法时,在最后一个形参的类型后增加三点“…”(String… strs),多个参数值被当成数组存入strs中。

递归调用:在方法中调用自己 

属性扩展

成员变量(属性):在类范围里定义的变量;

局部变量:在方法或者代码块内部定义的变量。

不管是成员变量还是局部变量都遵守相同的命名规则(驼峰规则)。

成员变量分为类成员变量(类属性)和实例成员变量(实例属性)。类属性被所有对象共享,实例属性属于特定的对象

当类被加载时,类成员变量就在内存中分配一块内存空间

当对象被创建时,实例成员就在内存中分配一段内存空间 

访问方法:实例变量只能通过实例来访问;类变量既可以通过实例访问,也可以通过类访问

局部变量可分为三种:① 形参② 方法局部变量③ 代码块局部变量

除了形参外,其他局部变量都必须显式地初始化

Java 里允许局部变量和成员变量重名。这时需要用 this 引用或者类名来区分两者。

局部变量仅在方法或者代码块内有效

当方法执行完成时,局部变量会自动销毁。

  • 33
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值