2-1 什么是标识符?标识符与关键字在定义和使用方面有何区别?为什么算法语言需要标识符?
标识符是用户定义的单词,用于命名变量,常量,类,对象,方法等。
关键字是由java语言定义的,具有特定含义的单词。(所有字母都为小写)
标识符命名规则:以字母开头的字母数字序列,数字包括0 - 9,字母包括大小写英文字母,下划线(_)和美元符($)。区分字母大小写,不能使用关键字,长度不受限制。
注意:开头的字母也包括(_)与($)
例如:i,x1,x_2,sum都是标识符
1x(必须以字母开头),x+y(“+”号不符合规则),R[1](“[”与“]”不符合规则),k*(“*”号不符合规则)不是标识符
2-2 java语言的基本数据类型有哪些?引用数据类型有哪些?p26
基本数据类型:整数类型:byte,short,int,long,浮点数类型:float,double,字符类型:char,布尔类型:boolean。
引用数据类型:数组(array),类(class),接口(interface)
2-3 short和char的取值范围有何不同?
short类型的取值范围是-32768~32767,是有符号数,首位为符号位,首位为1时,此整数位负数。
char类型的取值范围是0~65535 ,是无符号数,首位无论是0或1,代表的都是正数。
2-4 为什么需要常量或变量?声明常量或变量时,为什么必须给出其所属的数据类型?
在程序中使用的数据大多需要经常变化,用常量值表示显然不够,因此每一种算法语
言都提供常量和变量来存储数据。
为了确定常量或变量的数据性质、取值范围、以及它们占用的内存单元的字节数和它
们参加的合法运算和操作。
2-5 什么是变量的作用域?声明变量时,如何确定变量的作用域?
变量的作用域是指其作用范围。变量声明的位置决定了它的作用域
2-6 什么是最终变量?如何声明最终变量?p28
用关键字final声明的变量只能进行一次赋值,称为最终变量。
例如: final int value = 100;
2-7 java语言的运算分为哪些类型?各有哪些运算符?p29 - p32
算数运算符,关系运算符,位运算符,逻辑运算符,赋值运算符,类型强制转换符,条件运算符,括号运算符,字符串连接运算符,点运算符,对象运算符,new运算符
2-8 分析基本数据类型与引用数据类型的主要特点,说明这两种变量的差别。
//基础数据类型
int a = 3;
int b = a;
b = 2;
System.out.println("a = "+ a + ",b = " + b);
//引用数据类型
int[] arr1 = {1,2,3};
int[] arr2 = arr1;
arr2[0] = 0;
System.out.println("arr1:" + Arrays.toString(arr1));
结果:
a = 3,b = 2
arr1:[0, 2, 3]
在基础数据类型中,把a赋值给b时,a不会随着b的变化而变化。而在引用数据类型中,把数组arr1赋值给数组arr2时,数组arr1会随着数组arr2的变化而变化。
上图是两者在栈内存和堆内存的变化,可以看到,a和b在堆内存中开辟两块空间执行代码b = a 时只是b复制了a空间内的值,当b改变时并不会影响到a。引用数据类型在栈内存开辟的空间存储的是一个指向堆内存一块空间的地址,这块空间便是存储数组arr1内容的地址。当执行代码 arr2 = arr1时,arr2在栈内存的空间就复制了arr1数组的地址,这时数组arr1和数组arr2都指向同一块堆内存中的空间,所以两者的变化都会相互影响。
基础数据类型的内存中的变化就好比小明和小红都拥有两块糖,他们谁吃了自己的糖并不会影响对方糖的数量的变化。而引用数据类型就好比小明和小红都知道某个地方存在两颗糖,而他们之中任意一个人吃了糖都会影响糖数量的变化
2-9
2-10 说明while,do-while和for三种循环的特点和区别
While语句的特点:“先判断后执行”,当条件满足时执行循环体
Do-while语句的特点:“先执行后判断”,先执行循环体,再判断条件是否满足
For语句的特点:“先判断后执行”,但for语句将循环控制变量初始值、循环条件和变
量的变化规律都以表达式形式写在循环体之前。
2-11 作为引用数据类型,数组变量与基本数据类型的变量有哪些区别?
数组变量与基本数据类型变量不同点在于,存储单元的分配方式不同,两个变量之间的赋值方式也不同。
基本数据类型变量获得存储单元的方式是静态的,声明了变量后系统就为变量分配了存储单元,就可以对变量赋值。两个变量之间的赋值是值本身。
数组变量的引用赋值,数组变量保存的是数组的引用,即数组占用的一片连续存储空间的首地址及长度特性。当声明一个数字变量而未申请空间时,变量是未初始化的,没有地址及特性值。只有申请了存储空间,才能以下标表示数组元素。
2-12
2-13
2-14 java语言的String字符串有哪些特点?
1、字符串不可变,他们的值在创建后不能被更改。
2、虽然String的值是不可变的,但是他们可以被共享。
3、字符串效果上相当于字符数组(char[ ]),但是底层原理是字节数组(byte[ ])。
2-15 怎样将数值类型的数据转化为字符串?采用以下语句是否可行?
int i = 10;
String str = (String)i;
不行
方法:
1.) String s = String.valueOf(i);
2.) String s = Integer.toString(i);
3.) String s = "" + i;
public class main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i=10;
String s1=Integer.toString(i);
String s2=String.valueOf(i);
String s3=i+"";
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
}
2-16 能否以s[i]的格式读写java String字符串中的字符?为什么?
不能
遍历方法:
public class Test {
public static void main(String[] args) {
String s = "我爱中国";
for(int i =0;i<s.length();i++){
System.out.println(s.charAt(i));//指定索引处的字符值
}
}
}
2-17 怎样比较两个字符?怎样比较两个字符串?有几种比较字符串的方法?
public class StringA
{
public static void main(String[] args)
{
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
String s4 = new String("hello");
System.out.println("s1:" + s1);
System.out.println("s2:" + s2);
System.out.println("s3:" + s3);
System.out.println("s4:" + s4);
System.out.println("----------比较内容是否相等---------------");
System.out.println(s1.equals(s2));
System.out.println(s2.equals(s3));
System.out.println(s3.equals(s4));
System.out.println("----------比较引用地址是否相等---------------");
System.out.println(s1 == s2);
System.out.println(s2 == s3);
System.out.println(s3 == s4);
}
}
s1:hello s2:hello s3:hello s4:hello----------比较内容是否相等---------------truetruetrue ----------比较引用地址是否相等---------------truefalsefalse
“==”比较的是两个字符串变量的地址是否相同
equals方法比较的是两个字符串变量的内容是否相同