当前位置:   article > 正文

【Java】类和对象_java类与对象的关系

java类与对象的关系

目录

类的定义和使用

一、对象和类的关系

二、构造方法

三、this关键字及其用法

1、修饰成员变量

2、修饰方法

四、static关键字以及用法

1、static修饰属性

 2、static修饰方法

3、 static修饰的静态域(静态属性,静态方法)和成员域(成员属性,成员方法)之间的关系

4、static变量的初始化

五、代码块

1、普通代码块

2、构造块

3、静态代码块


什么是面向对象 OOP:在java中一切皆对象,找对象,用对象。

三个重要思想:封装,多态,继承。

类的定义和使用

一、对象和类的关系

类内的方法叫成员方法,类内的变量叫成员变量。

一个源文件只能由一个主类 public class,但是class声明的普通类可以存在很多个。

类是一个模板,没有具体的意义,该类的所有对象都具备的成员属性和成员方法(行为)定义在类中。不同对象的属性值和具体表现的行为都是不同的。

通过产生的新类型产生具体对象就是类的实例化。当对象产生时,成员变量才有初始值。成员属性和成员方法必须通过具体的对象来调用。

  1. public class Test {
  2. public static void main(String[] args) {
  3. dog dog = new dog();
  4. dog.name = "大黄";
  5. dog.bark();
  6. dog.wag();
  7. }
  8. }
  9. class dog {
  10. String name;
  11. public void bark(){
  12. System.out.println(name+"汪汪汪!");
  13. }
  14. public void wag(){
  15. System.out.println(name+"摇尾巴!");
  16. }
  17. }

 如上创建了普通类dog,一个成员变量name,两个成员方法bark和wag。

建立了新的对象dog,对name进行了初始化,调用了两个方法。

二、构造方法

初始化对象调用构造方法,构造方法就是为了产生对象,给对象属性做初始化操作。

构造方法和类名称相同,没有返回值类型声明,构造方法可以重载(重载的个数不同)。

当类中没有明确定义构造方法,编译器会生成默认的无参构造,若明确定义了构造方法,默认的无参构造就不再产生。

构造方法在创建对象时,由编译器自动调用,且指在对象产生时调用一次。

三、this关键字及其用法

1、修饰成员变量

直接在类中寻找同名的成员变量。

在自己创建的构造方法中使用this.name和this.age给名字和年龄赋值,如果不加this则会在该方法中寻找同名变量则无法赋值。

  1. public class staticTest {
  2. public static void main(String[] args) {
  3. Japanese j1 = new Japanese("小泉",70);
  4. System.out.println(j1.toString());
  5. }
  6. }
  7. class Japanese{
  8. String name;
  9. int age;
  10. public Japanese(String name, int age) {
  11. this.name = name;
  12. this.age = age;
  13. }
  14. public static void test(){
  15. System.out.println("静态方法test");
  16. }
  17. public static void fun(){
  18. System.out.println("静态方法fun");
  19. }
  20. public String toString() {
  21. return "Japanese{" +
  22. "name='" + name + '\'' +
  23. ", age=" + age +
  24. ", country='" + country + '\'' +
  25. '}';
  26. }
  27. }

2、修饰方法

2.1修饰成员方法

在一个成员方法中调用另一个成员方法。

  1. public class number {
  2. public static void main(String[] args) {
  3. Person person = new Person("洋洋",22);
  4. person.test();
  5. }
  6. }
  7. class Person{
  8. String name;
  9. int age;
  10. public Person(String name, int age) {
  11. this.name = name;
  12. this.age = age;
  13. }
  14. public void test(){
  15. this.fun();
  16. }
  17. public void fun(){
  18. System.out.println("姓名为"+this.name+",年龄为"+this.age);
  19. }
  20. }

 如上述代码,在test方法中调用了fun函数。

 2.2调用构造方法

必须写在构造方法中的首行,并且不能成环。

  1. ublic class number {
  2. public static void main(String[] args) {
  3. dog dog = new dog("大黄","黄色");
  4. }
  5. }
  6. class dog {
  7. String name;
  8. String color;
  9. public dog(){
  10. System.out.println("自己定义的无参构造!");
  11. }
  12. public dog(String name, String color) {
  13. this(name);
  14. System.out.println("自己定义的name和color的赋值构造");
  15. this.color = color;
  16. }
  17. public dog(String name) {
  18. this();
  19. System.out.println("自己定义的namer的赋值构造");
  20. this.name = name;
  21. }
  22. }

如图创建对象时调用的是自己定义的赋值给name和color的构造函数,在该构造函数中调用了给name赋值的构造函数,有调用了无参构造函数。

3、表示当前对象引用

  1. public class number {
  2. public static void main(String[] args) {
  3. Person person = new Person("洋洋",22);
  4. System.out.println(person);
  5. person.test1();
  6. }
  7. }
  8. class Person{
  9. String name;
  10. int age;
  11. public Person(String name, int age) {
  12. this.name = name;
  13. this.age = age;
  14. }
  15. public void test1(){
  16. System.out.println(this);
  17. }
  18. }

test1方法中就调用了当前对象,所以 输出的结果和直接数值对象是一样的。

四、static关键字以及用法

表示静态,与类相关,和具体的对象无关。

1、static修饰属性

称之为类属性,存放于JVM的方法区。该类的所有对象共享此属性。

  1. public class staticTest {
  2. public static void main(String[] args) {
  3. Japanese j1 = new Japanese("小泉",70);
  4. System.out.println(j1.toString());
  5. }
  6. }
  7. class Japanese{
  8. String name;
  9. int age;
  10. static String country = "日本";
  11. public Japanese(String name, int age) {
  12. this.name = name;
  13. this.age = age;
  14. }
  15. public String toString() {
  16. return "Japanese{" +
  17. "name='" + name + '\'' +
  18. ", age=" + age +
  19. ", country='" + country + '\'' +
  20. '}';
  21. }
  22. }

 在Japanese类中用static修饰了country变量,所以在定义时就对其进行赋值,不需要在生成对象时再次赋值就可以直接显示它的country。

 2、static修饰方法

类方法,直接通过类名称调用,与对象无关。

一个类的工具方法一般设计为静态方法,与具体的对象无关。

  1. public class staticTest {
  2. public static void main(String[] args) {
  3. Japanese.fun();
  4. Japanese.test();
  5. }
  6. }
  7. class Test{
  8. public static void test(){
  9. System.out.println("静态方法test");
  10. }
  11. public static void fun(){
  12. System.out.println("静态方法fun");
  13. }
  14. }

 直接用类的名称调用用static修饰的成员方法,不能用对象调用。

3、 static修饰的静态域(静态属性,静态方法)和成员域(成员属性,成员方法)之间的关系

不能在静态方法中访问成员域。

在成员方法中可以访问静态域但是不推荐,一般还是使用类名称。

4、static变量的初始化

静态变量一般就地初始化或在静态代码块初始化。

五、代码块

1、普通代码块

直接定义在方法内部,不加任何修饰符定义的代码块称为普通代码块。

用于解决变量重名问题。

2、构造块

直接定义在类中,使用{}的代码块称之为代码块。

特点:每当产生对象时就会默认调用构造块,构造块优先于构造方法执行。

  1. public class CodeSquare {
  2. public CodeSquare(){
  3. System.out.println("1、无参构造");
  4. }
  5. {
  6. System.out.println("2、构造块");
  7. }
  8. public static void main(String[] args) {
  9. CodeSquare c1 = new CodeSquare();
  10. CodeSquare c2 = new CodeSquare();
  11. }
  12. }

 创建了两个类,则构造方法和构造块都调用了两次,每次构造块都在构造方法前面。

3、静态代码块

使用static修饰,直接定义在类中的代码块称为静态代码块。

static修饰主方法所以在主方法中也不能使用this调用别的类的方法或者属性。

特点:静态代码块在类加载时执行一次,和具体产生对象无关。若有多个静态代码块,按照代码的书写顺序依次执行。

静态代码块优先于所有别的代码块。

  1. public class CodeSquare {
  2. public static void main(String[] args) {
  3. Demoo d1 = new Demoo();
  4. }
  5. }
  6. class Demoo{
  7. static int i;
  8. public Demoo(){
  9. System.out.println("1、无参构造");
  10. }
  11. {
  12. System.out.println("2、构造块");
  13. }
  14. }

静态代码块在构造块前面,构造块在构造方法前面。 

 主类中的静态代码块优先于主方法执行。

  1. public class CodeSquare {
  2. static {
  3. System.out.println("3、主方法的静态块");
  4. }
  5. public static void main(String[] args) {
  6. System.out.println("4、主方法");
  7. CodeSquare c1 = new CodeSquare();
  8. }
  9. }

主方法 静态代码块在主方法前面。 

4、同步代码块

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/1011100
推荐阅读
相关标签
  

闽ICP备14008679号