文档章节

变量、引用、引用数组和引用对象(1)

BohrRyu
 BohrRyu
发布于 2017/02/25 20:57
字数 1102
阅读 82
收藏 0
点赞 0
评论 0

为了更好的理解这些基本概念,在这里把基本类型变量和引用类型变量作一个比较, 按惯例前者简称为引用,后者简称为变量;

我相信这里面的逻辑是一致的,因此假使站在引用的角度看待变量会是个什么感觉?

int a;

int a = 10;

声明一个整型变量a;

给a初始化为10;

这里实际上已经默认创建了一个类 叫做

public class Int{

};

这样 上面就可以陈述为 创建一个int类的对象a,把这个对象a初始化为10;因为它是Java自带的,因此不需要new,也就是新建的意思。

新建一个类,新建一个包,实质上都是在new一个尚未存在的事物;

话说回来,当我们新建一个非自带的类时,比如

 

public class Student{

 };

这时,想创建一个Student类的对象,则需要new

 

Student a   = new    Student( );

此时默认调了一个无参构造

public class Student{

Student( ){

}

 };

后面那个括号是参数列表容器吗(这个是我为了好理解自己捏造的概念)?说白了参数列表就是一个变量集合,也就是一个属性集,用来表征引用对象。

我们不可能创建一个不传参的引用对象,那没有实际意义,即不实例化的创建一个对象本身是不符合逻辑的。

因此抽象类才变的有了实用的逻辑意义。

反过来再来看int,假设它也有默认无参构造也需要new

public class Int{

int(){

}

};

 

 

int a;

int a = new int( );

一对比就知道这个是没有意义的,因为int已经是基本类型变量,你传参没有意义。

10 就是 10,这个整型对象10是一个基本元素。

一个Student类的对象a,不能说是a 就是10,你能说一个整数是10,但你不能说一个学生a是10;

你可以说a的年龄是10,由此我似乎明白了引用的深层意味;

引用对象a(注意相对于基本对象 10)的属性参数并没有存在栈中,栈中只是存了它,和它的地址;

它的地址就像一个路径指向堆中的变量 

我们说a的年龄是10,名字张三,10、张三都保存在堆中。这个地址其实也是我们自己建立的:

 

public class Student{

Student( ){

}

 };

Student a = new Student( );

 

此时仅仅是创建了一个对象a,并没有初始化(没有实例化)的状态;

我认为地址就是通过两段代码建立的对应的一个路径。

即Student这个关键字,它就是一个地址关键因素,因为假使

public class Student{

Student( ){

}

 };

Teacher a = new Student( ); // 这个是要报编译错误,也就是典型的牛头对马嘴

Teacher a = new Teacher( ); /这个就跟Student无关,即建立关联路径(地址),就是风马牛不相及;

那接下来讲数组。

数组也是引用,我们知道int[ ]  a = new int[ 4 ];

是声明(创建了)一个整型数组对象a,这时 a ( a 也是一个变量)的类型就会是一个整型数组,这个数组里面包含着一些整型变量;

重点来了,当我们给a里面的元素初始化时,我们是这么干的,以给a的第1个元素初始化来说!

a [ 0 ] = 10;   

注意这里不需要new,为什么?因为前面已经说了,int是基本类型变量,因此不要要new;

但是!你给引用数组(int[ ]算是基本数组)初始化你就得new了而且传参,因为引用数组里面的成员是引用;

创建一个Student类的对象,则需要new

Student  a   = new    Student( );

传参了就是初始化这个a

这两步合在一起即声明并初始化(实例化)1个引用对象a;

声明并初始化1个基本对象就不需要new了 比如 int a = 10;

注意区分辨析概念

创建引用数组对象 和为引用数组对象中的元素赋值  都需要new  前者new个引用数组对象,后者new个引用类型的引用数组的元素;

 

© 著作权归作者所有

共有 人打赏支持
BohrRyu
粉丝 0
博文 7
码字总数 8850
作品 0
海淀
java数组与内存控制

数组与内存控制: 1.1数组初始化 java 语言的数组变量是引用类型的变量 。 1.1.1java数组是静态的 java是静态语言,java数组是静态的,即数组被初始化后数组的长度是不可变的,java程序中的数...

xiejunbo ⋅ 2014/12/07 ⋅ 0

Java深入数组

数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。 1.内存中的数组,数组引用变量只是一个引用,这个引用可以指向任何有效的内存,只有当该引用...

西红柿的眼泪 ⋅ 2016/07/03 ⋅ 0

JAVA 基本功秘籍

1. Java数组与内存控制一、Java数组初始化 Java数组是静态的,即当数组被初始化之后,该数组的长度是不可变的。Java数组使用之前必须先对数组对象进行初始化,所谓初始化,就是为数组的所有元...

JAVA群450936584 ⋅ 2017/12/08 ⋅ 0

Java中的引用和C++中引用的区别

用过java和C++的同学都知道在二者中均有引用的概念。但是这两个概念所代表的并不相同。 首先了解C++ 中引用的含义:“引用”即“别名”。C++中的引用代表的就是实际的存储空间。对其进行操作...

osDaniel ⋅ 2013/12/02 ⋅ 0

Java之内存分析和String对象

内存分区: 注:不是所有基本类型都存在栈中 heap:堆,动态申请内存(new出来的)成员变量(实例变量),当新建一个对象的时候,,JVM为类分配空间,这个空间的大小就是实例变量的大小,当实...

孙浩j ⋅ 2017/11/21 ⋅ 0

js函数

1. ***数组: 什么是: 为什么: 何时: 如何: 创建,访问元素,遍历 1. ***数组: 什么是: 内存中连续存储多个数据的一块存储空间 vs 变量: 内存中存储一个数据的存储空间 为什么: ***程序=数据结...

小祝融 ⋅ 2017/06/19 ⋅ 0

Java的内存机制以及实现原理

Java 把内存划分成两种:一种是栈内存,另一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变...

小贱是个程序员 ⋅ 2016/11/20 ⋅ 0

ios block常见的错误(二)——循环引用

这篇博文继续block的常见错误——循环引用。 循环引用是很多初学者不能察觉的,其产生的原因,是block中的代码会对对象进行强引用。 读者请阅读示例代码1,并思考示例代码1所创建的对象能否被...

北方人在上海 ⋅ 2015/11/12 ⋅ 0

C++中不能建立数组的引用

C++: 引用不是真正的变量。只是变量的别名。 引用的地址是所引用对象的地址,引用的值是所引用对象的值。 引用就是所引用对象本身。 换句话说,引用只是个符号(名字),不是变量,所以也不...

种地瓜 ⋅ 2016/08/12 ⋅ 1

Java中只有按值传递,没有按引用传递!

今天,我在一本面试书上看到了关于java的一个参数传递的问题:写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:“引用传递!”,并且还觉得自己对j...

文文1 ⋅ 2016/06/02 ⋅ 4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

Nginx + uwsgi @ubuntu

uwsgi 安装 sudo apt-get install python3-pip # 注意 ubuntu python3默认没有安装pippython3 -m pip install uwsgi 代码(test.py) def application(env, start_response): start_res......

袁祾 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部