首页 > 基础资料 博客日记

Java--类和对象

2023-11-20 18:00:58基础资料围观282

这篇文章介绍了Java--类和对象,分享给大家做个参考,收藏Java资料网收获更多编程知识

面向对象

Java是一门面向对象的语言,面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。

一.类

1.类的创建

命名规则: 大驼峰

class为定义类的关键字,ClassName为类的名字,{}中为类的主体。
类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法。

定义一个狗类

class Dog{
    //属性,字段,成员变量:这些是定义在方法外部,类内部的
    public String name;
    public int age;
    //成员方法
    public void dogSay(){
        System.out.println("wangwangwang");
    }
}

采用Java语言将狗类在计算机中定义完成,经过javac编译之后形成.class文件,在JVM的基础上计算机就可以识别了。

在定义一个类时,一般包含成员变量和成员方法。

默认初始化

在成员变量未初始化时,会默认初始化为其对应的0值

2.类的实例化

用类类型创建对象的过程,成为类的实例化
分为两步
1.为对象分配内存
2.调用合适的构造方法

Date date = new Date();

3.注意事项

1.一个文件一般只定义一个类
2.main方法所在的类一般要使用public修饰
3.public修饰的类必须要和文件名相同

1.引用不可以指向引用

这代表两个引用数据类型指向同一个对象

 Dog dog1 = new Dog();
 Dog dog2 = dog1;
 //相当于
  int[] arr1 ={1,2,3};
  int[] arr2 = arr1;

2.一个引用不能指向多个对象
** 3.引用=null**
不代表指向null,而是代表这个引用不指向任何对象。

利用类的创建来交换值

因为基本数据类型是不能交换的

class MyValue{
    public int val;
}
public class test {
    public static void swap(MyValue val1,MyValue val2){
        int temp = val1.val;
        val1.val = val2.val;
        val2.val = temp;
    }
    public static void main(String[] args) {
        MyValue myValue1 = new MyValue();
        myValue1.val = 10;
        MyValue myValue2 = new MyValue();
        myValue2.val = 20;
        swap(myValue1,myValue2);
        System.out.println(myValue1.val);;
        System.out.println(myValue2.val);;
    }
}

swap创造出形参 val1 和 val2 ,此时他们的类型也是MyValue。
利用temp进行交换。
这里注意val1 和 vla2 形参 形参 形参 !!!

二.this

由于局部变量优先使用,在进入setDate中时,public void setDate(int year,int month,int day),括号里面的属于局部变量,优先使用,造成的结果就是 year(你输入的) = year; 如下图

public class Date {
    public int year;
    public int month;
    public int day;
    public void setDate(int year,int month,int day){
        year = year;
        month = month;
        day = day;
    }
    public void ptintDate(){
        System.out.println("年:"+year+"月:"+month +"日:"+day);
    }

    public static void main(String[] args) {
        Date date = new Date();
        date.setDate(1945,9,1);
        date.ptintDate();
    }
}

由于优先使用局部变量的条件,编译并不能通过这时就需要使用this

1.使用this

加上this就可以成功赋值了。

谁调用当前方法,谁就是this

 public void setDate(int year,int month,int day){
        this.year = year;
       this.month = month;
        this.day = day;
    }

2.可使用this来调用其他构造方法来简化

构造方法中讲解

三.构造方法

3.1概念

:构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。

3.2特性

  1. 名字必须与类名相同
  2. 没有返回值类型,设置为void也不行
  3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
  4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)

3.3不带参数的构造方法

是在new的过程中调用的
一般使用public修饰,方法名和类名一样,没有返回值,void也不行。
在创建对象时,由编译器自动调用,并在对象的生命周期中只调用一次。

public class Date {
    public int year;
    public int month;
    public int day;
    public Date(){
        this.year = 2008;
        this.month = 8;
        this.day = 8;
        System.out.println("执行了不带参数的构造方法");
    }
    public static void main(String[] args) {
        Date date = new Date();
    }
}

3.4带参数的构造方法

public class Date {
    public int year;
    public int month;
    public int day;
    public Date(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public static void main(String[] args) {
        Date date2 = new Date(1999,45,3);
    }
}

当使用自定义的构造方法后,再删除时,再new则编译不通过

参考特性第三条

3.3可使用this来调用其他构造方法来简化

 public Date(){

        this(1988,8,8);//这里调用了带参数的Date方法
        System.out.println("调用了不带参数的构造方法");
    }
    public Date(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("调用了带参数的构造方法");
    }
    public void print(){
        System.out.println("年:"+year+ "月:"+month+ "日"+day);
    }
    public static void main(String[] args) {
        Date date = new Date();
        date.print();
    }

前提

1前面不能有其他语句,如果有则报错。

   public Date(){
        System.out.println("调用了不带参数的构造方法");
           this(1988,8,8);
    }

2.不能形成闭环,例如在Date()中调用带参数的,而在带参数中右调用Date()

public Date(){
//        this.year = 2008;
//        this.month = 8;
//        this.day = 8;
        this(1988,8,8);
        System.out.println("调用了不带参数的构造方法");
    }
    public Date(int year,int month,int day){
        this();
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("调用了带参数的构造方法");
    }


如上会形成闭环,造成错误。
码字不易,感谢观看
如果对你有帮助的话,记得点赞👍评论+关注吧


文章来源:https://blog.csdn.net/2202_75795446/article/details/134230625
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云