类与对象的定义、对象的内存分析、对象的引用传递分析

面向对象:

面向对象时程序一种设计方法,并不代表所有开发者认同面向对象,有人认为面向对象过于复杂,更喜欢基于函数式的编程。

面向对象的前身是面向过程,面向过程是解决问题,面向对象时模块化设计。

面向对象的特点:

  •  封装性:内部的操作对外部而言不可见;
  •  继承性:在上一辈的基础上继续发展;
  •  多态性:最重要的环节,利用多态性才可以得到良好的设计。

在进行面向对象开发:OOA(面向对象分析),OOD(面向对象设计),OOP(面向对象编程)。

所有程序的开发原则都离不开实际生活,面向对象最大的特征可以进行生活的抽象。

类与对象简介:

类与对象是面向对象的核心所在,也是所有概念的基础。类本身属于引用数据类型。

类是一个共性的概念,对象就是一个具体的可以使用的事物。

在开发过程中一定先产生类,而后才可以产生对象,对象的所有操作行为都在类中进行了完整的定义。

类的组成:方法(操作的行为)、属性(变量,描述每一个对象的具体特点)

类与对象的定义与使用:

类的定义使用class关键字,

class  类型名称{    

     // 属性;

     // 属性;

    // 方法();

}

 

此时的方法不在由主类直接调用,而是通过对象调用。

范例:

class Person{   //定义一个类,类名称每个单词的首字母要求大写
    String name;  //表示人的姓名
    int age;
    public void info(){
    System.out.println("name =" + name + ",age = " + age);
    }
}

类中定义了两个属性一个方法,类定义完成之后不能直接使用,如果想使用类必须产生对象

对象的定义:

  • 声明并实例化对象:类名称  对象名称 = new  类名称();
  • 分布进行对象实例化:声明对象:   类名称 对象名称= null;

                                         实例化对象: 对象名称 = new 类名称();

只有对象实例化之后才可以真正使用,而对象的使用时围绕类的

        调用类中的属性:对象.属性 = 内容;

       调用类中的方法:对象.方法();

 

只要出现关键字new,那么就有开辟内存,内存是不可能无限开辟的,性能调优是指调整的内存问题。

范例:

1.声明并实例化对象

public class TestDemo{
    public static void main(String args[]){
        //类名称 对象名称 = new 类名称()
        Person pr = new Person();  //实例化对象
        pr.name = "张三";  //设置对象的属性
        pr.age = 18;    //设置对象的属性
        pr.info();
    }
}

 

2.分布式声明实例化对象

public class TestDemo{
    public static void main(String args[]){
        //类名称 对象名称 = new 类名称()
        Person pr = null;  //声明对象
        pr = new Person();  //实例化对象
        pr.age = 18;    //设置对象的属性
        pr.info();
    }
}

 

上述过程完成了对象的实例化,类的调用。

对象的产生分析:

对象是指引用类型,引用类型指的是内存空间操作。而对于现在的内存:堆内存空间和栈内存空间

     堆内存空间:保存真正的数据;保存的是对象的属性信息;

     栈内存空间:保存的堆内存的地址(每次new一个对象都会出现一个新的地址),堆内存的操作权;如果想简化理解保存的                              是对象的名称;

注意:所有对象(引用数据类型)必须在开辟内存空间后才可以执行。

public class TestDemo{
    public static void main(String args[]){
        //类名称 对象名称 = new 类名称()
        Person pr = null;  //声明对象    
        pr.info();
    }
}

只声明了对象,没有开辟堆内存空间,程序在编译的时候不会产生任务语法错误,但是在执行的时候,会产生错误

java.lang.NullPointerException   在整个开发过程中会经常出现的异常,只有引用数据类型才会出现此类异常。

出现此类错误,就观察该行代码是否实例化对象。

对象引用传递分析:

引用的本质是别名,只不过是放在在栈内存之中,即一块堆内存可以被多个栈内存所指向。

class Person{   //定义一个类,类名称每个单词的首字母要求大写
	String name;  //表示人的姓名
	int age;
	public void info(){
		System.out.println("name =" + name + ",age = " + age);
	}
}
public class TestDemo{
	public static void main(String args[]){
        Person pr1 = new Person();  //实例化对象
        pr1.name = "小于";  //设置对象的属性
        pr1.age = 30;    //设置对象的属性       
        Person pr2 = pr1;  //采用同样的类型接收   //此过程是引用传递操作
        pr2.name = "狗剩";
        pr1.info();
	} 
}

输出的结果:  name = "狗剩",age=“18”

class Person{   //定义一个类,类名称每个单词的首字母要求大写
	String name;  //表示人的姓名
	int age;
	public void info(){
		System.out.println("name =" + name + ",age = " + age);
	}
}
public class TestDemo{
	public static void main(String args[]){
        Person pr1 = new Person();  //实例化对象
        Person pr2 = new Person();   //pr2和pr1都有各自的指向堆内存
        pr1.name = "小于";  
        pr1.age = 30;    
        pr2.name = "张三";
        pr2.age = 20;
        pr2 = pr1;  //首先将pr2指向的堆内容断开,pr2 原先的指向就变成了垃圾内存,并且将pr1 的指向 
                    //  给了pr2
        pr2.name = "狗剩";//改的就是pr1 的堆内容
        pr1.info();
	} 
}

输出结果:name = "狗剩",age=30

       pr2原先指向的堆内容为垃圾内存,开发过程中的垃圾空间指的是没有任何栈内存指向的堆内存空间,垃圾空间会不定期的被java 中的垃圾收集器(GC)实现空间的释放。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个Java对象的示例,用于计算球的体积。这个例子涉及到参数传值机制。 ```java public class Sphere { private double radius; public Sphere(double radius) { this.radius = radius; } public double getRadius() { return radius; } public void setRadius(double radius) { this.radius = radius; } public double getVolume() { double volume = (4.0 / 3.0) * Math.PI * Math.pow(radius, 3); return volume; } public static void main(String[] args) { Sphere sphere = new Sphere(5.0); System.out.println("半径为 " + sphere.getRadius() + " 的球体积为 " + sphere.getVolume()); } } ``` 在这个例子中,我们定义了一个Sphere来表示球体。该包含了一个私有的半径属性和一些方法来获取和设置半径以及计算球体积。 在构造函数中,我们将半径作为参数传递进来并将其存储在私有的半径属性中。我们还定义了一个getVolume()方法来计算球体积。在该方法中,我们使用Math库中的PI和pow函数来计算球体积。最后,我们使用System.out.println()语句打印出半径和球体积。 在主方法中,我们首先创建了一个Sphere对象,并将半径设置为5.0。然后,我们调用了getRadius()和getVolume()方法来获取半径和球体积,并使用System.out.println()语句将它们打印出来。 在Java中,参数传递是通过值传递(pass by value)来实现的。这意味着,当我们将一个对象作为参数传递给一个方法时,实际上是将对象的引用(即内存地址)传递给了该方法。因此,当我们在方法中修改对象的属性时,实际上是修改了原始对象的属性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值