当前位置: 首页 > news >正文

java 接口数据类型_Java中的基本数据类型与引用数据类型

一、基本数据类型

byte、short、int、long(整数类型)

float、double(浮点数类型)

char(字符型)

boolean(布尔类型 )

d748b5f2fb797de78ab8a13cef002f02.png

Java数据大多数存放在堆栈中。

栈区:存放局部变量,对象声明的引用等。

堆区:存放new关键字创建的类(包含成员变量)和数组等。

堆与栈的优缺点

栈的优点:栈数据可以共享,存取速度比堆快。   缺点是:存在栈中数据大小与生命周期是确定的。

堆的优点:可以动态分配内存大小,生存期也不必事先告诉编译器。缺点是:存取速度较慢。

举个栗子,如下图:

1baddd867edd910d860425deabd5bccb.png

编译器会在栈中创建一个a的引用,然后在栈中查找字面值为5的引用,将a指向5的地址,若没有找到,就会开辟一个地址来

存放字面值5,然后再将a指向该地址。定义int c=5;因为栈中存在字面值5,所有c会直接指向5的地址。令a=8,因为栈中

没有字面值为8的引用,所有会开辟一个地址存放8,a会重新指向8的地址,c的指向不受a影响,c的值不会改变。

二、引用数据类型

1. Class(类)

2. Interface(接口)

3. Array(数组)

Java是面向对象语言,它为每一个基本数据类型都做了相应的包装类(见上一个表格),也就是实现了基本类型变量到包装类

对象的转换。引用类型一般通过new关键字来创建,(对象)它存放在内存的堆中,可以在运行时动态的分配内存大小。引用

变量中存放的是变量内容的地址,它存放在内存的栈中。当引用类型变量不被使用时,Java内部的垃圾回收器GC会自动回收。

1.代码示例-Class:

public class Demo {

String Name;

int Age;

double Score;

Demo(String Name,int Age,double Score){

//定义带三个参数的构造函数,进行初始化

this.Name=Name;

this.Age=Age;

this.Score=Score;

};

public static void main(String[] args) {

Demo d1=new Demo("小吴",20,98);

Demo d2=new Demo("小天",19,80);

}

}

af8fe0661edbdf5fe54987707e611133.png

引用本身是保留在栈中的,而引用所指的对象是存放在堆中的。

2.代码示例-Interface

interface Animal {//定义Animal接口

public void eat();

public void speak();

}

public class Dog implements Animal {//Dog类实现Animal接口

public void eat() {

System.out.println("我喜欢吃骨头!");

}

public void speak() {

System.out.println("汪汪汪!");

}

public static void main(String[] args) {

Dog d=new Dog();

d.eat();

d.speak();

}

}

编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

接口与类的区别:

接口不能用于实例化对象。

接口没有构造方法。

接口中所有的方法必须是抽象方法。

接口不能包含成员变量,除了 static 和 final 变量。

接口需要被类实现。

接口支持多继承。

3.代码示例-Array

public class Array {

public static void main(String[] args) {

int[] myList = new int[] {5,2,0,1,3,1,4};

for(int list: myList) {

System.out.print(list);

}

}

}

在以上代码中,myList变量存放了数组对象的引用,它存放到栈中,而数组对象所占的空间在堆上被分配(和上图一样)。

拓展1:

方法的返回值类型为类名:返回该类的对象。

方法的返回值类型为接口名:返回该接口的实现类的对象。

public static Comparable findMax(Comparable[] arr) {

int maxIndex=0;

for(int i=1;i

if(arr[i].compareTo(arr[maxIndex])>0)

maxIndex=i;

return arr[maxIndex];

}

上述代码中,传递参数为实现了Comparable接口的对象数组,方法返回的是Comparable接口的实现类的对象。

我们通常会使用Object、接口类型等方式来表示泛型,目的是支持代码重用。

拓展2:自动装箱与拆箱

自动装箱:如果一个int型量被传递到需要一个Integer对象的地方,编译器将在幕后插入一个对Integer构造方法的调用。

自动装箱:如果一个Integer对象被放到需要int型量的地方,则编译器将在幕后插入一个对intValue方法的调用。

注:参考《数据结构与算法分析Java语言描述》和 菜鸟教程

相关文章:

  • java 红包接口开发_java调用微信现金红包接口的心得与体会总结
  • java项目中学到了什么_我们能从Java的HelloWorld中学到什么?
  • js java md5加密_MD5加密 (java、js)
  • junit mysql_使用Junit单元测试及操作MySQL数据库时出现错误及解决方法
  • java最简单的算术程序_java – ANTLR4访问者模式简单的算术示例
  • java版我的世界有溺尸_我的世界溺尸怎么找
  • mysql制作html静态网页6_PHP生成HTML静态页面实例代码
  • Thread核心java语句_【经典干货】《Java 多线程编程核心技术》学习笔记及总结(中)...
  • java核心技术卷2 第9版 pdf,Java核心技术 卷II 高级特性(原书第9版) PDF
  • php 下载文件 进度条显示,Curl下载文件显示实时进度条(附代码)
  • php7.2 fpm,centos 7.2 添加php7 的 php-fpm 开机启动
  • 怎么把java源代码封装,如何把JAVA程序封装成EXE文件
  • n后问题Java回溯法,n皇后问题回溯法---java图形界面实现回溯过程
  • as3.0和php,AS3.0上安装Apache2.0.50+MySQL+PHP5+Resin+SSL+GD以及日志分析
  • php ajax loading,php+ajax实现登录按钮加载loading效果
  • 【刷算法】从上往下打印二叉树
  • C++类中的特殊成员函数
  • cookie和session
  • Java 多线程编程之:notify 和 wait 用法
  • Linux快速复制或删除大量小文件
  • mysql外键的使用
  • rc-form之最单纯情况
  • SQLServer之创建数据库快照
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • underscore源码剖析之整体架构
  • Vultr 教程目录
  • 安卓应用性能调试和优化经验分享
  • 读懂package.json -- 依赖管理
  • 关于字符编码你应该知道的事情
  • 通过git安装npm私有模块
  • 微信公众号开发小记——5.python微信红包
  • 云大使推广中的常见热门问题
  • 栈实现走出迷宫(C++)
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #WEB前端(HTML属性)
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (4)事件处理——(7)简单事件(Simple events)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (三分钟)速览传统边缘检测算子
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (推荐)叮当——中文语音对话机器人
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET命名规范和开发约定
  • @Bean有哪些属性
  • [APIO2015]巴厘岛的雕塑
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)