Java基础:第三十讲 对象的创建和访问

R语言,charls数据库清洗、基线特征描述、logistics回归、rcs模型、森林图 【代码】R语言,charls数据库清洗、基线特征描述、logistics回归、rcs模型、森林图。 阅读详情

我们从现实世界中的对象抽象出类,然后根据现实世界中的类编写软件系统中的类,而程序在运行过程中是对象之间在交互,需要不停的创建对象,下面介绍如何创建对象。

1、对象的实例化

对象的创建是通过关键字new调用类的构造方法完成的,也称为对象的实例化,例如要创建Person的对象,可以使用下面的代码:

new Person();

如果构造方法需要参数,在调用的时候需要提供参数,例如:

new Person("张三");

2、对象引用

为了以后能够访问该对象,通常需要创建一个对象引用来指向该对象,例如下面的代码:

Person p = new Person("张三");

Person p的作用是什么呢?类似于int a,定义了一个变量p,类型为Person,我们通常称这个p为对象引用,而Person是这个对象引用的类型,有时候我们所说的对象指的是这个对象的引用,对对象的访问是通过这个引用完成的,与C++中的指针类似。

3、对象方法访问

接下来就可以访问新创建的对象的方法了。

p.setHeight(165);

只要Person的方法允许访问,就可以通过p加上“.”进行访问。

需要注意,在访问某个对象时要确保对象引用指向了对象实例,例如下面的代码将产生错误:

Person p;

p.setName("李四");

这时候会报错,错误为:NullPointException。虽然定义了对象引用p,但是没有把p指向某个具体的对象(又称为实例),所以p的值是null,所以在调用p的方法的时候会产生NullPointException。

4、对象成员的初始化

构造方法用于对成员变量进行初始化,如果在构造方法中没有对某个成员变量进行初始化,则系统会给定默认值。如果是基本类型的成员变量,给定的默认值如下:

char类型:编码为0的字符

数字(byte short int long):0

float类型和double类型:0.0

布尔类型:false

如果是引用类型的成员变量(非基本类型),则给定默认值为null,通常可以在实例化对象之后在对成员变量赋值,可以通过set方法完成。有时候也会提供专门的初始化访问,例如initialize。例如:

Person p = new Person();

p.setName("李四");

p.setHeight(175);

在调用对象的引用类型成员变量的时候,一定要确保不是null。

5、完整的代码

下面是完整的代码:

package test;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Person {

 private int[] a;
 
 private int height;

 private Date birthday;

 private String name;
 
 public Date getBirthday() {
  return birthday;
 }

 public void setBirthday(Date birthday) {
  this.birthday = birthday;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public Person() {

 }

 public Person(String name) {

  this.name = name;

 }

 public Person(String name, int height) {

  this(name);

  this.height = height;

 }

 public int getHeight() {
  return height;
 }

 public void setHeight(int height) {
  this.height = height;
 }

 public static void main(String args[]){
  // 创建对象并实例化
  Person p = new Person();
  
  // 对成员变量赋值
  p.setName("李四");
  p.setHeight(175);
  String birthday = "1989-3-11";
  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
  try{
   p.setBirthday(df.parse(birthday));
  }catch(Exception e){
  }
  
  // 输出成员变量的值
  System.out.println("姓名为:"+p.getName());
  System.out.println("身高为:"+p.getHeight());
  System.out.println("生日为:"+df.format(p.getBirthday()));
 }
}

关于异常处理,在后面介绍。关于日期参见:第十六讲 日期和时间的使用

李绪成 优快云 Blog: http://blog.youkuaiyun.com/javaeeteacher
Pcileech(DMA)开源项目简述 希望大DMA家能正确认识FPGA,正确使用DMA技术,对于市场上各类伪装成花里胡哨设备的FPGA板卡它的本质是不会变的,不要上当受骗。 阅读详情

相关推荐

COMSOL模拟CO2驱替CH4:多物理场耦合建模与工程应用详解

在非常规天然气开发与碳封存工程中,多孔介质内的渗流、吸附与岩石变形相互耦合,使得CO2驱替CH4的产能预测和CO2封存评估无法仅靠经验公式完成。以达西定律描述裂隙流动、以扩展Langmuir方程刻画竞争吸附、用应力-吸附-渗透率关系关联煤岩变形,是多物理场耦合数值模拟的核心路径。COMSOL Multiphysics凭借内置渗流、固体力学与组分传递接口,能够将这些机制整合为可参数化扫描的仿真模型,为注气压力、井距、渗透率演化等方案设计提供量化依据。围绕CO2驱替CH4模拟的建模流程、参数取法与结果判读,可形

weixin_29574585的博客 163

通过JNI创建java对象和访问java属性

首先,定义一个简单的 Java 类,例如MyClass通过使用NewObject,你可以在 C++ 代码中创建 Java 对象并调用其方法。这在需要从本地代码与 Java 代码交互时非常有用。确保正确处理类和方法的查找,以及局部引用的管理,以避免内存泄漏。首先,定义一个简单的 Java 类,例如MyClass通过使用,你可以在 C++ 代码中分配 Java 对象的实例,而不调用构造函数。这在需要手动初始化对象的字段时非常有用。确保正确处理类和字段的查找,以及局部引用的管理,以避免内存泄漏。

SXXYNHHXX的博客 1659

Unity Addressable资源缓存路径自定义指南:告别C盘爆满烦恼

本文详细介绍了如何自定义Unity Addressable系统的资源缓存路径,解决其默认存储在C盘导致的磁盘空间不足问题。通过配置CacheInitializationSettings并编写编辑器脚本,开发者可以将缓存迁移至项目目录,实现资源的集中管理,提升团队协作效率与开发环境一致性。

pytorch8learner的博客 475

Java对象的创建、内存布局和访问定位

对象的创建 当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析或初始化过。如果没有,那就先执行相应的类加载过程 指针碰撞:为对象分配空间的任务实际上便等同于把一块确定大小的内存块从Java堆中划分出来。假设Java堆中内存是绝对规整的,所有被使用过的内存都被放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配的内存就仅仅是把指针向空闲方向挪动一段与对象大小相等的距离,这种分配方式

qq_45039852的博客 1万+

从零开始:MTK ISP调试中的ImagiqSimulator实战指南

本文详细介绍了MTK ISP调试中ImagiqSimulator的实战应用,从环境准备、参数加载到核心模块调整,提供全面的调试流程指南。重点讲解了DM模块参数优化技巧和常见问题解决方案,帮助工程师高效完成ISP调试工作,提升图像处理质量。

weixin_29168813的博客 492

5G核心网NAS消息解析:从协议字段到实际抓包分析(附Wireshark示例)

本文深入解析5G核心网NAS消息的实战分析方法,从协议字段解读到实际Wireshark抓包诊断。通过详解扩展协议鉴别器、安全头类型、流程事务标识等核心字段,并结合注册流程故障排查实例,指导工程师快速定位NAS层问题,提升5G网络调试与协议分析效率。

grass的博客 532

[Java基础] 创建一个对象数组

先从一段错误的代码切入,然后在后面提出正确的创建方法。先考虑这段代码:public class Student { private int age; private String name; public void Student() { this.age = 21; this.name = "someone"; } public v

lkxlaz的博客 1万+

知识图谱与人工智能本体论:构建机器认知的语义基石

本文探讨了知识图谱与人工智能本体论如何作为机器认知的语义基石,让AI从‘知道数据’迈向‘理解知识’。文章详细拆解了本体论的核心构件与构建方法,并阐述了从本体到知识图谱的实践路径,包括知识获取、融合、存储及推理应用,最终分析了其在智能搜索与专家系统等场景中带来的根本性重塑。

nginx7reverse的博客 912

JAVA基础day06: 面向对象——类、对象的创建和使用

JAVA基础day06: 面向对象——类、对象的创建和使用面向对象(上)面向过程和面向对象JAVA的类和对象类和对象的理解类及类的创建创建一个类类的属性的使用类的方法的使用对象的创建和使用类的成员——属性的详解属性(成员变量) 和 局部变量类的成员——方法的详解方法的声明格式权限修饰符返回值类型定义多个形参return关键字的使用拓展:递归方法 面向对象(上) (本人也是初学编程,结合B站尚硅谷的JAVA视频,谈谈自己的理解,如有错误,欢迎评论指正) 面向过程和面向对象 面向过程编程,强调的是功能行为,

wx222y的博客 4394

YOLOv10改进,YOLOv10二次创新C2f结构采用WTConv卷积(感受野的小波卷积),ECCV 2024

WTConv 的核心思想是通过结合卷积神经网络(CNN)的强大特征提取能力与小波变换的多尺度特性,来实现大感受野的卷积操作,同时避免传统大卷积核带来的参数爆炸问题。传统的卷积操作通过滑动小窗口在图像上逐步执行局部特征提取,感受野的大小直接取决于卷积核的尺寸。随着卷积核的增大,参数量呈指数增长,导致网络训练效率降低、计算资源消耗增加。为解决这些问题,WTConv 提出了在小波域中执行卷积操作的策略。小波变换是一种常用于信号处理的技术,能够将信号分解为不同频率成分。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1025

四麦轮机器人精准运动控制系统开发方案

本文提出了一套四麦轮机器人精准运动控制系统的开发方案,基于鲸鱼机器人专业版平台实现高精度的直线行走和平移功能。系统采用双闭环PID控制架构(速度环与距离环),结合编码器和IMU传感器反馈,通过图形化编程与C语言混合开发实现。方案详细阐述了四麦轮运动学模型、控制逻辑设计、传感器数据处理及核心算法实现,目标在3米行程内达到距离误差±10mm、角度偏差±2°的精度。全文涵盖理论分析、系统设计到程序实现的全流程,为机器人精准运动控制提供了完整解决方案。

huanghm88的专栏 275

Java 对象的创建和访问

1. 对象的创建 Java 中对象的创建就是在堆上分配内存空间的过程,下面主要是针对 new 关键字创建的普通 Java 对象。包括以下过程: 检测类是否被加载 为对象分配内存 为分配的内存空间初始化零值 对对象进行其他设置 执行init方法 检测类是否被加载 虚拟机遇到一条 new 指令时,会先去常量池中查找这个类的符号引用。如果能找到符号引用,说明此类已经被加载到方法区,可以继续执行;如果...

weixin_44419313的博客 257

第十六篇:Camx IFE 、OPE 各 port口功能定义

需要注意的是,类似 CSLTFEPortIdRawDump 是没有downscale功能的,所以如果遇到fov不正确的问题,可以排除下TFE这边的 output port是否被接到了 CSLTFEPortIdRawDump 上面来。我们知道Camx 的IFE 、OPE有不少的output port,各个port是有哪些功能的呢?老一点的框架平台,采用的TEF、OPE。

239

Java对象的创建和访问

一、对象创建流程 Java对象都是通过关键字new指令,来创建的。 1、类加载检查 检查能否能在常量池中定位到一个类的符号引用 检查该类符号引用代表的类是否已被加载、解析和初始化过 2、为对象分配内存并初始化 对象所需内存的大小在类加载完成后便可完全确定 内存分配 根据 Java堆内存是否绝对规整 分为两种方式:指针碰撞 & 空闲列表 内存分配完成后,虚拟机对内存空间进行初始化(不包括对...

just Go! 371

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java 对象的创建、内存布局和访问定位

Java是一门面向对象的编程语言,在Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象通常仅仅是一个new关键字而已,而在虚拟机中,对象的创建又是怎样的一个过程呢?

技术分享,读书笔记,面试宝典,算法积累,应有尽有~ 1042

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java对象的创建、内存布局和访问定位

java对象的创建、内存布局和访问定位

yozzs的博客 1089

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java对象的内存布局,创建,访问图解

进都进来了,看完再走啊~ 本文并不是说教你如何找对象的,毕竟博主自个都没有!!!!!! 本文主要讲解我们在编写Java程序的时候一个new关键字,后面可能隐藏了哪些技术! Java对象的内存布局,创建,访问详解 Java是一门面向对象的编程语言,Java程序运行过程中无时无刻都有对象被创建出来。在语言层面,创建对象通常(例外:复制 ,反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(普通对象,不包括数组和Class对象等)的创建又是怎样一个过程呢? 一、对象的内存布局(对象大概长啥样) 想要找对象.

小超的博客 686

细探究,Java对象创建过程和访问的奥秘

【1】对象创建的过程 当虚拟机遇到一条含有“new”的指令时,会进行一系列对象创建的操作。 ① 检查常量池中是否有即将要创建的这个对象所属的类的符号引用 若常量池中没有这个类的符号引用,说明这个类还没有被定义,抛出ClassNotFoundException。 若常量池中有这个类的符号引用,则进行下一步工作。 ② 检查这个符号引用所代表的类是否已经被JVM加载 若该类还没有被加载,...

小小默:进无止境 1195

03. 对象的创建,存储和访问原理

下面用一张图总结Java对象创建的过程**掘金:https://juejin.im/user/499639464759898简书:http://www.jianshu.com/u/92a2412be53e邮箱:[934137388@qq.com]

qq_35829566的博客 974

Java堆中对象的创建,布局和访问

Java 是一门纯面向对象的语言,因此对象在 Java 中的地位相当之高,大部分的操作都是围绕着对象进行展开,对 Java 对象的深入理解也是很有必要的,不能仅仅停留在关键字 new上,对于 new 的过程也应该了如指掌,清除了这个,才能更好的理解 Java 的对象。Java 对象一般实例化在堆上,所以首先了解一下在 Java 堆中的对象到底是如何的创建、分配空间、以及对象的布局和访问的过程 对象...

zdb_love_zy的博客 432

对象创建和访问的全过程

对象创建和访问的全过程 文章目录对象创建和访问的全过程对象的创建new类加载分配内存含义分配内存的两种方式并发情况下的内存分配初始化对对象进行必要的设置构造函数对象的访问概述句柄访问直接指针访问两种对象访问方式各自的优点 对象的创建 在虚拟机中,对象的创建的过程(ps:(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)) new 在语言层面 上,创建对象通常(例外:复制、反序列化)仅仅是一个new关键字而已 类加载 当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否

weixin_44153921的博客 964

java对象创建、内存布局和访问定位

出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) 1.1对象创建 当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 这里常量池应该是方法区-》运行时常量池。 新生对象内存分配方式: 指针碰撞(Bump The Pointer):假设Java堆中内存是绝对规整的,所有被使用过的内存都被放在一边,空闲的内存被放在另一边,中间放着一个指针作

qq_26855461的博客 1504

Java之对象创建与访问

1. 对象的创建 1.1 检查 1.2 内存分配 1.3 初始化与设置 1.4 构造函数执行 2. 对象的内存布局 2.1 对象头 2.2 实例数据 2.3 对齐填充 3. 访问定位 3.1 句柄 3.2 直接指针 4. 备注

JackieBlog 290

JVM——java对象的创建和访问(二)

一、对象的创建 在Java程序运行的过程中无时无刻都有对象被创建出来。在虚拟机中单接受到创建对象(仅讨论普通对象的创建)命令时,虚拟机首先将检查这个指令的参数是否能在运行时常量池中定位到一个类的符号引用,并检查是否已经被加载、解析和初始化过。如果没有先要进行类的加载。在类加载通过后,虚拟机将为新生对象分配内存,对象所需的内存的大小在类加载完成后就可以完全确定。 1.1、内存的分配方式 内存分配有两...

wade_2hou的博客 304

JAVA对象的创建、内存布局和访问

目录 一、JAVA对象的创建 1、内存分配的并发问题 1.1、CAS(compare and swap)乐观锁 1.2、本地线程分配缓冲(Thread Local Allocation Buffer,TLAB) 2、init()方法和clinit()方法 2.1、init()方法 2.2、clinit()方法 二、Java对象的内存布局 三、Java对象的访问(实例数据+类型数据...

swadian2008的博客 399

JVM的内存对象介绍[创建和访问]

  作为java程序员对应Object应该是非常熟悉的,但是对于对象在JVM中的一些情况并不是很清楚,所以本文就来记录下对象在JVM中的一些内容 对象的创建 java程序中创建对象的常用方式是: Object obj = new Object(); 该行代码的执行过程如下: 从图中我们可以发现对象创建的步骤如下 执行new执行 检查这个指令参数是否能够在常量池中定位到一个类的符号引用,并且检...

波波烤鸭的博客 2428
上一篇: Java基础:第二十九讲 成员方法
下一篇: 寒假准备给同学们一些实训指导
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值