Java基础-学习笔记(三)

2023-11-12

本节记录和学习Java的一种引用数据类型-数组,静态方法的声明,字符串的基本概念和使用:

1.数组(array):是具有相同数据元素的有序集合;

Java中的数组是引用数据类型,一个数组变量采用应用方式保存多个数组元素;

Java的数组都是动态数组,在生命数组变量之后,使用new运算符申请数组的存储空间;

2.基本数据类型和引用数据类型的区别:

1)从概念上说:

基本数据类型:变量名指向具体的数值;

引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值;

2)从内存构建方面来说:

基本数据类型:变量在声明之后,Java就会立刻分配给它内存空间;

引用数据类型:他以特殊的方式(类似C指针)指向对象实体(具体的值),这种变量声明时,不会分配内存,只是存储了一个内存地址;

3)从使用方面来说:

基本数据类型:使用时需要赋具体值,判断用“==”号;

引用数据类型:使用时可以赋null,判断时使用equals方法;

3.一维数组:

1)声明:int a[];//声明数组变量a,[]中没有长度,a没有获得内存空间;

2)使用new为数组分配空间:数组变量 = new 数组类型[长度];//长度必须大于零的正整数

a = new int[5];//为数组a分配空间,[]中指定数组长度

或结合起来写:int a[] = new int[5];

3)数组长度length:数组变量提供length属性表示数组占用的存储单元个数,使用‘.’运算符调用;

4)数组声明时赋初值:int a[] = {1,2,3,4,5};

5)数组的引用模型:

Java语言不支持指针类型,所以对数组的操作只能用下标;

Java的数组都是动态数组,并且是引用数据类型;

引用数据类型与基本数据类型的共同点在于都需要声明,都可赋值;

不同在于:存储单元的反配方式不同,两个变量之间的赋值也不同;

(1)基本数据类型变量的传值赋值:

基本数据类型的变量获得存储单元的方式是静态的,声明了变量就意味着,该变量占据了存储单元,变量保存数据值,两个变量之间赋值,传递的是值;

(2)数组变量的引用赋值:

引用数据类型的变量获得存储单元的方式都是动态的,必须使用new运算符申请并动态获取存储单元,引用变量保存地址,长度,引用计数等特性;

两个数组变量之间的赋值是引用赋值,传递地址等引用特性,没有申请新的存储空间;

6)使用关系运算符(==,!=)能判断两个数字变量是否引用了同一个数组;

7)通常程序不需要释放数组,Java将自动收回不再使用的数组占用的存储空间;

特殊需求时,可将数组变量赋值为null(引用数据类型空值),释放数组空间;

8)复制数组(System类提供的方法)

public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);

arraycopy将src数组从srcPos下标开始的length个元素复制到dest数组从destpos开始的若干个存储单元;

利:int a[] = {1,2,3,4,5},b[] = new int[5];

arraycopy(a,0,b,1,4);//结果:0,1,2,3,4

4.二维数组:

声明:

int mat[][];

mat = new int[2][3];或

int mat[][] = new int[2][3];或

int mat[][] = {{1,2,3},{4,5,6}};

5.不规则的二维数组:

由于Java的二维数组采用动态引用模型,二维数组mat中每个一维数组mat[0],mat[1]等是分散存储的,因此各一维数组mat[0],mat[1]等占用的存储空间,可以分多次申请,且长度可不相同;

例:int mat = [][];

mat = new int[2][];

mat[0] = new int[2];

mat[1] = new int[3];

6.静态方法:(下面只介绍静态方法,实例方法将在之后介绍)

Java语言没有全局函数,函数都声明在类中,称为成员方法(method):静态成员方法 和 实例成员方法;

1)方法声明:[修饰符] 返回值数据 方法([参数列表]){语句序列;[return [返回值]];}

其中<修饰符>指定方法的访问权限等特性,如关键字public声明公有方法,static声明静态方法;

static boolean isPrime(int k);//声明静态方法

Java不支持类之外的全程变量;

2)方法调用:必须指定方法名和实际参数,方法([参数列表]);

3)声明main方法:Java Application应用程序从main()方法开始执行,如果一个类包含main()方法,则该类可被Java虚拟机执行;

main方法必须声明如下:public static void main(String args[]);

其中,参数args是一个字符串数组,他接受命令行参数;

main方法能够调用该类方法中的其他静态方法,也可以通过对象调用实例成员方法;

main方法自己只能被Java虚拟机调用,不能被其他方法调用;

7.解决数据溢出的方法是:动态申请创建一个容量更大的数组并进行数组元素复制,int temp[] = new int[n];//n为变量

8.杨辉三角类实现举例:(说明了不规则二维数组的使用,也实践了静态方法的调用)

public class Yanghui{

    public static int[][] yanghui(int n){

         int mat[][] = new int[n][];

         for(int i = 0 ;i<n ;i++){

              mat[i] = new int[i+1];

              mat[i][0] = 1;

              mat[i][i] = 1;

              for(int j = 0;j<i;j++){

                  mat[i][j] = mat[i-1][j-1] + mat[i-1][j];

              }

         }

         return mat;

    }

    public static void main(String args[]){

         yanghui(10);

    }

}

9.方法重载:

一个类中如果有多个同名方法,但带有不同的参数列表,称为方法的重载(overload)

参数列表的不同指参数的数据类型 个数 次序 不同,不能以返回值区别;

Math中abs()方法返回一个数的绝对值;

虽然Math.abs()方法有多种声明形式,但都表示相同含义,这就是重载的价值所在,为一个功能提供多种实现形式;

10.递归方法:

1)递归定义:必须满足两个条件:

(1)边界条件:至少有一条初始定义是非递归的;

(2)递推通式:由已知的函数值逐步地推计算出未知函数值;

2)递归算法:存在间接或直接调用自身的算法;

11.字符串:(只介绍基本概念和使用方法)

字符串是字符的有限序列,Java的字符串String是一个类,属于引用数据类型;

String类的特殊之处在于它具有某些基本数据类型的特性:对字符串变量的操作和运算既可以像基本数据类型一样进行赋值、链接和关系运算,又可以像类的对象一样,通过调用类的方法执行Java定义的操作;

1)链接运算:

Java使用字符串链接运算“+”将两个字符串首位相连:str = "abc"+"xyz";

"+="定义为字符串变量在原串基础之上链接另一个字符串:str +="xyz";

注:只有“+=”能够用于字符串变量,其他复合赋值运算符均不能用于字符串变量,当字符串与其他类型值进行连接运算时,Java自动将其他类型值转换为字符串;

如 String str = "i = " + i;//不需要进行格式转换

2)字符串不是字符数组,这点与C/C++不同;

3)字符串的类特性:

int length();//返回字符串长度

boolean equals(Object obj);

char charAt(int index);

String subString(int begin);//返回序号从begin开始字符串至末尾的子串,begin从0开始

String subString(int begin,int end);//返回序号从begin开始至end - 1的子串

(1)调用String类中的方法:字符串变量.方法([参数列表])

(2)String的静态方法format()返回指定格式的字符串;

例:String.format("%4d",10);// %[参数索引$][宽度][.精度] 变换类型

注意:这个方法只是格式化,同C种的格式化输出是有区别的-不同加其他的字符串;

(3)if(str != null && str.length() > 0) //空判断







本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java基础-学习笔记(三) 的相关文章

  • JNA - EnumProcessModules() 未返回所有 DLL?

    我试图从游戏中读取坐标 当我在通过 OpenProcess 接收的 HANDLE 上使用 ReadProcessMemory 以及我在 CheatEngine 中找到的内存时 效果非常好 例如 如果我知道正在运行的进程中的浮点值是0x5AB
  • Java 字符串哈希码缓存

    字符串不变性的优点之一是哈希码缓存以实现更快的访问 在这种情况下 如何处理具有相同哈希码的字符串的缓存 在这种情况下它真的能提高性能吗 在这种情况下 如何处理具有相同哈希码的字符串的缓存 被缓存的是字符串的哈希码 它被缓存在私有的int字符
  • Java中RandomAccessFile的并发

    我正在创建一个RandomAccessFile对象通过多个线程写入文件 在 SSD 上 每个线程都尝试在文件中的特定位置写入直接字节缓冲区 并且我确保线程写入的位置不会与另一个线程重叠 file getChannel write buffe
  • H.323,如何制作一个没有媒体的简单环。该脚本遵循 Q.931 设置,但仍然无法正常工作

    谁能帮我解决这个问题吗 当我发送此请求时 我在wireshark中看到数据包将发送到1720 tcp端口中的SJPhone 但 SJPhone 仍然没有响铃 我想让它响起 无论媒体 我非常感谢您的支持 我一定缺少消息协议细节来实现这个 请给
  • 帮助我避免 JPA、Hibernate 和 MySQL 的连接超时

    我正在使用 JPA Hibernate 作为提供者 Glassfish 和 MySQL 开发中一切都运行良好 但是当我将应用程序部署到测试服务器并让它运行 大部分空闲 过夜时 我通常会在早上遇到这样的情况 2011 03 09T15 06
  • 我们可以在不使用 main 方法、静态变量和静态方法的情况下在控制台上打印 java 消息吗?

    public class Test param args 1st way public static void main String args TODO Auto generated method stub System out prin
  • Glassfish:在部署期间修改 EAR 的部署描述符

    经过几天的搜索 尝试和摇头 我将这个问题发布到 SO 尽管它seems已经得到答复 这是场景 我有一个 EAR 应用程序 目前 包含一个 WAR 和一个 EJB 模块 EJB 模块使用 JPA persistence xml 并且一些无状态
  • Active MQ - HelloWorld 示例异常

    我正在尝试运行 hello world 示例在这里找到 http activemq apache org hello world html I added activemq all 5 5 1 jar已经到图书馆了 它构建成功 但出现以下警
  • 如何在 Java 中使用 StringUtils?

    我是 Java 初学者 我想用StringUtils replace但 Eclipse 输出 StringUtils cannot be resolved I tried import java lang 但它不起作用 java lang不
  • Java 中的 MP4 容器编写器

    我想找到一个免费的 Java MP4 容器 编写器 我不需要编码器 只需要能够根据预期值写入正确原子的编码器 Bonus对于这样一个库 也可以编写 有效 F4V 我更喜欢纯 Java 解决方案 而不是使用 JNI 或外部可执行文件的解决方案
  • vm 参数中的 -D 是什么,它表示为什么我们必须在 vm 参数中始终指定 -D

    vm 参数中的 D 是什么 它表示为什么我们必须在 vm 参数中始终指定 D 有什么标准吗 如果是 那是什么以及指定的位置 D 设置当前运行的 java 程序可以访问的属性值 它允许程序员设置程序运行所需的值 但程序不知道这些值是什么 因此
  • Servlet 调度程序当前不可用

  • 使用 Box2d(适用于 Android)进行碰撞检测?

    有人可以解释一下使用 box2d for android 进行碰撞检测的工作原理吗 我无法理解 BBContactListener 以什么方式工作 BBContactListener listener new BBContactListen
  • JFrame Glasspane 也优于 JDialog,但不应该

    我有一个带有 Glasspane 的 JFrame 未装饰 该框架打开一个 JDialog 也未装饰 也有一个 glassPane 并隐藏自身 setVisible false Glasspanes 通过 setGlassPane 设置 对
  • Java 不可变对象 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在学习不变性的概念 据我了解 一旦创建对象 不可变对象就无法更改其值 但我不明白不可变对象的以下用途 They are 自动是线程
  • Java LRU 缓存使用 LinkedList

    堆栈溢出的新手 所以请不要介意我以菜鸟的方式问这个问题 我正在尝试使用链表实现 LRU 缓存 我在这里看到了使用 linkedHashMap 和其他数据结构的其他实现 但对于这种情况 我正在尝试使用链表创建最佳优化版本 正如我在技术期间被问
  • 如何在速度模板中检索哈希图值

    如何从速度模板中的以下哈希图中检索值 请帮忙 LinkedHashMap
  • 使用正则表达式匹配阿拉伯文文本

    我试图使用正则表达式仅匹配阿拉伯语文本 但出现异常 这是我的代码 txt matches P Arabic 这是例外情况 线程 main 中的异常 java util regex PatternSyntaxException 索引 9 附近
  • 获取Java中ResultSet返回的行数

    我用过一个ResultSet返回一定数量的行 我的代码是这样的 ResultSet res getData if res next System out println No Data Found while res next code t
  • Java 可变 BigInteger 类

    我正在使用 BigIntegers 进行计算 该计算使用一个调用 multiply 大约 1000 亿次的循环 并且从 BigInteger 创建新对象使其非常慢 我希望有人编写或找到了 MutableBigInteger 类 我在 jav

随机推荐

  • vue 孙组件给父组件传值

    1 在孙组件里定义事件 通过 emit把值传出去 孙组件 planPop vue
  • unity键盘按键版垃圾分类

    有个键盘控制版的垃圾分类 打开程序后按任意键进行游戏 共分为可回收垃圾 厨余垃圾 有害垃圾 其他垃圾 游戏时间一共60s 按1 2 3 4分别会使垃圾到对应的垃圾桶 放对垃圾就会打开垃圾桶 放错垃圾桶会有放错提示 60s后会计算成绩 按任意
  • JS逆向新技术--JSRPC

    声明 本文章中所有内容仅供学习交流 不可用于任何商业用途和非法用途 否则后果自负 如有侵权 请联系作者立即删除 由于本人水平有限 如有理解或者描述不准确的地方 还望各位大佬指教 介绍 JSRPC意思就是远程调用js代码 全称 Remote
  • java树形数据结构递归求上级,附答案

    Part 1微服务架构设计概述 1 1 传统应用架构的问题 1 2 微服务架构是什么 1 3 微服务架构有哪些特点和挑战 1 4 如何搭建微服务架构 Part 2微服务开发框架 2 1 Spring Boot 是什么 2 2 如何使用Spr
  • sql注入利用union来绕过括号过滤

    union盲注 当我们在括号被过滤的时候 就不能使用substr mid 等多种函数 于是想到union 要想知道uinon的怎么进行盲注 就要了解union 这里给大家看几个mysql的查询语句 通过这三条语句我们可以看到 我们我利用un
  • STM32自定义printf功能方法

    最近在朋友那学到了如何重定义STM32的printf类似函数 在这做下记录 调用C语言库函数文件具体是哪一个我忘记了 都加上吧 include
  • ps制作鲨鱼在橙子“海洋”里游泳的创意画面

    预览效果 1 新建画布725X450 打开素材 把橘子放进去 并且把中间部分用钢笔工具抠出来 操作 1 使用钢笔工具在 橘子果肉的边缘点击 形成闭合路径 2 按ctrl 回车键 将其变成选区 蚂蚁线 3 将选区 存储起来 2 将水面素材拖入
  • 学习大数据必须掌握的核心技术概念

    随着数字化时代的到来 大数据成为了各行各业的关键资源 学习大数据的核心技术概念是成为一名优秀数据专家的关键 本文将介绍几个大数据的核心技术概念 并提供相应的源代码示例 帮助读者更好地理解和应用这些概念 分布式存储和处理 在大数据领域 数据量
  • CentOS7 安装 NVIDIA Container Toolkit

    安装containerd io sudo yum install y https download docker com linux centos 7 x86 64 stable Packages containerd io 1 4 3 3
  • vue遍历Map,Map在vue中的使用方法

    Map在vue中的使用方法 html 遍历的时候要遍历两遍
  • 《数据结构》--内部排序算法比较

    题目 各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶 或大概执行时间 试通过随机的数据比较各算法的关键字比较次数和关键字移动次数 以取得直观感受 基本要求 1 从以下常用的内部排序算法至少选取5种进行比较 直接插入排序 折半折
  • C# 位操作

    位操作符是对数据按二进制位进行运算的操作符 位操作是其他很多语言都支持的操作 如C C 和Java等 C 也不例外支持位操作 注意位操作支持的数据类型是基本数据类型 如byte short char int long等 C 支持的位操作有如
  • 逐行读取csv文件的某一列以及写入数据

    1 在Python中 你可以使用内置的csv模块来读取CSV文件 并逐行读取指定的某一列 下面是一个示例代码 展示如何逐行读取CSV文件的某一列 import csv 打开CSV文件 with open your file csv r as
  • webpack4之代码分割splitChunks和压缩优化

    我们打包出来的js文件 只要修改或增加了内容 就会导致入口js文件的hash变化 从而重新打包 为了提高打包速度 每次变化仅仅是重新打包自定义代码部分 webpack4提供了optimization splitChunks 回顾一下 web
  • 【Linux之shell脚本实战】批量上传docker镜像到华为云容器镜像仓库

    Linux之shell脚本实战 批量上传docker镜像到华为云容器镜像仓库 一 脚本要求 二 检查本地环境 1 检查系统版本 2 检查系统内核 三 检查本地容器镜像 四 shell注释模板配置 1 配置 vimrc 2 查看注释模板效果
  • MediaCodec问题汇总

    参考 http blog csdn net mincheat article details 51385144 MediaCodec的基本用法 网上一大把 这里就不写了 1 获取支持分辨率问题 Camera Parameters param
  • 设计模式-责任链模式(Java)

    设计模式 责任链模式 在极客学院的视频中学习了一种设计模式的方式 责任链模式 在博客园中发现了这篇文章 讲的很详细 就把它的一些内容转载过来了 本文中 我们将介绍设计模式中的行为型模式职责链模式 职责链模式的结果看上去很简单 但是也很复杂
  • MySql存储过程

    一 Mysql存储过程概述 存储过程是数据库的一个重要对象 对象还包括 索引 触发器 视图等 可以封装sql语句集 用来完成比较复杂的业务逻辑 并且还可以入参 出参 存储过程创建时会进行预编译进行保存 当下次调用时不需要再进行编译 优点 在
  • STM32设置IO口输入上拉下拉

    1 按键分类 WK UP按键按下时将高电平信号输入给STM32的IO 即高电平有效 不被按下时 由于干扰 可能高也可能是低信号输入 KEY0按键按下时将低信号输入给STM32的IO 即低电平有效 不被按下时 由于干扰 可能高也可能是低信号输
  • Java基础-学习笔记(三)

    本节记录和学习Java的一种引用数据类型 数组 静态方法的声明 字符串的基本概念和使用 1 数组 array 是具有相同数据元素的有序集合 Java中的数组是引用数据类型 一个数组变量采用应用方式保存多个数组元素 Java的数组都是动态数组