目录
一、概念
- 我们不能将一个事物称之为一类事物,例如一只鸟我们不能称为鸟类,但是我们需要给一类事物统称,例如大雁,麻雀,燕子,统称为鸟类,在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("这是一个静态方法"); }}
以上代码定义了一个静态属性和静态方法,通过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; }}
输出:
上面就是没有重写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 + '}'; }}
输出结果:
这个结果就看起来很舒服,我们就能看到刚才自己传的有哪些值。
注:打印一个对象,可以直接System.out.println(stu)其实println方法内部会自动调用stu 的 toString() 方法。
来源地址:https://blog.csdn.net/lx00000025/article/details/129812533