Java基础——循环switch大数值更改器访问器深浅拷贝

目录

1.循环

2.switch多分支选择结构

3.大数值

4.浅拷贝&深拷贝

5.Arrays.sort排序

6.面向对象

7.更改器&访问器


1.循环

for-each循环

在 Java 中,for-each 循环(也称为增强型 for 循环)是一种用于遍历数组或集合(如 ListSet 等)的简洁方式。相比于传统的 for 循环,for-each 循环更加简洁且易于阅读,因为它隐藏了迭代器的复杂性。

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


for(int[] x:arr3){
    for(int z: x){
        System.out.print(","+z);
    }
    System.out.println("")
}

2.switch多分支选择结构

其中case标签可以是:

  • 类型为char、byte、short或int的常量表达式
  • 枚举常量
  • 从Java SE7开始,case标签还可以是字符串字面量
int a=10;
String b="3qe"
int c=22;
switch(a){
    case 10;
        System.out.println("======1")
        break;
    case "3qe";
        System.out.println("======2")
        break;
    case "mm";
        System.out.println("======3")
        break;
    case 40;
        System.out.println("======4")
        break;
    case 50;
        System.out.println("======5")
        break;
    default:
        System.out.println("======6")
        break;
    }

switch击穿?是什么

运行过程中如果没有遇到break,就会一直循环,直到遇到break.才会停止

int a=10;
String b="3qe"
int c=22;
switch(b){
    case 10;
        System.out.println("======1")
        break;
    case "aaa";
        System.out.println("======2")
        break;
    case "3qe";
        System.out.println("======3")
        //break;
    case 40;
        System.out.println("======4")
        //break;
    case 50;
        System.out.println("======5")
        break;
    default:
        System.out.println("======6")
        break;
    }

 

break&continue

break打断循环,continue跳过循环。

3.大数值

        如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigIntegerBigDecimal这两个类可以处理包含任意长度数字序列的数值。

BigInteger类实现了任意精度的整数运算,而BigDecimal则实现了任意精度的浮点数运算

要使用这些类,你可以通过它们的静态valueOf方法将普通的数值转换为大数值。但遗憾的是,我们不能使用人们熟悉的算术运算符(如加号+和乘号*)直接处理这些大数值。相反,你需要使用大数值类中的addmultiply等方法来进行运算

BigInteger a = BigInteger.valueOf(100);

BigInteger:代表无限大的整数

BigInteger x1=new BigInteger("20000000000000000000");
x1=x1.multiply(x1);

System.out.println(x1);

BigDecimal:代表无限大的浮点数

需要引入库java.math.BigInteger

4.浅拷贝&深拷贝

浅拷贝——指向相同

int[] arr4=arr;

深拷贝——自己开辟内存,把对方值拷贝一份存在自己的内存

int[] arr5 =new int[arr.length];
for(int i=0;i<arr.length;i++){
    arr5[i]=arr[i];
}

我们通过一段代码来具体了解一下区别

public static void main(String[] args) {

    int[] arr = {1, 2, 3}; 
    int[] arr2 = new int[4]; // 初始化数组arr2,长度为4,Java数组默认元素值为0,与C语言不同
    int[] arr3 = new int[]{2, 3, 4, 5}; 
    int x = arr3.length; // 计算数组arr3的长度

   
    int[] arr4 = arr; // 浅拷贝,arr4和arr指向同一个数组
    int[] arr5 = new int[arr.length];
    for (int i = 0; i < arr.length; i++) {
        arr5[i] = arr[i]; // 深拷贝,将arr的值复制到arr5中
    }
    arr4[1] = 99; // 修改arr4(也即arr)的第二个元素为99

    System.out.println(arr[1]); // 打印arr的第二个元素,输出99

    int[] arr6 = Arrays.copyOf(arr, 3); // 复制arr的前3个元素到arr6中
    arr6[1] = 88; // 修改arr6的第二个元素为88
    System.out.println(Arrays.toString(arr6)); // 打印arr6,输出[1, 88, 3]

    System.out.println(arr[1]); // 再次打印arr的第二个元素,输出99,因为arr4的修改影响了arr

    }

5.Arrays.sort排序

Arrays.sort(arr)
Arrays.sort(arr,(a,b)->a.age-b.age);//按对象的某个属性排序
//排序后倒序输出
Arrays.sort(arr,(a,b)->b-a);
Arrays.sort(arr,Collections.reverseOrder());

这个方法也可以给字符串排序

String[] arr={"abc","acb","bb","wsdf","knm","abddd"};

Arrays.sort(arr);

 排序规则是按首字母大小排序,首字母相同时顺延看后面的字母

binarySearch快速查找

Arrays.binarySearch(arr,8);//快速查找arr数组中8的下标

6.面向对象

特征:封装,继承,多态,抽象

一定要认识到: 一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。 在 Java 中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用。new 操作 符的返回值也是一个引用。

首先我们定义一个person类。

System.out.println(x1);本质上是调用x1.toString方法。这输出的是他的类型和内存地址。

Person x1 =new Person(10,177); //Person(age,hight)

System.out.println(x1);

当我们在Person类里重写了toString时,再次调用toString时,就会调用我们自己写的方法。

类名引用的是静态方法,通过对象名调用的是非静态方法。

7.更改器&访问器

在一个类中我们定义如下方法:

public类型可以被其他类随意操作,可读可写。但是private类,不允许被调用。但是我们可以通过写一个public方法方法控制只读,只写。(这就是访问器和更改器)这样的调用比较灵活方便。

        那我们再看一个例子,我们为flag3设置一个只读操作。但是这样会暴露flag3的真实地址。是不安全的。

但是getflag2()是安全的!因为flag2是基本类型,它的调用默认就是深拷贝。

我们现在将getFlag3()修改为如下形式。将flag3深拷贝给ss。

public int[] getFlag3(){
    int[] ss =new int[flag3.length];
    for(int k=0;k<ss.length;k++){
        ss[k]=flag3[k];
    }
    return ss;
}

这样,访问器里面必须是深拷贝。这样才能保证安全。

再注意!!!!!!!getFlag4()方法也是安全的。因为字符串是不可变的!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

引入 axios,根据 api 文档生成调用接口

起步 | Axios Docs 安装 axios npm install axios 生成 api 调用接口【可选】 https://github.com/ferdikoomen/openapi-typescript-codegen 安装 npm install openapi-typescript-codegen --save-dev 然后执行生成代码 # http://localhost:8805/api/user/v3/api-docs&a…

wsl2+Ubuntu安装图形化界面(VNC方式)

本章教程,记录在wsl2+Ubuntu操作系统中安装可视化界面步骤。 一、安装桌面环境 尽量以root用户进行安装,避免因权限不足导致部分依赖无法安装。 sudo apt update sudo apt upgrade -y sudo apt install ubuntu-desktop由于可视化桌面程序安装包比较大,网速慢的小伙伴,需要耐…

Linux应用——线程池

1. 线程池要求 我们创建线程池的目的本质上是用空间换取时间&#xff0c;而我们选择于 C 的类内包装原生线程库的形式来创建&#xff0c;其具体实行逻辑如图 可以看到&#xff0c;整个线程池其实就是一个大型的 CP 模型&#xff0c;接下来我们来完成它 2. 整体模板 #pragma …

学习日记_241110_局部线性嵌入(Locally Linear Embedding, LLE)

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

【我的 Anti-AV 学习手札】DLL注入

无敌舍友s神免杀学了一个阶段&#xff0c;达者为师&#xff0c;向s师傅学习&#xff01;&#xff01; ps&#xff1a;我的基础实在薄弱&#xff0c;WIN编程甚至都没做过&#xff0c;所以笔记翔实些 一、注入思路 1.在进程中开辟一段空间 2.存入dll绝对路径地址的字符串 3.使用…

【HarmonyOS NEXT】一次开发多端部署(以轮播图、Tab栏、列表为例,配合栅格布局与媒体查询,进行 UI 的一多开发)

关键词&#xff1a;一多、响应式、媒体查询、栅格布局、断点、UI 随着设备形态的逐渐增多&#xff0c;应用界面适配也面临着很大问题&#xff0c;在以往的安卓应用开发过程中&#xff0c;往往需要重新开发一套适用于大屏展示的应用&#xff0c;耗时又耗力&#xff0c;而鸿蒙提供…

linux 安装 mongodb

选择MongoDB版本 https://www.mongodb.com/try/download/community-kubernetes-operator 我的系统是centos7.9 这里只能最高只能选择mongo7 复制下载链接&#xff1a;https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-7.0.15.tgz 获取安装教程&#xff1a; h…

《深入浅出Apache Spark》系列②:Spark SQL原理精髓全解析

导读&#xff1a;SQL 诞生于 20 世纪 70 年代&#xff0c;至今已有半个世纪。SQL 语言具有语法简单&#xff0c;低学习门槛等特点&#xff0c;诞生之后迅速普及与流行开来。由于 SQL 具有易学易用的特点&#xff0c;使得开发人员容易掌握&#xff0c;企业若能在其计算机软件中支…

PostgreSQL pg-xact(clog)目录文件缺失处理

一、 背景 前些天晚上突然收到业务反馈&#xff0c;查询DB中的一个表报错 Could not open file "pg-xact/005E": No such file or directory. 两眼一黑难道是文件损坏了...登录查看DB日志&#xff0c;还好没有其他报错&#xff0c;业务也反馈只有这一个表在从库查询报…

Cursor的chat与composer的使用体验分享

经过一段时间的试用&#xff0c;下面对 Composer 与 Chat 的使用差别进行总结&#xff1a; 一、长文本及程序文件处理方面 Composer 在处理长文本时表现较为稳定&#xff0c;可以对长文进行更改而不会出现内容丢失的情况。而 Chat 在更改长的程序文件时&#xff0c;有时会删除…

MATLAB课程:AI工具辅助编程——MATLAB+LLMs

给出一些可能有用的方法辅助大家写代码。 方法一&#xff1a;MATLAB软件LLM (不太懂配置的同学们为了省事可以主要用这个方法) 方法一特别针对本门MATLAB教学课程&#xff0c;给出一种辅助ai工具的操作指南。MATLAB中可以安装MatGPT插件&#xff0c;该插件通过调用ChatGPT的API…

2.索引:SQL 性能分析详解

SQL性能分析是数据库优化中重要的一环。通过分析SQL的执行频率、慢查询日志、PROFILE工具以及EXPLAIN命令&#xff0c;能够帮助我们识别出数据库性能的瓶颈&#xff0c;并做出有效的优化措施。以下将详细讲解这几种常见的SQL性能分析工具和方法。 一、SQL 执行频率 SQL执行频率…

使用Go语言编写一个简单的NTP服务器

NTP服务介绍 NTP服务器【Network Time Protocol&#xff08;NTP&#xff09;】是用来使计算机时间同步化的一种协议。 应用场景说明 为了确保封闭局域网内多个服务器的时间同步&#xff0c;我们计划部署一个网络时间同步服务器&#xff08;NTP服务器&#xff09;。这一角色将…

深度学习经典模型之VGGNet

1 VGGNet 1.1 模型介绍 ​ VGGNet是由牛津大学视觉几何小组&#xff08;Visual Geometry Group, VGG&#xff09;提出的一种深层卷积网络结构&#xff0c;他们以7.32%的错误率赢得了2014年ILSVRC分类任务的亚军&#xff08;冠军由GoogLeNet以6.65%的错误率夺得&#xff09;和…

Android的BroadcastReceiver

1.基本概念&#xff1a;BroadCast用于进程间或者线程间通信 本质上是用Binder方法&#xff0c;以AMS为订阅中心&#xff0c;完成注册&#xff0c;发布&#xff0c;监听的操作。 2.简单实现的例子 package com.android.car.myapplication;import android.content.BroadcastRe…

分布式数据库中间件mycat

MyCat MyCat是一个开源的分布式数据库系统&#xff0c;它实现了MySQL协议&#xff0c;可以作为数据库代理使用。 MyCat(中间件)的核心功能是分库分表&#xff0c;即将一个大表水平分割为多个小表&#xff0c;存储在后端的MySQL服务器或其他数据库中。 它不仅支持MySQL&#xff…

Java多线程编程(四)- 阻塞队列,生产者消费者模型,线程池

目录&#xff1a; 一.阻塞队列 二.线程池 一.阻塞队列 1.阻塞队列是⼀种特殊的队列. 也遵守 "先进先出" 的原则 阻塞队列能是⼀种线程安全的数据结构, 并且具有以下特性&#xff1a; 1.1.当队列满的时候, 继续入队列就会阻塞, 直到有其他线程从队列中取走元素 1.…

深度剖析JUC中LongAdder类源码

文章目录 1.诞生背景2.LongAdder核心思想3.底层实现&#xff1a;4.额外补充 1.诞生背景 LongAdder是JDK8新增的一个原子操作类&#xff0c;和AtomicLong扮演者同样的角色&#xff0c;由于采用AtomicLong 保证多线程数据同步&#xff0c;高并发场景下会导致大量线程同时竞争更新…

大数据面试题--kafka夺命连环问

1、kafka消息发送的流程&#xff1f; 在消息发送过程中涉及到两个线程&#xff1a;一个是 main 线程和一个 sender 线程。在 main 线程中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给双端队列&#xff0c;sender 线程不断从双端队列 RecordAccumulator 中拉取…