Java理论作业(5章)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
班级:
学号: 姓名:
第五章 数组与字符串
知识点一:Java 的内存分配机制
内存分配:栈内存、堆内存。
栈内存:基本数据类型的变量和对象的引用变量。
超出变量的作用域,会自动释放掉为该变量所分配的内存空间。
堆内存:存放由new 运算符创建的对象和数组,在堆中分配的内存,由Java 虚拟机的自动垃圾回收器来管理。
举例:int [ ] x; x=new int[10];
第一句:引用变量x ,在栈内存中分配空间
第二句:数组初始化,在堆内存中分配空间
栈中的变量x 的取值= 数组在堆内存中的首地址,所以栈中的这个变量就成了数组的引用变量。
举例
String s1; String s2;
s1=“a string ”;
s2=s1;
引用变量实际上保存的是数组或对象在堆内存中的地址(也称为对象的句柄),所以可以通过使用栈的引用变量来访问堆中的数组或对象。
引用变量相当于是为数组或对象起的一个别名。
引用变量是普通变量,定义时在栈中分配,在程序运行到其作用域之外被释放。
数组或对象:在堆中分配内存,在没有引用变量指向它时,也不会释放,但会变为垃圾,不能再被使用。
在随后一个不确定的时间被垃圾回收器收走(释放)。
null :引用常量,如果某个引用变量值为null ,表示不指向任何对象或数组。
知识点二:一维数组
数组:相同数据类型的元素按一定顺序排列的集合,实现对这些数据的统一管理。
声明方式
type var[] 或 type[] var ;
type 指定数组的类型,可以是基本数据类型,也可以是一个类类型(即类名),如
s1 s2 10001
10001 栈内存
堆内存
int a[]; int[] a1; double b[];
注意:Java语言中声明数组时不能指定其长度(数组中元素的个数)。
例如:int a[5]; //非法所有的数组下标从零开始
A 、动态初始化
数组定义与为数组元素分配空间并赋值的操作分开进行
使用运算符new来为数组所要存储的数据分配内存,并将它们分配给数组变量
int a[];
a = new int[3];
a[0] = 3;
a[1] = 9;
a[2] = 8;
B、静态初始化
在定义数组的同时为数组元素分配空间并赋值
int a[] = { 3, 9, 8};
MyDate dates[] = {
new MyDate(22, 7, 1964),
new MyDate(1, 1, 2000),
new MyDate(22, 12, 1964)
};
C、数组元素的默认初始化
数组是引用类型,它的元素相当于类的成员变量
数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化,比如在下例中,整型数组a中的元素并未显示的初始化,此时所有元素系统默认赋值为0。
public class Test {
public static void main(String argv[]){
int a[]= new int[5];
System.out.println(a[3]);
}
}
(1)数组元素的引用
定义并用运算符new为之分配空间后,才可以引用数组中的每个元素
数组元素的引用方式:arrayName[index]
index为数组元素下标,可以是整型常量或整型表达式,如a[3] , b[i] , c[6*i]
数组元素下标从0开始;长度为n的数组合法下标取值范围:0 ~ n-1
每个数组都有一个属性length指明它的长度,例如
a.length 指明数组a的长度(元素个数)
知识点三:多维数组
定义多维数组变量时,将每维数放在各自的方括号中,例:下面语句声明了一个名为twoD的二维数组变量
int twoD[][] = new int[4][5];
该语句分配一个4行5列数组并把它分配给数组twoD
当给多维数组分配内存时,只需指定第一个(即最左边)维数的内存即可,可单独地对余下的维数进行内存分配
(2)多维数组举例
例如,int twoD[][] = new int[4][];
在数组twoD被定义时给它的第一个维数分配内存,对第二维则是手工分配内存
int t1[][] = new int [][4]; //非法
twoD[0] = new int[5]; twoD[1] = new int[5];
twoD[2] = new int[5]; twoD[3] = new int[5];
(3)Java中多维数组的特殊情况
不必须是规则矩阵形式
int[][] tt = new int[4][];
tt[0] = new int[2]; tt[1] = new int[4];
tt[2] = new int[6]; tt[3] = new int[8];
知识点四:字符串String类
字符串:字符串是由字符组成的序列,用双引号括起来的一个字符序列构成了字符串
Java的字符串常量通常是作为String类的对象存在,有专门的属性来规定它的长度。
String 类的定义和实例的生成(三种方式)
String str;
str=“this is a string”或者
str=new String(“this is a string”);
或
String str1=new String(“hello”);
或
String str2=“aaaa”;
对字符串的操作,两个字符串str1, str2
str1 = str2; 指两个引用指向同一个地址
str1.equals(str2); 判断两个字符串内容是否相等
String aStr="HelloWorld!";
String bStr="HelloWorld!";
if(aStr.equals(bStr)) // 取值为真
if(aStr==bStr) // 取值为真,
练习题:
1、若已有数组说明“char s[];”,则创建20个字符的数组的语句是。
2、在Java中定义一个字符串类型的变量str的语句是:,定义一个具有10个元素的整型数组a的语句是:。
3、下列程序的输出结果是。
public class Test
{
public static void main(String[] args) {
int a[]={1,2,3,4};
for(int i=a.length-1;i>=0;i--)
System.out.print(a[i]+" ");
}
}
4、当声明一个数组int arr[] = new int[5]; 时,这代表这个数组所保存的变量类型是,数组名是,数组的大小为,数组元素下标的使用范围是。
5、下列关于数组的定义形式,哪个是正确的?()
A.int[ ]c=new char[10]; B.int[ ][3]=new int[2][ ];
C.int[ ]a; a=new int; D.char b[ ]; b=new char[80];
6、执行String[] s=new String[10];语句后,哪些结论是正确的?()
A.s[0] 为未定义 B.s.length 为10
C.s[9] 为 null D.s[10] 为 ""
7、给出下面代码,关于该程序以下哪个说法是正确的?()
public class Person{
static int arr[] = new int[5];
public static void main(String a[])
{
System.out.println(arr[0]); }
}
A、编译时将产生错误
B、编译时正确,运行时将产生错误
C、输出零
D、输出空
8、以下程序的输出结果是。
class StringTest{
public static void main(String args[]) {
String str1 = "JAVA";
String str2 = "JAVA";
String str3 = new String("JAVA");
boolean result1 = str1.equals(str2);
boolean result2 = str2.equals(str3);
boolean result3 = str1==str2;
boolean result4 = str2==str3;
System.out.println(result1+","+result2+","+result3+","+result4);
}
}
9、下列程序段执行后的结果是( )。
String s = new String("abcdefg");
for (int i=0; i<s.length(); i+=2){
System.out.print(s.charAt(i));
}
A) aceg B) ACEG C) abcdefg D) abcd
10、已知如下定义:String s = "story"; 下面哪个语句不是合法的( )
A、s += "books";
B、s = s + 100;
C、int len = s.length;
D、String t = s + “abc”;
11、下列数组定义及赋值,错误的是()
A. int intArray[]=new int[2];
B. int intArray=new int[3];intArray[1]=1;intArray[2]=2;intArray[3]=3;
C. float b[]={1.2, 2.1, 3.5, 4.3, 5.6};
D. int[][] a =new int[2][];a[0]=new int[4];a[1]=new int[23];
12、若String s = "hello"; String t = "hello"; char c[] = {'h','e','l','l','o'} ; 则下列哪些表达式返回true?()
A.s.equals(t); B.t.equals(new String("hello"));
C.t.equals(c); D.s==t;
13、下列关于Java语言的数组描述中,错误的是()。
A.数组的长度通常用length表示 B.数组下标从0开始
C.数组元素是按顺序存放在内存的 D.数组在赋初值和赋值时都不判界。