Java基础-简聊类与对象

本文简要探讨了Java中的类和对象概念,强调了面向对象编程的基础。类作为对象的模板,包含了属性和方法。对象是通过new关键字和构造方法创建的,每个对象都有独立的属性和共享的方法。此外,还讲解了引用变量如何访问对象,以及静态与实例变量的区别,this关键字的使用,以及方法参数传递中的值传递原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简聊类和对象

我们在了解类和对象前,先聊下面向对象程序设计,面向对象程序设计就是通过对象来进行程序设计,对象表示一个可以明确标识的实体,比如:一辆车、一个人、一朵花等等,每个对象都有它自己独特的标识:状态和行为;

类:

由N多对象,抽取出象的部分(简称抽象),像的部分包含(属性和方法)称为类的特征,然后再根据这个特征判断其它对象是否属于该类别;

对象:

对象是通过 new 关键字调用构造函数创建出来的。

public class Phone{
    // 手机的牌子
    String brand;
    // 手机的类型(智能机、音乐手机等)
    String type;
    // 手机的价格
    double price;

    public void info(){
        System.out.println(brand+"---"+type+"---"+price);
    }

    //无参的构造方法
    public Phone(){

    }
    // 有参的构造方法
    public Phone(String brand,String type,double price){
        this.brand=brand;
        this.type=type;
        this.price=price;
    }
        
}
public class TestPhone {
    public static void main(String [ ]args){
        Phone p1=new Phone(); // 创建出一个手机对象
        System.out.println("p1="+p1);
        p1.brand="三星";
        p1.type="s20";
        p1.price=4999.00;
        p1.info();//调用方法
        System.out.println("------------------------");
        Phone p2=new Phone("苹果", "4s", 6999.9);
        p2.info();

        Phone p3=p1;//把p1的地址"复制一份"赋值给p3
        p3.info();
        System.out.println("p1="+p1+"\tp3="+p3);
        p2=null;//将null赋值给p2

    }
}

每个对象的属性都是相互独立的而方法都是共享的。

使用new关键字创建对象。

构造方法:

构造方法是在使用new关键字创建对象时才被调用,构造方法的作用就是初始化对象中的属性;

构造方法与一般方法的区别:

  • 构造方法的方法名和类名相同;
  • 没有返回值,连void都没有;
  • 当创建对象时才会被调用;
  • 和一般方法一样也是可以有重载方法的(无参构造方法、有参构造方法);
//无参的构造方法
public Phone(){

}
// 有参的构造方法
public Phone(String brand, String type){
    this.brand = brand;
    this.type = type;
}
// 有参的构造方法
public Phone(String brand,String type,double price){
    this.brand = brand;
    this.type = type;
    this.price = price;
}
// 类中默认就有无参构造方法

引用变量访问对象和调用数据域和方法:

我们访问对象是通过对象类型变量来访问,该变量包含了对对象的引用。使用操作符: . 来访问对象数据和方法;

在java中除了基本数据类型外就是引用数据类型,创建对象会在堆内存中分配空间,然后通过引用变量来访问,引用地址的变量就是引用变量,也就是引用数据类型。

声明对象类型变量有两种方式:

Phone p ; //只声明,未指向一个引用地址
Phone p = null; //p指向一个空地址
//两者基本无区别,null是引用类型的默认值
Phone p2=new Phone("苹果", "4s", 6999.9);

//表示创建一个Phone对象,并返回该对象的引用,赋给Phone类型的p2变量。  变量p2包含了一个Phone对象的引用地址。 但通常情况下,直接称变量p2为Phone对象。

引用类型变量和基本类型变量的区别:

每一个变量都代表一个存储值的内存位置。 变量声明时,需要告知编译器该变量可以存储什么类型的值。对基本类型变量来说,对应内存所存储的值就是基本类型值。而对于引用类型变量来说,对应内存所存储的值是一个引用,指向对象在内存中的位置。

int a = 1;
int b = a; // 将a的实际值赋给b        
Phone p = new Phone();
Phone p2 = p; //将p的引用地址赋给p2 , p和p2指向同一对象
p2.brand = "iphone"; 
System.out.println(p.brand); // iphone

总结:

  • 将引用类型变量赋值给另外一个同类型的引用变量,那么这两个引用变量会指向同一个对象,而不是独立的对象。

  • 如果想要指向一个具有同样内容,但不是同一个对象,可以使用clone()方法。

  • 如果不再需要某个对象时,也就是不引用该对象,可以将引用类型变量赋值null,表示引用为空。 若创建的对象没有被任何变量所引用,JVM会自动回收它所占的空间。

静态与实例的区别:

静态变量和静态方法属于类本身,静态变量被由类创建出来的对象所共享,在静态方法中不能直接访问实例变量和调用实例方法;

public class Demo {
    public int a = 5; // 实例变量
    public static int b = 10; // 静态变量
    public Demo(int a) { // 构造方法
        this.a = a; 
    }
    public static void main(String[] args) { // 静态方法
        Demo d1 = new Demo(6);
        Demo d2 = new Demo(8);
        System.out.println(d1.a + " " + d2.a); // 6  8, 两个对象互不相关 
        d1.b = 15; //d1对象修改静态变量 b
        System.out.println(d2.b); //影响d2对象
    }
     public void hello(){ // 实例方法,属于通过类创建出来的对象
         // ....
     }
}

静态变量将变量值存储在一个公共地址,被该类的所有对象共享,当某个对象对其修改时,会影响到其他对象。而实例的实例变量则是存储在不同的内存位置中,不会相互影响 ;

this关键字的使用:

关键字this表示的是当前的对象,引用对象本身, 可以用于访问实例的数据域 ;

作用:

this.属性名称 – 指的是访问类中的成员变量,用来区分成员变量与局部变量;

class Person{
	private String name;
	private int age;
	private String gender;
	Person(){}
	Person(String name,int age,String gender){
		this.name = name;
		this.age = age;
		this.gender = gender;
	}
	public void setName(String name){
		name = name;
	}
	public String getName(){
		return name;
	}
	public void setAge(int age){
		age = age;
	}
	public int getAge(){
		return age;
	}
	public void setGender(String gender){
		gender = gender;
	}
	public String getGender(){
		return gender;
	}

}

方法传递 - 引用参数:

方法是一种功能的集合,表明可以做什么,封装了实现功能的代码,想要实现某个功能只需要调用相关的方法即可,我们不需要关注方法的实现细节;

  1. java中的方法可以传递参数,参数的传递方法就是值传递。

  2. 参数有形参和实参,定义方法时写的参数叫形参,真正调用方法时,传递的参数叫实参。

  3. 调用方法时,会把实参传递给形参,方法内部其实是在使用形参。

  4. 所谓值传递就是当参数是基本类型时,传递参数的值,比如传递i=10,真实传参时,把10赋值给了形参。

  5. 当参数是对象时,传递的是对象的值,也就是对象的首地址。就是把对象的地址赋值给形参。

传递基本数据类型与传递引用类型的区别:

  • 基本数据类型的变量中直接存放数据值本身,所以改的时候改的是数据值本身;
  • 引用类型不同的地方在于真正的数据并没有在栈区的变量中保存,而是在堆区里面保存着,所以虽然也拷贝了一份,也是副本,但是二者指向的是同一块堆区

引用数据类型就好比说是两个小伙伴共同拥有一双鞋子,其中一个把它穿破了,那么另外一个小伙伴也会受到影响

基本数据类型就好比说是仿造了一双相同的鞋子,其中一个穿破了并不影响另外一个小伙伴穿

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值