1. 主页 > 好文章

Java一维数组如何声明和赋值?新手必看教程


??灵魂拷问开篇??
"哎呦喂!刚学Java的你是不是也遇到过这种情况——老师讲数组时说得头头是道,结果自己一动手就报错满屏飘红?别慌!今天咱们就用人话把一维数组的声明和赋值掰碎了讲,保证你看完就能上手!"


一、声明数组:先挖坑,后种菜

??核心口诀??:??声明就是告诉计算机"我要存东西,先给我腾地方!"??

??正确姿势??:

java复制
// 最标准写法(推荐新手用)  
数据类型[] 数组名;  
// 举个栗子  
String[] studentNames;  
int[] examScores;  

// 另一种老派写法(看到别慌)  
数据类型 数组名[];  
// 比如  
double money[];  

??注意??:这两种写法Java都认,但??带中括号的写法更直观??,毕竟String[]一看就知道是字符串数组对吧?

??自问自答??:
??Q??:声明时能不能不写中括号?
??A??:绝对不行!试试这个错误示范:

java复制
int scores;  // 这是普通变量  
scores = new int[5]; // 报错!类型不匹配  

系统会直接怼你:"我要的是int数组,你给我个int变量几个意思?"


二、分配内存:决定你的菜地有多大

??关键认知??:??声明只是画地盘,new操作才是真挖坑!??

??动态初始化(灵活版)??:

java复制
// 先声明后分配  
char[] letters;  
letters = new char[26]; // 26个字母全放下  

// 一气呵成版  
boolean[] isPassed = new boolean[50];  

??重点提示??:

  • 数组长度必须是??正整数??(想写负数?系统反手就甩你NegativeArraySizeException)
  • ??长度一旦确定不能改??(想扩容?只能新建数组拷贝数据)

??静态初始化(直男版)??:

java复制
// 一步到位的写法  
int[] primeNumbers = {2, 3, 5, 7, 11};  

// 显式写法(适合强迫症)  
float[] prices = new float[]{9.9f, 19.9f, 29.9f};  

??避坑指南??:
这两种写法看着像双胞胎,但有个致命区别——

java复制
// 这样写没问题  
int[] a = {1,2,3};  

// 这样拆开会爆炸!  
int[] b;  
b = {4,5,6}; // 报错!缺了new int[]  

三、赋值操作:往坑里种菜的十八般武艺

??基本原则??:??数组下标从0开始!从0开始!从0开始!??(重要的事情说三遍)

??基础操作??:

java复制
String[] weekDays = new String[7];  
weekDays[0] = "Monday";  // 第一个元素  
weekDays[1] = "Tuesday"; // 第二个元素  
// ...依此类推  
weekDays[6] = "Sunday";  // 最后一个  

??血泪教训??:
要是写成weekDays[7] = "Holiday",系统立马翻脸抛出ArrayIndexOutOfBoundsException!

??高级玩法??:

  1. ??循环赋值(批量操作)??
java复制
int[] squares = new int[10];  
for(int i=0; i<10; i++){  
    squares[i] = i * i;  
}  
// 现在squares数组存着0到9的平方数  
  1. ??System.arraycopy(老司机专用)??
java复制
int[] source = {1,2,3};  
int[] target = new int[5];  
System.arraycopy(source, 0, target, 0, 3);  
// target变成[1,2,3,0,0]  

四、必看对比表:三种赋值方式怎么选

??对比项??动态初始化静态初始化循环赋值
??使用场景??数据量已知但内容未知数据内容固定数据有规律可循
??内存占用??提前占满指定空间按需分配动态调整
??代码复杂度??简单最简单需要逻辑控制
??新手友好度??★★★☆☆★★★★★★★☆☆☆

个人碎碎念

教了这么多年Java,发现新人最常踩的坑就是??把声明和初始化混为一谈??。记住啊兄弟们,声明就像在房产中介挂牌——只是告诉大家你要买房,而new操作才是真金白银付首付!

还有个冷知识:??数组长度用length属性获取??,但注意这是final修饰的,不能修改。之前有个学生问我:"老师,我能不能给length赋值让它变长?" 我当时的表情就像看到有人试图用筷子喝汤...

最后给个忠告:刚开始??尽量用静态初始化??,等熟悉了再玩动态的。就像学自行车,先骑带辅助轮的,摔多了自然就会了。遇到报错别慌,仔细看提示信息——Java的报错信息其实比女朋友的脾气好懂多了(手动狗头)!


(看到这里的都是真爱,去IDE里敲个数组试试吧!)

本文由嘻道妙招独家原创,未经允许,严禁转载