对象的定义与使用
程序员文章站
2022-04-02 10:40:51
...
对象的定义及使用
- 有了类,想要使用类,需要通过对象来调用,如果要产生对象,必须要实例化出一个对象,在对象中调用类(即调用对象的属性、方法)
产生对象必须使用如下语法格式来完成:
- 获取实例化对象两种方法:
- 声明并实例化对象:类名称 对象名称 = new 类名称();
- 分步骤完成:
(1)声明对象:类名称 对象名称 = null;(建议给初始值)
(2)实例化对象:对象名称 = new 类名称();
- 当获取了实例化对象之后,需要通过对象进行类中的操作调用,两种调用方式:
- 调用类中的属性:实例化对象.成员属性;
- 调用类中的方法:实例化对象.方法名称();
Com1.setBrand(“Hasee”,7499.00); //调用Com1对象的setBrand方法 - 如果对象属性内容并未设置初始值,则默认对象的属性、方法的内容的默认值。
两块最为常用的内存空间:
1.堆内存:保存的对象的具体信息,在程序之中,堆内存空间开辟是通过关键字“new”完成的。
- 开辟空间内存的*别
- 堆内存都有其对应的物理地址
2.栈内存:保存的是一块堆内存的地址,即:通过栈内存地址找到堆内存地址,然后得到对象的信息。
- 声明并实例化对象:只能保存一个堆内存的地址数据,如果发生更改,则之前的地址数据将从此栈内存中彻底消失。
- 注意:所有的对象在调用类中的属性和方法的时候必须要实例化完成
package Hello;
public class Hello{
public static void main(String[] args) {
//
PC Com1 = new PC(); //声明并实例化Com1对象
/*
* PC:实例化的对象属于类
* Com1:实例化的对象名称,实际上是一个物理地址(栈内存)
* new:为Com1这个对象开辟一个属性存储空间(堆内存空间)
* PC():定义堆内存的内容的空构造方法,有才是完整格式。开辟了一个该类的对象Com1并将com1中的属性、方法都设置为默认值。
*/
Com1.setBrand("Hasee",7499.00); //调用Com1对象的setBrand方法
System.out.println("品牌:" + Com1.getBrand() + "\n价格:" + Com1.getPrice());
}
}
class PC{ //创建电脑PC类
private String Brand; //定义这个类的一个属性
private Double Price; //两个属性都以private方式封装
public void setBrand(String Brand,Double Price){ //set方法设置private封装的属性的内容
this.Brand = Brand;
this.Price = Price;
}
public String getBrand() {
return this.Brand;
}
public Double getPrice() { //两个get方法是获取private封装的属性的内容
return this.Price;
}
}
内存的引用传递:
- 本质:同一块堆内存空间可以被不同的栈内存指向,也可以更换指向。
System.out.println("栈内存指向没有改变时");
Com1.Human = "李四";
Com2.Human = "张三";
System.out.println("一号购买者:" + Com1.Human + "\n二号购买者:" + Com2.Human);
System.out.println("栈内存指向改变时");
Com1.Human = Com2.Human; //将一号购买者名字记录指向二号购买者
System.out.println("一号购买者:" + Com1.Human + "\n二号购买者:" + Com2.Human);
System.out.println("品牌:" + Com1.getBrand() + "\n价格:" + Com1.getPrice());
引用与垃圾产生分析:
- 垃圾:没有任何栈内存指向的堆内存叫垃圾,就是没有地址了(或是说指向他的地址改变了),只有内容还存在。这就叫~。垃圾将被GC(Garbage Collector,垃圾收集器),不定期进行回收,并且释放无用内存空间,但是如果垃圾过多,一定将影响到GC的处理性能,从而降低整体的程序性能,所以在实际开发中,尽量少产生垃圾,越少越好。
补充上次笔记
面向对象与面向过程区别:
-
拿篮球场的例子来说,面向过程是步骤化的
篮球场上,告诉某一个队员,什么时候,站在什么位置,要拿着球或是抢断球,同时运球(需要描述怎样运球),然后怎样跑去跑过去,怎样去投篮等。但现实肯定不会这样/*简单想象篮球场为一个4*4的二维数组 *int p = 1; //假设队员为1 *球员从[0][0]的位置到[3][3]的位置为投篮成功 *这是一场加塞==假赛,位置都固定了 *a[3][3] *1 0 3 0 //0 2为过防 3为传球 *0 3 2 0 //1 *0 2 3 0 //2 *2 2 0 0 //3 *当球员从00位置依次向01 02 03 10 ... 33位置,因为知道对应位置会发生什么事, *按照设置好的程序做就好 */
-
面向对象,模块化
将球员在球场上碰到了何种情况,做出什么应对。
将各种会碰到的情况抽象出来,比如:队员,设置传球这一方法,当在不确定的球场中遇到了3情况就可以使用传球这一方法
封装
- private 对类的外部不可见,对内部可见
设置或取得属性:setter、getter ——> setXxx()、getXxx()- 设置(修改 )属性的方法:public void setName() ;
- 获取属性的方法:public String getName() ;
类中所有属性都得用private封装(绝大部分),并且属性如果要进行访问,必须提供getXxx\setXxx方法。
上一篇: PHP之消息队列实现及应用
推荐阅读
-
使用Java实现面向对象编程——JAVA关键字与保留字说明及使用
-
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
-
php面向对象全攻略 (三)特殊的引用“$this”的使用_PHP教程
-
Visual Studio 2017的安装与使用
-
成绩排序(sort与qsort的使用)
-
Python学习---面向对象---类的定义、创建及对象方法的调用
-
在Linux命令行下查询当前所使用的shell版本与种类的方法
-
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
-
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
-
EmmyLua的安装与使用