java类的定义

目录

  • 一、概念
  • 二、使用
    • 1.成员变量
    • 2.成员方法
    • 3.权限修饰符
    • 4.静态方法
  • 三、重写toString方法

一、概念

  • 我们不能将一个事物称之为一类事物,例如一只鸟我们不能称为鸟类,但是我们需要给一类事物统称,例如大雁,麻雀,燕子,统称为鸟类,在Java中我们对这种统称需要用到类的概念。
  • 类是同一类事物的统称,将现实世界的一个事物抽象成对象,类就是这类事物的统称,如鸟类,人类,家禽类。类是构造对象时所依赖的规范。一只鸟会有一对翅膀,他可以用这对翅膀进行飞行,基本上所有的鸟类都有“有翅膀”这个特性和用这对翅膀飞行的功能,这样的具有相同特性和行为的一类事物就称为类,类的思想就是这样的。
  • 类是封装对象的属性和行为的载体,在Java语言中,类对象的行为是以方法的形式定义的,对象的属性是以成员变量的形式定义的,所以类包括对象的属性和方法。

二、使用

1.成员变量

对象的属性也称为成员变量,成员变量可以是任意类型,成员变量的作用域是整个类
定义一个学生类:

public class Student {
    private String name;//name属性
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

上面定义了一个name属性并写了它的get和set方法。

2.成员方法

在刚才例子中的成员方法就是setName和getName,一个是设置名字一个是获取名字的方法。成员方法中可以设置任何类型的参数,也可以在成员方法中调用其他成员方法。
上面的this指的是自己,意思就是调用自己内部的属性或者方法。

3.权限修饰符

public,private,default,protected是java的四大修饰符,下面分别主要介绍四者之间的区别:

  • public是权限最大的修饰符,他可以修饰类,成员变量,成员方法,构造方法。被public修饰后,可以再任何一个类中,不管同不同包,任意使用。
  • private可以修饰成员变量,成员方法,构造方法,不能修饰类(此刻指的是外部类,内部类不加以考虑)。被private修饰的成员只能在其修饰的本类中访问,在其他类中不能调用,但是被private修饰的成员可以通过set和get方法向外界提供访问方式。
  • defalut即不写任何关键字,它可以修饰类,成员变量,成员方法,构造方法。被默认权限修饰后,其只能被本类以及同包下的其他类访问。
  • protected可以修饰成员变量,成员方法,构造方法,但不能修饰类(此处指的是外部类,内部类不加以考虑)。被protected修饰后,只能被同包下的其他类访问。如果不同包下的类要访问被protected修饰的成员,这个类必须是其子类。
    还有一个是final
    final 修饰类,类不能被继承,修饰变量只能赋值一次,修饰方法方法不能被重写
修饰符 本类 同一个包的类 其他包的类
public 可访问 可访问 可访问
private 可访问 不可访问 不可访问
protected 可访问 可访问 不可访问

4.静态方法

定义了静态方法就可以直接用对象.方法来直接调用,就不需要先创建对象再调用方法了,静态变量和静态方法通常是为了提供共享数据或方法,如下:

public class test {
    public static void main(String[] args) {
        System.out.println(Student.name);//使用 对象.属性 调用
        Student.method();//使用 对象.方法 调用
    }
}
class Student {
    static String name="王五";
    public static void method(){
        System.out.println("这是一个静态方法");
    }
}

java类的定义_第1张图片

以上代码定义了一个静态属性和静态方法,通过Student.属性或者Student.方法来调用,就不需要先new对象再调用了

三、重写toString方法

其实对于一般的对象来说都会有这个方法,这个方法的目的,主要就是将对象按字符串的方式输出出来,用白话说就是:使用文字描述这个对象里各个变量是什么值 ,这个变量是什么类型的变量等 ,并且任何类都从Object继承了这个方法,你不重写toString()方法的话输出的就是一个内存地址,也就是哈希码值。并不是输出这个类的各个变量的值,记得不重写好像只打印对象的类型而已。
返回的是 getClass().getName() + “@” +Integer.toHexString(hashCode());
也就是 类名 + @ +hashCode的值


比如下面的例子:

public class test {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.setName("zhangsan");
        stu.setAge(18);
        System.out.println(stu);
    }
}
class Student {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setName(String name) {
        this.name = name;
    }
}

输出:
java类的定义_第2张图片
上面就是没有重写tostring方法打印出来的东西,是什么我们也看不懂,只知道它是个对象的地址,不利于我们观看


下面是重写了toString方法的:

public class test {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.setName("zhangsan");
        stu.setAge(18);
        System.out.println(stu);
    }
}
class Student {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String toString() {//重写方法
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

输出结果:
java类的定义_第3张图片
这个结果就看起来很舒服,我们就能看到刚才自己传的有哪些值。
注:打印一个对象,可以直接System.out.println(stu)其实println方法内部会自动调用stu 的 toString() 方法。

你可能感兴趣的:(Java基础,java,开发语言,jvm)