四、Java 类和对象以及变量

四、Java 类和对象以及变量

Java 是面向对象的编程语言,类是面向对象的重要内容,可以把类当成一种自定义类型,可以使用类来定义变量,这种类型的变量统称为引用变量,也就是说所有类都是引用类型。

4.1定义类

面向对象编程中有两个重要概念:类(class)和对象(object,也被称为实例,instance),**其中类是一批对象的抽象,可以把类理解成某种概念;对象才是一个具体存在的实体。**例,平时吃的水果就是一个抽象的类,而具体的苹果、橘子、香蕉之类的才是类包含的具体存在的实体。

4.1.1定义类

简单语法如下:

[修饰符] class 类名
{
	构造器定义
	成员变量
	方法
}

上面的修饰符可以是 public、final、abstract 或者忽略

对于一个类定义而言,包含三种最常见的成员:构造器、成员变量和方法。

  • 成员变量:用于定义该类或该类的实例所包含的状态数据
  • 方法:定义该类或该类的实例的行为特征或功能实现
  • 构造器:构造该类实例,Java 通过使用 new 来调用构造器,从而返回该类的实例

4.1.2定义成员变量

语法格式如下:

[修饰符] 类型  成员变量名 [=默认值];

**修饰符:**可以是 public、protected、private、static、final,其中public、protected、private 只能出现其一,可以和 static、final 组合起来修饰成员变量。

**类型:**可以是任何类型,包括基本类型和引用类型。

**成员变量名:**合法的标识符即可。

4.1.3定义方法

语法格式如下:

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

**修饰符:**可以是 public、protected、private、static、final、abstract,其中public、protected、private 只能出现其一;abstract 和 final 只能出现其一,它们可和 static 组合来修饰方法。

方法返回值类型:可以是任何类型,包括基本类型和引用类型。 如果声明了方法返回值类型,则方法体内必须有一个有效的 return 语句。倘若一个方法没有返回值,则必须使用 void 来声明没有返回值。

**形参列表:**用于定义该方法可接受的参数。(调用该方法必须传入对应的参数值)

4.1.4定义构造器

语法格式如下:

[修饰符] 构造器名(形参列表)
{
    构造器执行体
}

**修饰符:**可省略,可是public 、protected、private 其一

**构造器名:**必须和类名相同

**形参列表:**和定义方法形参列表的格式完全相同

注:构造器既不能定义返回类型,也不能使用 void 声明没有返回值;如果做了以上两件任一,编译不会出错,但 java 会把构造器当成方法来处理,它就不是构造器了。

4.2定义基本的使用

//定义一个Person类
public class Person {
    public String name;
    public int age;

    public void say(String content)
    {
        System.out.println(content);
    }
    public static void main(String[] args) {
        //定义拍变量同时为p变量赋值
        Person p = new Person();
        //由于没有定义构造器,Java提供默认的构造器,输出为null也就是没有值的
        p.say(p.name);
        //访问p的实例变量,直接赋值
        p.name = "BGR";
        p.age = 21;
        //调用say()方法
        p.say(p.name);
        //下一行代码是错误的,因为传入的实参类型和方法的形参类型没有保持一致
        //p.say(p.age);
        //也可以直接进行实例变量的输出
        System.out.println(p.age);

    }
}
/*res:
null
BGR
21

4.3方法的参数传递机制

Java 里的方法是不能独立存在的,调用方法也必须使用类或对象作为主调者。如果声明的方法中有形参声明,则在调用方法时必须给这些形参指定参数值,调用方法时实际传给形参的参数值也被称为实参。

Java 里的方法的参数传递方式只有一种:值传递——就是将实际参数的副本(也就是复制品)传入方法内,而参数本身不会受到任何影响。

4.3.1形参个数可变方法

Java 允许定义形参个数可变的参数,从而允许为方法指定数量不确定的形参。在定义方法时,在最后一个形参的类型后增加(…),则表明该形参可接受多个参数值,而多个参数值将被当成数组传入。以下是代码:

    public static void test(int a, String... books) {
        //输出传入的多个参数
        for (String book : books) {
            System.out.println(book);
        }
        System.out.println(a);
    }

    public static void main(String[] args) {
        //调用test方法,并传入参数
        test(3, "BGR", "爱学习", "Java");
    }
/*res:
BGR
爱学习
Java
3
4.3.2方法重载

Java 允许同一个类里定义多个同名方法,只要形参列表不同就行。这种一个类中包含多个方法的方法名相同,但形参列表不同,则被称为方法重载。以下是重载的代码:

public class Demo {
    
    public  void test() {
        System.out.println("无参数");
    }
    public  void test(String msg) {
        System.out.println("重载的test方法:"+msg);
    }
    
    public static void main(String[] args) {
        //调用test方法,并传入参数
        Demo d = new Demo();
        //调用无参数的test方法
        d.test();
        //调用有参数的test方法,并传入字符串
        d.test("Java");
    }
}
/*res:
无参数
重载的test方法:Java

4.4成员变量和局部变量

java 中,根据定义变量位置不同,可将变量分为两大类:成员变量和局部变量

成员变量指的是在类里定义的变量

局部变量指的是在方法里定义的变量。

其中类变量可以理解为类的成员变量,因为它是和类本身共存亡;实例变量可理解为实例的成员变量,因为它和实例共存亡。

局部变量根据定义形式不同,分为以下三种:

  • 形参:在定义方法签名时定义的变量,作用域是整个方法内有效
  • 方法局部变量:在方法体内定义的局部变量,作用域是从定义该变量的地方生效,到该方法结束时失效
  • 代码块局部变量:在代码块体内定义的局部变量,作用域是从定义该变量的地方生效,到该代码块结束时失效

注,局部变量必须显式初始化,否则不能进行访问。

代码如下:

    public static void main(String[] args) {
        {
            //定义一个代码块变量a
            int a;
            //下面代码会出现错误,因为a还未进行初始化
           // System.out.println(a);
            //为a变量赋值,也就是初始化
            a = 5;
            System.out.println(a);
        }
        //下面错误,因为a只在代码块中存在,出了代码块便不存在了
        //System.out.println(a);
    }
/*res:
5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值