Java基础_0302:类和对象
定义类
class Book { // 定义一个新的类
String title; // 书的名字
double price; // 书的价格
/**
* 输出对象完整信息
*/
public void getInfo() { // 此方法将由对象调用
System.out.println("图书名称:" + title + ",价格:" + price);
}
}
对象定义格式
格式一:声明并实例化对象
类名称 对象名称 = new 类名称 () ;
格式二:分步完成
声明对象:类名称 对象名称 = null ;
实例化对象:对象名称 = new 类名称 () ;
操作类结构:
对象.属性:表示要操作类中的属性内容;
对象.方法():表示要调用类中的方法。
使用类 —— 在主类中使用Book类
class Book { // 定义一个新的类
String title; // 书的名字
double price; // 书的价格
public void getInfo() { // 此方法将由对象调用
System.out.println("图书名称:" + title + ",价格:" + price);
}
}
public class TestDemo {
public static void main(String args[]) {
Book bk = new Book() ; // 声明并实例化对象
bk.title = "Java开发" ; // 操作属性内容
bk.price = 89.9 ; // 操作属性内容
bk.getInfo() ; // 调用类中的getInfo()方法
}
}
程序执行结果:
图书名称:Java开发,价格:89.9
对象内存分配
类本身属于引用数据类型,对于引用数据类型的执行分析就必须结合内存操作来看,首先给出读者两块内存空间的概念
- 堆内存(heap):保存每一个对象的属性内容,堆内存需要用关键字new才可以开辟,如果一个对象没有对应的堆内存指向,那么将无法使用;
- 栈内存(stack):保存的是一块堆内存的地址数值,可以把它想象成一个int型变量(每一个int型变量只能存放一个数值),所以每一块栈内存只能够保留一块堆内存地址;

内存分析图

声明两个对象
public class TestDemo {
public static void main(String args[]) {
Book bookA = new Book() ; // 声明并实例化第一个对象
Book bookB = new Book() ; // 声明并实例化第二个对象
bookA.title = "Java开发" ; // 设置第一个对象的属性内容
bookA.price = 89.8 ; // 设置第一个对象的属性内容
bookB.title = "JSP开发" ; // 设置第二个对象的属性内容
bookB.price = 69.8 ; // 设置第二个对象的属性内容
bookA.getInfo() ; // 调用类中的方法输出信息
bookB.getInfo() ; // 调用类中的方法输出信息
}
}
程序执行结果:
图书名称:Java开发,价格:89.8
图书名称:JSP开发,价格:69.8
分步的方式实例化对象
public class TestDemo {
public static void main(String args[]) {
Book bk = null; // 声明对象
bk = new Book(); // 实例化对象(开辟了堆内存)
bk.title = "Java开发"; // 操作属性内容
bk.price = 89.9; // 操作属性内容
bk.getInfo(); // 调用类中的getInfo()方法
}
}
程序执行结果:
图书名称:Java开发,价格:89.9
分步实例化对象

对象引用传递
public class TestDemo {
public static void main(String args[]) {
Book bookA = new Book() ; // 声明并实例化第一个对象
Book bookB = null ; // 声明第二个对象
bookA.title = "Java开发" ; // 设置第一个对象的属性内容
bookA.price = 89.8 ; // 设置第一个对象的属性内容
bookB = bookA ; // 引用传递
bookB.price = 69.8 ; // 利用第二个对象设置属性内容
bookA.getInfo() ; // 调用类中的方法输出信息
}
}
程序执行结果:
图书名称:Java开发,价格:69.8
深入观察引用传递
public class TestDemo {
public static void main(String args[]) {
Book bookA = new Book() ; // 声明并实例化第一个对象
Book bookB = new Book() ; // 声明并实例化第二个对象
bookA.title = "Java开发" ; // 设置第一个对象的属性内容
bookA.price = 89.8 ; // 设置第一个对象的属性内容
bookB.title = "JSP开发" ; // 设置第二个对象的属性内容
bookB.price = 69.8 ; // 设置第二个对象的属性内容
bookB = bookA ; // 引用传递
bookB.price = 100.1 ; // 利用第二个对象设置属性内容
bookA.getInfo() ; // 调用类中的方法输出信息
}
}
程序执行结果: 图书名称:Java开发,价格:100.1
引用传递与垃圾产生
Java基础_0302:类和对象的更多相关文章
- java基础知识—类和对象
1.对象的特征---类的属性 每个对象的每个属性都有特定的值 对象的操作---类的方法 2.封装 对象同时具有属性和方法两项属性. 对象的属性和方法同时被封装在一起,共同体现事物的特性,二者相辅相成, ...
- Java基础教程——类和对象
视屏讲解:https://www.bilibili.com/video/av48272174 面向过程 VS 面向对象 面向过程:强调步骤. 面向对象:强调对象. 面向对象的特点就是:隐藏具体实现的细 ...
- Java基础-3类和对象声明与创建
一).在1和2中有粗略介绍过类和对象的概念,在这里简单回顾一下: 对象与类:一个实际或者虚拟的物体,这个物体既是我们的对象,这个物体呢又是属于一个分类,如动物类,人类 二).创建对象: 在创建对象的时 ...
- Java基础IO类之对象流与序列化
对象流的两个类: ObjectOutputStream:将Java对象的基本数据类型和图形写入OutputStream ObjectInputStream:对以前使用ObjectOutputStrea ...
- 【BigData】Java基础_类和对象的基本使用
1.需求描述 ①定义一个学生类,然后根据该类创建3个具体的学生对象 类中包含信息:学生姓名.学号.年龄.性别.所在地址 ②将这三个学生对象存入到数组中 ③然后将数组对象按照学生的年龄倒序排序 2.代码 ...
- 【JAVA零基础入门系列】Day11 Java中的类和对象
今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...
- 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结
086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...
- java基础面向对象之类与对象
java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 •封装性:保护内部结构的安全性 •继承性:在已 ...
- 第二十九节:Java基础知识-类,多态,Object,数组和字符串
前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...
- java基础-BigDecimal类常用方法介绍
java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...
随机推荐
- PHP中empty,is_null,isset的区别
有时候分不清这几个的区别,特此记录,以备不时之需 isset 判断变量是否已存在 empty 判断变量是否为空或为0 is_null 判断变量是否为NULL 变量 empty is_null isse ...
- 第一篇-Win10打开txt文件出现中文乱码
如果刚开始安装的是英文的Win10系统,那么打开txt文件时很容易出现乱码问题.包括打开cmd窗口,也是不能显示中文的.当然,麻烦的处理方法是: 在cmd中想要显示中文:先输入chcp 936,之后中 ...
- python解决json序列化时间格式
简单实例 import json from datetime import datetime from datetime import date info = { "name": ...
- testng优化:失败重跑,extentReport+appium用例失败截图,测试报告发邮件
生成的单html方便jenkins集成发邮件,= = 构建失败发邮件 参考:https://blog.csdn.net/galen2016/article/details/77975965 步骤: 1 ...
- 转:在Struts 2中实现文件上传
(本文转自:http://www.blogjava.net/max/archive/2007/03/21/105124.html) 前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题 ...
- mac 修改root密码
1.用当前用户登录进去bash: 输入命令: sudo passwd root
- 【强大的视频编辑工具】Adobe Premiere Pro CC 2019 for Mac
[简介] PR CC是视频编辑爱好者和专业人士必不可少的视频编辑工具.它可以提升您的创作能力和创作自由度,它是易学.高效.精确的视频剪辑软件.PR CC提供了采集.剪辑.调色.美化音频.字幕添加.输出 ...
- Oracle_异常
问题1 描述:plsql客户端列值中的中文都成了问号 分析:客户端和服务端编码不一致所致 解决:1.查询服务端数据库编码 SQL> select userenv('language') from ...
- ESXI6时间源快速同步
1.使用SSH会话连接到ESXi主机. 2./etc/ntp.conf 在文本编辑器中打开 添加内天tos maxdist 303.运行此命令以访问 likewise shell /usr/lib/v ...
- MySql笔记二:命令简介
从笔记二开始讲解一些简单的命令,这些我在SQL Server里面都讲过了,什么主键,约束啥的数据库这些都是相通的,所以MySql这里,不讲,粗略过一遍. 使用命令框登录MySql mysql -u r ...