一、概念
- 我们不能将一个事物称之为一类事物,例如一只鸟我们不能称为鸟类,但是我们需要给一类事物统称,例如大雁,麻雀,燕子,统称为鸟类,在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() 方法。
总结
到此这篇关于java类的定义与使用的文章就介绍到这了,更多相关java类定义内容请搜索好代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好代码网!