Java程序编写(下)

news2024/10/6 20:28:37

Scanner对象

通过java.util.Scanner来获得Scanner

基本语法:

Scanner s = new Scanner(System.in)

通过next()nextLine()方法获取输入的字符串。
通过hasNext()hasNextLine()判断是否还有输入的数据。

next():
1、一定要读取到有效字符后才可以结束输入
2、对输入有效字符之前遇到的空白,next()方法会自动将其去掉
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
4、next()不能得到带有空格的字符串

nextLine():
1、以Enter为结束符,也就是说nextLine方法返回的是输入回车之前的所有字符
2、可以获得空白
在这里插入图片描述
除了scanner.hasNext()之外还有scanner.hasNextInt()scanner.hasNextDouble()等。

Switch多选择结构

switch语句中的变量类型可以是byteshortintchar,还有String(从Java SE 7 开始)
case标签必须为字符串常量或字面量

switch(expression) {
	case value:
		...
		break;
	case value:
		...
		break;
	default:
		...
}

如果没有break的话,每个case语句都会执行——case穿透。

循环结构

  • while

  • do…while

    do {
    
    }while(布尔表达式)
    
  • for
    100.for是下述代码的快捷键

    for (int i = 0; i < 100; i++) {
        
    }
    

    增强for循环

    for(声明语句: 表达式) {
    
    }
    

方法

注意保证方法的原子性,最好一个方法实现一个功能。
类方法要使用static关键字

方法声明

修饰符 返回值类型 方法名(参数类型 参数名){
	...
	方法体
	...
	return 返回值;
}

方法调用

对象名.方法名(实参列表)

什么是值传递和引用传递?

值传递:在值传递中,方法接收的是实际参数值的一个拷贝,而不是参数本身。这意味着在方法内部对参数进行的任何改变都不会影响到原始参数的值。**在Java中,基本数据类型(如整数、浮点数、布尔值等)都是以值传递的方式进行传递。**当你将一个基本数据类型的变量传递给一个方法时,方法接收的是这个变量的一个拷贝。

引用传递:在引用传递中,方法接收的是实际参数的引用(地址)而不是参数的拷贝。这意味着在方法内部对参数进行的任何改变都会影响到原始参数的值。在一些编程语言中,比如C++,可以通过指针实现引用传递。但在Java中,并没有显式的引用传递机制。Java中的对象引用是以值传递的方式进行传递,但这个值是对象的引用,因此看起来类似于引用传递。

方法重载

在一个类中,有相同的函数名称,但形参不同(参数的类型、顺序或数量不同)的函数。

方法重载的规则:

  1. 方法名相同,参数列表不同。
  2. 返回类型可以相同也可以不同。
  3. 方法的重载与方法的返回类型无关。
public class Calculator {  
    public int add(int a, int b) {  
        return a + b;  
    }  
  
    public double add(double a, double b) {  
        return a + b;  
    }  
  
    public int add(int a, int b, int c) {  
        return a + b + c;  
    }  
  
    public String add(String a, String b) {  
        return a + b;  
    }  
}  

命令行传参

假设你有一个名为 MyProgram.java 的程序,你可以通过以下方式在命令行中运行它并传递参数:

java MyProgram arg1 arg2 arg3  

在这个例子中,arg1arg2arg3 是传递给程序的参数。在 MyProgram.java 中,你可以通过 args 数组来访问这些参数:

public class MyProgram {  
    public static void main(String[] args) {  
        System.out.println("Number of arguments: " + args.length);  
        for (int i = 0; i < args.length; i++) {  
            System.out.println("Argument " + i + ": " + args[i]);  
        }  
    }  
}  

可变参数

语法:

public void myMethod(Type... variableName) {  
    // 方法体  
}  

使用注意事项:

  1. 可变参数必须是方法的最后一个参数。
  2. 一个方法只能有一个可变参数。
  3. 可变参数在方法内部被视为数组,因此你可以像操作数组一样操作它们。

数组

数组的声明和创建

int[] myArray = new int[5];  

内存分析

Java内存:

    • 存放new的对象和数组
    • 可以被所有的线程共享,不会存放别的对象引用
    • 存放基本变量类型(会包含这个基本类型的具体数值)
    • 引用对象的变量(会存放这个引用在堆里面的具体地址)
  • 方法区
    • 可以被所有的线程共享
    • 包含了所有的classstatic变量
      在这里插入图片描述

三种初始化

  1. 静态初始化

    int[] a = {1,2,3};
    Man[] m = {new Man(1, 1), new Man(2, 2)};
    
  2. 动态初始化

    int[] a = new int[2];
    a[0] = 1;
    a[1] = 2;
    
  3. 数组的默认初始化
    数组是引用类型,它的元素相当于类的实例变量,因此一旦数组分配空间结束,其中的每个元素也会按照和实例变量同样的方式被隐式初始化。

    • 对于整型数组(int[]、long[]等),默认值为0。
    • 对于浮点型数组(float[]、double[]等),默认值为0.0。
    • 对于布尔型数组(boolean[]),默认值为false。
    • 对于引用类型数组(String[]、Object[]等),默认值为null。

数组的四个特点

  1. 固定长度: 一旦数组被创建,它的长度就是固定的,不能再改变。
  2. 相同类型元素: 数组中的所有元素必须是相同的数据类型。
  3. 元素任意类型:数组中元素可以是任何数据类型,包括基本类型和引用类型。
  4. 数组属于引用类型: 在Java中,数组本身也是对象,其中每个元素可以看做对象的成员变量,因此可以调用其相应的方法。
    Java中对象是在堆中,因此数组无论保存原始类型还是其他对象类型,数组对象本身都是在堆中的。

数组边界

合法区间[0, length - 1]

ArrayIndexOutOfBoundsException:数组下标越界异常!

Arrays类

Java中的Arrays类是java.util包中提供的一个实用工具类,用于对数组进行各种操作。
这个类提供了许多静态方法来对数组进行排序、搜索以及其他常见的操作。
由于Arrays类中的方法都是static修饰的静态方法,因此可以直接通过类名进行调用。

一些Arrays类中常用的方法包括:

排序方法:
sort():用于对数组进行排序,可以按升序或者自定义的比较器进行排序。

搜索方法:
binarySearch():使用二分查找算法在已排序的数组中搜索指定元素。

比较方法:
equals():用于比较两个数组是否相等。

填充方法:
fill():将数组的所有元素设置为指定的值。

转换为列表:
asList():将数组转换为列表。

输出为字符串:
toString():将数组转换为字符串。

在这里插入图片描述

注意import java.util.Arrays以及Array.XXX()

稀疏数组

稀疏数组是一种数据结构,用于表示大部分元素为同一值(通常为0)的二维数组。
它通过压缩存储来节省空间,通常用于表示稀疏矩阵或者在某些特定条件下的二维数组。

稀疏数组通常由三列组成:

  • 行数:原始二维数组的行数。
  • 列数:原始二维数组的列数。
  • 数值:包含非默认值的元素及其位置信息。
row  col  value  
  3    4     6  
  0    0     1  
  0    3     2  
  1    1     3  
  1    2     4  
  2    0     5  
  2    2     6  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1301994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp移动端悬浮按钮(吸附边缘)

Uniapp移动端悬浮按钮可以通过CSS实现吸附边缘的效果。具体实现步骤如下&#xff1a; html&#xff1a; <movable-area class"movable-area"><movable-view class"movable-view" :position"position" :x"x" :y"y"…

列出最佳Aspera替代方案,给你执掌数据传输的权

Aspera是一种高速文件传输技术&#xff0c;广泛应用于科学研究、医疗保健、媒体和娱乐等领域。然而&#xff0c;由于Aspera的高昂价格&#xff0c;很多人不得不寻找替代方案。本文将列举最佳Aspera替代方案&#xff0c;以便执掌数据传输的权利。 1、FileZilla FileZilla是一款…

XUbuntu22.04之8款免费UML工具(一百九十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

基于ssm的电动车租赁网站论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本电动车租赁网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&…

FreeSSL申请免费域名证书

本文详细讲解如何申请免费证书&#xff0c;需要先准备好域名&#xff0c;将服务器IP和域名绑定。 1、注册FreeSSL账号 网址&#xff1a; https://freessl.org/ 2、申请流程 登录后首页输入域名&#xff0c;然后点击Create certificate&#xff0c;跳转到证书申请页面。 或者…

LLM中的Prompt提示

简介 在LLM中&#xff0c;prompt&#xff08;提示&#xff09;是一个预先设定的条件&#xff0c;它可以限制模型自由发散&#xff0c;而是围绕提示内容进行展开。输入中添加prompt&#xff0c;可以强制模型关注特定的信息&#xff0c;从而提高模型在特定任务上的表现。 结构 …

Ubuntu安装TensorRT

文章目录 1. 安装CUDAa. 下载CUDAb. 安装CUDAc. 验证CUDA 2. 安装CUDNNa. 下载CUDNNb. 安装CUDNNc. 验证CUDNN 3. 安装TensorRTa. 下载TensorRTb. 解压TensorRTc. 安装TensorRTd. 安装uff和graphsurgeone. 验证是否安装成功f. 备注 关注公众号&#xff1a;『AI学习星球』 回复&…

kafka支持外网访问

kafka支持外网访问 1.kafka正常部署之后如果不修改&#xff0c;外网是无法访问的&#xff0c;具体如下&#xff08;这里是单节点&#xff09; 2.这个时候需要修改kafka的config中的server.properties中的 listeners 修改为0.0.0.0 监控所有网卡&#xff0c;advertised.listene…

硬件开发笔记(十五):RK3568底板电路VGA显示接口原理图分析

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134849296 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

tp5 rewrite nginx重写

tp框架,默认的访问路径是 www.xxxx.com/index.php/admin/shop/index格式的&#xff0c;为了方便和更规范&#xff0c;也看起来有逼格一些&#xff0c;需要将index.php去掉 无index.php就会报404 我这里是宝塔 #地址重写if (!-e $request_filename) {rewrite ^(.*)$ /index.…

解决火狐浏览器拖拽事件打开新页面的问题

产生原因及解决方案 我们在进行拖拽事件的编写时会发现&#xff0c;在火狐浏览器上会发生打开新窗口的问题&#xff0c;这是火狐浏览器的一个特性。 这是因为在 Firefox 中 ondrop 事件会触发 Firefox 自带的拖拽搜索功能&#xff0c;在 ondrop 事件触发执行时触发的函数中加…

【深度挖掘Java性能调优】「底层技术原理体系」深入探索Java服务器性能监控Metrics框架的实现原理分析(Counter篇)

目录 前提概要监控工作可以分为四个部分 监控开发任务Metrics中的基础数据类型计数器&#xff08;Counter&#xff09;统计 API 访问中异常&#xff08;1000/1500&#xff09;的次数统计 API 的调用量统计特定事件发生的次数Counter的底层原理基础 (Base) 计数器单元 (Cell) 数…

MySQL行锁范围分析(行锁、间隙锁、临键锁)

MySQL 中锁的概念 排它锁&#xff08;Exclusive Lock&#xff09; X 锁&#xff0c;也称为写锁&#xff0c;若事务T对对象A加上X锁&#xff0c;则只允许T读取和修改A&#xff0c;其他任何事物都不能再对A 加任何锁&#xff0c;直到T释放A上的锁。 SELECT…FOR UPDATE 对读取的…

SocialSelling社交销售1+5+1方法论系列:社交销售基础思维

社交销售是一个融合系统、个人与组织的营销销售模式&#xff0c;对于企业和销售个体来说&#xff0c;做好这件事首先是理解其次是实操。近期SocialSelling社交销售151方法论系列内容中&#xff0c;我们将对其进行系统阐述。 本篇将侧重151方法论中的第一个“1”&#xff1a;社…

C++ Qt开发:PushButton按钮组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍QPushButton按钮组件的常用方法及灵活运用。 …

【广州华锐互动】AR昆虫在线教学软件:增强现实技术带你近距离探索微观世界

随着科技的不断发展&#xff0c;教育方式也在不断创新。在这个信息爆炸的时代&#xff0c;传统的教育方式已经无法满足人们对知识的渴望。为了让孩子们更好地了解自然界的奥秘&#xff0c;一款名为“AR昆虫在线教学软件”的应用程序应运而生&#xff0c;它将带领孩子们踏上一段…

gpu版本的GNN的demo

1、当涉及到在GPU上运行图神经网络&#xff08;GNN&#xff09;时&#xff0c;通常使用深度学习框架&#xff0c;如PyTorch或TensorFlow。在这里&#xff0c;我将为您提供一个使用PyTorch Geometric库实现GNN的简单示例。 首先&#xff0c;确保您已经安装了PyTorch和PyTorch G…

dockerfile:创建镜像的方式,船舰自定义的镜像

dockerfile&#xff1a;创建镜像的方式&#xff0c;船舰自定义的镜像 包括配置文件&#xff0c;挂载点&#xff0c;对外暴露的端口&#xff0c;设置环境变量 docker创建镜像的方式 1、基于已有镜像进行创建。 根据官方提供的镜像源&#xff0c;创建镜像&#xff0c;然后拉起…

IT鄙视链:码农之间的情感大戏与编程语言间的较量

在IT圈&#xff0c;茶余饭后的谈资总离不开技术、产品、市场和那些看似高深莫测的“鄙视链”。这些鄙视链&#xff0c;就像一场没有硝烟的战争&#xff0c;把原本应该和谐交流的技术社区变成了一场争夺鄙视链顶端的激战。今天&#xff0c;就让我来为您揭示这个神秘的IT鄙视链。…

CSS 实现丝滑动画

效果展示 CSS 知识点 animation 综合运用 页面整体布局 <div class"box"><div class"circle"></div> </div>编写基础样式 .box {position: relative;width: 400px;height: 400px;border: 80px solid transparent;border-left:…