尚硅谷_宋红康_第2章_Java基本语法2
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对于基本数据类型而言,默认初始化值各有不同 对于引用数据类型而言,默认初始化值为null(注意与0不 同!)
数组元素的引用
定义并用运算符new为之分配空间后,才可以引用数组中的每 个元素; 数组元素的引用方式:数组名[数组元素下标] 数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i]; 数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 —>n-1;如int a[]=new int[3]; 可引用的数组元素为a[0]、 a[1]、a[2] 每个数组都有一个属性length指明它的长度,例如:a.length 指明数组a的长度(元素个数) 数组一旦初始化,其长度是不可变的
第 2章 Java基本语法2
讲师:宋红康
新浪微博:尚硅谷-宋红康
2.6 数组
数组是多个相同类型数据的组合,实现对这些数据的 统一管理 数组中的元素可以是任何数据类型,包括基本数据类 型和引用数据类型 数组属引用类型,数组型数据是对象 (object) ,数组 中的每个元素相当于该对象的成员变量
int[]对象
1 3 5 7 9 11 13 15 17 19
堆 内 存
创建对象数组 (1)
创建元素为引用类型(对象)的数组
class MyDate{ private int day; private int month; private int year; public MyDate(int d, int m, int y){ day = d; month = m; year = y; } public void display(){ System.out.println(year + "-" + month + "-" + day); } }
创建对象数组 (2)
创建元素为引用类型(对象)的数组演示
public class Test{ public static void main(String args[]){ MyDate[] m; m = new MyDate[10]; for ( int i=0; i<10; i++ ) { m[i] =new MyDate(i+1, i+1,1990+i); m[i].display(); } } main }
处内存状态 栈内存
堆内存
m
创建对象数组 (3)
创建元素为引用类型(对象)的数组演示
public class Test{ 栈内存 public static void main(String args[]){ MyDate[] m; m = new MyDate[10]; for ( int i=0; i<10; i++ ) { m[i] =new MyDate(i+1, i+1,1990+i); m[i].display(); } } main m }
动态初始化:数组声明且为数组元素分配空间与赋值的操作 分开进行
int[] arr = new int[3]; arr[0] = 3; arr[1] = 9; arr[2] = 8;
MyDate dates[]; dates = new MyDate[3]; dates[0] = new MyDate(22, 7, 1964); dates[1] = new MyDate(1, 1, 2000); dates[2] = new MyDate(22, 12, 1964);
一维数组声明
一维数组的声明方式:
type var[] 或 type[] var; 例如:
int a[]; int[] a1; double b[]; Mydate[] c; //对象数组
Java语言中声明数组时不能指定其长度(数组中元素的数), 例如: int a[5]; //非法
一维数组初始化
int[]对象
0 0 0 0 0 0 0 0 0 0
堆 内 存
创建基本数据类型数组 (3)
创建基本数据类型一维数组对象
public class Test{ 栈内存 public static void main(String args[]){ int[] s; s = new int[10]; for ( int i=0; i<10; i++ ) { s[i] =2*i+1; System.out.println(s[i]); } main s } 处内存状态 }
0x1234 null null null null null stu[0]= 0x3344
Student[] stu = new Student[5]; stu[i] = new Student(); 0x3344 number:1 state:5 score:78
stu:0x1234
heap: new 出来的东西
JavΒιβλιοθήκη Baidu内存的结构
堆 (heap)
栈(stack)
字符串常量池 方法区 静态域
int[] scores = new int[3]; scores[0] = 78; scores[1] = 88; scores[2] = 98; String[] names= new String[3]; names[0] = “商文通”; names[1] =“汤化峰”;
练习1
1.(1)定义类Pritimive,在类中定义一个有3个元素的boolean类型的 数组t作为其成员变量。数组元素未赋值。 定义类Array1,在Array1的main()方法中创建Pritimive对象d, 输出其成员变量t的三个元素值。 练习目的:检验基本数据类型数组创建时的自动赋值。 (2)给对象d的成员变量t赋值为{true,true,true},并输出t的三个元 素值。 2. 定义类Student,包含三个属性:学号number(int),年级 state(int),成绩score(int)。 创建20个学生对象,学号为1到20,年 级和成绩都由随机数确定,打印出3年级(state值为3)的学生信息。 提示:生成随机数:Math.random(),返回值类型double; 四舍五入取整:Math.round(double d),返回值类型long。
静态初始化:在定义数组的同时就为数组元素分配空间并赋 值。 MyDate dates[] = { int a[] = new int[]{ 3, 9, 8}; new MyDate(22, 7, 1964), int[] a = {3,9,8}; new MyDate(1, 1, 2000), new MyDate(22, 12, 1964) }
0x2233
null
null
AA BB
new出来的东西 堆:heap
0 89
0 str1:0x3344 strs:0x2244 scores:0x2233 0 0 90
null
null
int[] scores = new int[4]; scores[0] = 89; scores[3] = 90;
数组元素的默认初始化
数组是引用类型,它的元素相当于类的成员变量,因 此数组一经分配空间,其中的每个元素也被按照成员 变量同样的方式被隐式初始化。例如:
public class Test { public static void main(String argv[]){ int a[]= new int[5]; System.out.println(a[3]); //a[3]的默认值为0 } }
0x23AB 0 0 78 88
0x1234
0 98 null null null 商文通 汤化峰
names:0x1234 scores:0x23AB
堆
栈
int[] myInt = new int[5]; for(int i = 0;i < myInt.length;i++){ sysout(myInt[i]); myInt[i] = 2*i+1; sysout(myInt[i]);
栈内存
MyDate[] 对象
***** ***** ***** null null null null null null null
1 1 1990 2 2 1991 3 3 1992
m
堆内存
heap stack 1 1 **** **** **** 3 **** 3 1992 4 4 myDate: 1993 2 2 1991 1990
栈内存
堆 内 存
创建基本数据类型数组 (2)
创建基本数据类型一维数组对象
public class Test{ public static void main(String args[]){ int[] s; 栈内存 s = new int[10]; //int[] s=new int[10]; //基本数据类型数组如果没有赋初值, //Java自动给他们赋默认值。 for ( int i=0; i<10; i++ ) { s[i] =2*i+1; System.out.println(s[i]); } main s } 处内存状态 }
内存的基本结构
new出来的东西 堆:heap
常量池 栈:stack
存放局部变量, 对象的引用
方法区
静态域
栈:stack
存放局部变量, 对象的引用
0x3344
String[] strs1 = new String[]{“AA”,”BB”};
null AA null
BB 0x2244
String[] strs = new String[4]; strs[0] = "AA"; strs[1] = "BB";
0x8877
new boolean[3] false false true true true
0x9988
new Pritimive() t:0x8877
false
d:0x9988
3. 从键盘读入学生成绩,找出最 高分,并输出学生成绩等级。 成绩>=最高分-10 等级为’A’ 成绩>=最高分-20 等级为’B’ 成绩>=最高分-30 等级为’C’ 其余 等级为’D’
new int[10]; 88
null
null null AA
str:0x1234
score:0x2332 栈 stack 0x4444
0 0
score = new int[3];
创建基本数据类型数组 (1)
Java中使用关键字new创建数组对象 创建基本数据类型一维数组对象 public class Test{ public static void main(String args[]){ int[] s; s = new int[10]; for ( int i=0; i<10; i++ ) { s[i] =2*i+1; System.out.println(s[i]); } main s } 处内存状态 }
2000 3
5
heap:存放程序new出来的“东西”
int[] score = new int[10]; score[1] = 88; score[3] = 56;
0x2332 0 0 0 0 0 0 0 0 0x4444 0 0 堆 heap 0 56 String[] str = new String[3]; str[2] = "AA"; 0x1234
0x1234
}
1
3 5 7
9
堆 heap:程序new出 来的东西
myInt:0x1234 栈 stack
0x9876 1990 0x5435 null 0x9876 null null null 12 12 1991 2 12 1999 1
14
md:0x5435 stack:存放声明的 引用,局部变量
处内存状态
MyDate[]对象
null null null null null null null null null null
堆内存
创建对象数组 (4)
Java中使用关键字new 创建数组对象
public class Test{ public static void main(String args[]){ MyDate[] m; m = new MyDate[10]; for ( int i=0; i<10; i++ ) { m[i] =new MyDate(i+1, i+1,1990+i); m[i].display(); } } } main for循环执行三次后内存状态