数组、栈、堆(java基础知识五)
1.数组概述、定义格式
* A:数组概念
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
* B:数组定义格式
格式1:数据类型[] 数组名;----int[] arr;
格式2:数据类型 数组名[];----int arr[];
* C:数组是存储多个变量(元素)的东西(容器),这多个变量的数据类型要一致,
2.数组初始化、动态初始化
* A:什么是数组的初始化
Java中的数组必须先初始化,然后才能使用。
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
* B:如何对数组进行初始化
* a:动态初始化 -- 只指定长度,由系统给出初始化值
* 格式:
数据类型[] 数组名 = new 数据类型[5];
* int[] arr = new int[3];
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值。
* b:静态初始化 -- 给出初始化值,由系统决定长度
* 格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
* 初始化时指定每个数组元素的初始值,由系统决定数组长度。
* int[] arr = {1,2,3,4,5,6,7,8,9,0};
* C:动态初始化的格式:
* 数据类型[] 数组名 = new 数据类型[数组长度];
* 数组长度其实就是数组中元素的个数。
* D:案例演示
* 对数组的解释
* 输出数组名称和数组元素
* E:数组的长度格式
* 数组名.length
3.java内存分配,栈、堆区别
* A:栈---存储局部变量,
* B:堆---储存new出来的东西,在堆内new出来的对象都有初始化值。
* C:方法区
* D:本地方法区
* E:寄存器 1:局部变量
a:方法定义中或者方法声明上(例如:形参)的所有变量
b:使用完毕,立即消失
2:new出来的东西---------实体,对象。
new int[3];
a:每一个实体都有首地址值
b:每一个实体内的数据都有默认值
byte,short,int,long --------0
float,double -----------------0.0
char ‘\u0000’----------------Unicode编码,0为十六进制的数
boolean false
引用类型:null
c:使用完毕后,会被垃圾回收器空闲的时候回收。
4.数组静态初始化
* A:静态初始化的格式:
* 格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
* 简化格式:
* 数据类型[] 数组名 = {元素1,元素2,…};
5.数组操作的两个常见小问题越界和空指针
* a:ArrayIndexOutOfBoundsException:数组索引越界异常
* 原因:你访问了不存在的索引。
* b:NullPointerException:空指针异常
* 原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。
6.数组演示操作
数组遍历:就是依次输出数组中的每一个元素。
int[] arr={1,2,3,4,5,6,7,8};
for(int x=0;x<arr.length;x++){
System.out.println(arr[x]);
}
数组获取最值(获取数组中的最大值最小值)
public static int getMax(int[] arr){
int[] arr={1,2,3,4,5,6,7,8};
int max=arr[0];
for(int x=1;x<arr.length;x++){
if(max<arr[x]){
max=arr[x];
}
}
System.out.println(max);
}
数组元素反转(倒序有俩种方法)(就是把元素对调)
1.public static void niXu(){
int[] arr={1,2,3,4,5,6,7,8};
for(int start=0,end=arr.length-1;start<end;start++,end--){
int temp=arr[start];
arr[start]=arr[end];
arr[end]=temp;
}
}
2.public static void niXu2(){
int[] arr={1,2,3,4,5,6,7,8};
for(int x=0;x<arr.length/2;x++){
int temp=arr[x];
arr[x]=arr[arr.length-1-x];
arr[arr.length-1-x]=temp;
}
}
数组查表法(根据键盘录入索引,查找对应星期)
import java.util.Scanner;
class DemoChaBiao {
public static void main(String[] args) {
/*
需求:
数组查表法(根据键盘录入索引,查找对应星期)
分析:
从键盘输入一个数,
*/
//创建对象
Scanner sc = new Scanner(System.in);
//键盘录入一个数
int x=sc.nextInt();
//定义一个char类型的数组
char[] arr={' ','一','二','三','四','五','六','日'};
char c=getWeek(x,arr);
System.out.println(c);
System.out.println("Hello World!");
}
//定义返回星期几字符方法,返回值类型char,参数列表int x,char[] arr
public static char getWeek(int x,char[] arr){
char c = arr[x];
return c;
}
}
数组元素查找(查找指定元素第一次在数组中出现的索引)
import java.util.Scanner;
class DemoIsEquals {
public static void main(String[] args) {
/*
需求:
数组元素查找(查找指定元素第一次在数组中出现的索引)
分析:
1.元素的遍历,
2.比较数组元素与给出的值是否相等
3.输出
*/
int[] arr={1,2,3,4,5,6};
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int b=isEquals(x,arr);
System.out.println(b); System.out.println("Hello World!");
}
//定义方法,返回值类型boolean,参数列表 int x ,int[]arr
public static int isEquals(int x,int[] arr){
//for循环用来遍历和比较,看是否满足数组元素的值是否与输入的数据相等,相等返回索引,不相等返回-1
for (int i= 0 ;i<arr.length ;i++ ) {
if (x==arr[i]) {
return i;
}
}
return -1;
}
}
7.二维数组的概述及其格式
* A:二维数组概述
* B:二维数组格式1
* 数据类型[][] 数组名 = new 数据类型[m][n];
* int[][] arr= new int[m][n];
* C:二维数组格式1的解释
*这是一个二维数组,它里面有m个一维数组,每一个一维数组中都有n个元素,
* D:注意事项
* a:以下格式也可以表示二维数组
* 1:数据类型 数组名[][] = new 数据类型[m][n];
* 2:数据类型[] 数组名[] = new 数据类型[m][n];
* B:注意下面定义的区别
int x;
int y;
int x,y; int[] x;
int[] y[]; int[] x,y[];
* A:二维数组格式2
* 数据类型[][] 数组名 = new 数据类型[m][];
* int[][] arr = new int[3][];
* arr[0] = new int[2];
* arr[1] = new int[3]
* arr[2] = new int[1];
* A:二维数组格式3
* 数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
* 简化版格式:
* 数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
8.二维数组演示
需求:二维数组遍历
int[][] arr={{1,2,3,4},{2,3,4,5}};
for(int x=0;x<arr.length;x++){
for(int y=0;y<arr.length;y++){
System.out.println(arr[x][y]);
}
}
需求:公司年销售额求和
某公司按照季度和月份统计的数据如下:单位(万元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
class Demo2Array2 {
public static void main(String[] args) {
int[][] arr={{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
int sum=0;
for (int x=0;x<arr.length ;x++ ) {
for (int y=0;y<arr[x].length ;y++ ) {
sum+=arr[x][y];
}
}
System.out.println(sum); System.out.println("Hello World!");
}
看程序写结果,并画内存图解释
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);
change(a,b);
System.out.println("a:"+a+",b:"+b); int[] arr = {1,2,3,4,5};
change(arr);
System.out.println(arr[1]);
} public static void change(int a,int b) {
System.out.println("a:"+a+",b:"+b);
a = b;
b = a + b;
System.out.println("a:"+a+",b:"+b);
} public static void change(int[] arr) {
for(int x=0; x<arr.length; x++) {
if(arr[x]%2==0) {
arr[x]*=2;
}
}
}
总结:Java中到底是传值还是传址?
1,Java中即传值也传址,基本数据类型传的是值,引用数据类型传的是址(地址)
2,Java中是传值,非传址,因为地址值也是值(高司令支持)
数组、栈、堆(java基础知识五)的更多相关文章
- java 基础知识五 数组
java 基础知识五 数组 数组保存的是一组有顺序的.具有相同类型的数据. 同一个数组中所有数据元素的数据类型都是相同的. 可以通过数组下标来访问数组,数据元素根据下标的顺序,在内存中按顺序存放 ...
- 第二十九节:Java基础知识-类,多态,Object,数组和字符串
前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...
- Java 基础知识总结
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.数据类型: 数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte 8位 (by ...
- Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 毕向东—Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- Java 基础知识总结1
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.数据类型: 数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte 8位 (by ...
- 沉淀,再出发:Java基础知识汇总
沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...
- 黑马毕向东Java基础知识总结
Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记 侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...
- java基础知识一览(二)
一.java基础知识 1.一个文件中只能有一个public的类,因为他的类名要求和文件名相同. 2.classpath变量可以设置其它目录下的类. 例如:类文件所在目录是:F:\Javajdk,那么没 ...
随机推荐
- EC++学习笔记(三) 资源管理
条款13:以对象管理资源 资源包括:动态分配内存.文件描述符.网络socket.互斥锁.数据库连接 把资源放进对象内,可以依赖c++的"析构函数自动调用机制"确保资源被释放智能指针 ...
- Laravel 中视图中使用PHP代码
{{ $name }}{{ date('Y-m-d H:i:s',time()) }}{{ in_array($name,$arr)?'true':'false' }} {{ isset($name) ...
- AC日记——香甜的黄油 codevs 2038
2038 香甜的黄油 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 农夫Jo ...
- Neo4j 第六篇:Cypher语法
Cypher是图形数据库查询语言事实上的标准. 一,Cypher类型系统 Cypher支持的类型系统分为三类:属性类型,复合类型和结构类型. 1,属性类型 属性类型:Integer.Float.Str ...
- [BOI2007] Mokia
题目描述 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能够回 ...
- Filter和Interceptor的终归作用还是从入口修改或验证请求进来的数据
Filter是Java EE标准.Inteceptor是Spring 标准. Filter在servlet前面,Interveptor在servlet之后 Filter和Inteceptor都可以改变 ...
- 使用CSS去除 去掉超链接的下划线方法
我们可以用CSS语法来控制超链接的形式.颜色变化,为什么链接一定要使用下划线和颜色区分呢? 其主要原因主要是考虑到 1.视力差的人 2.色盲的人 ... 下面我们做一个这样的链接:未被点击时超链接 ...
- Android Studio 2.0 Beta 5公布,修复几个与即时执行相关的严重BUG.
Android Studio 2.0 Beta 5公布,修复几个与即时执行相关的严重BUG. This build fixes a couple of important bugs related t ...
- vim编码方式配置的学习和思考
哎呀呀,今天9月30号,立即就要十一长假了,心里还有点小小浮躁.工作已经基本做完,想成为技术大牛怎么能够如此浮躁.为了应付浮躁的心灵,决定写一篇小博,平静一把. 今天一个配置文件须要有中文,而且同事是 ...
- 在windows Server 2008 R2server上使用infopath不能将表单公布到sharepoint server的问题处理。
在server 2008 R2 中.你将做好的表单公布到Sharepoint 时候会报错: 这个情况在client是2008 R2 Server 就会出现这个结果. 在角色中启用桌面体验就可以