JavaSE编程基础
第一章 初识Java
Java的三个版本是什么?
JavaSE: 定位在客户端,主要用于桌面应用软件的编程
JavaEE:定义在服务器端的企业版,主要用于分布式网络程序的开发
JavaME:主要应用于嵌入式系统开发,如手机和PDA的编程
Java是哪个公司发明的? 现在这家公司处境如何? 为什么?
Java是Sun公司发明的
Sun公司在2009被Oracle公司收购
因为Sun是一家极具创新能力的公司,但是没能利用Java构建一个强有力、可变现的生态系统,没打好Java这张牌
Java的跨平台是通过什么实现的?
通过在不同平台上安装相应的Java虚拟机实现的;虚拟机可以将字节码文件(class)解释成相应平台的机器语言并执行
Java语言释型还是编译型?还是两者都是?
先编译再解释
JDK、JRE、JVM的全称是?
JDK: Java Development Kit 针对Java开发员的产品
JRE: Java Runtime Environment是运行Java程序所必须的环境集合
JVM:Java Virtual Machine解释运行Java字节码文件,跨平台的核心
JDK包含JRE,这句话对吗?
对;JDK包含JRE;同时JRE包含JVM
DOS下,自动补齐命令的键是哪个?DOS下,想查找以前执行的命令用哪个键?
DOS下,自动补齐命令的键是哪个Tab键
DOS下,想查找以前执行的命令用上下箭头, ↑或↓键
DOS下,dir命令表示什么含义? cd 表示什么含义?
dir:查看某个目录下的子目录和文件
cd:改变当前目录
为什么采用Java_HOME的方式配置环境变量较好?
便于Java_HOME路径的重用,避免由于JDK安装路径变化而修改多个环境变量;
public class 的类名必须跟文件名保持一致吗?
public class 的类名必须跟文件名保持一致
编程风格一定要:成对编程和缩进。用文字或代码说明如何实现成对编程和缩进。
public class Test{
public static void main(String args []){
System.out.println("Hello Java");
System.out.println("尚学堂");
}
}
system.out.println("hi"); ----这句代码能否顺利执行?
不能顺利执行;Java区分大小写,需要将system修改为System
编程时,为什么需要注释?注释的类型?
注释就是程序员为读者作的说明,是提高程序可读性的一种手段;注释同时也是调试代码时的一种手段,可以对某些不要执行的代码进行注释;
注释分为单行注释,多行注释和文档注释三种类型;
多行注释能不能嵌套使用?
多行注释不能嵌套使用
第二章 数据类型和运算符
常用的进制有哪些?
十进制、二进制、八进制、十六进制
位、字节、字符的概念及其计数范围?
位:计算机存储信息的基本单位,代表一个二进制数位,
计数范围:0或1
字节:8个连续的二进制位为一个字节,可以存放1个西文字符的编码
计数范围:-128~127
字符:单引号用来表示字符常量,例如 ‘A’,‘张’
计算范围:0-65535之间的编码
标识符的作用是什么?
用作给变量、类和方法命名
这个标识符合法吗? int aaa@bbb = 33;
不合法
标识符能不能使用汉字开头?为什么?
可以,字母的含义包括:英文、汉字等(不建议大家使用汉字来定义标识符)
Java中有没有goto语句?有没有goto关键字?
java中没有goto语句,有goto关键字
byte,short,int,long类型,分别占用几个字节?表数范围多大?
byte:1个字节 -128~127
short:2个字节 -215~215-1
int:4个字节 -231~231-1
long:8个字节 -263~263-1
整型常数默认是什么类型?
int类型
float,double分别占用几个字节?
float:4个字节
double:8个字节
如何用科学计数法表示3.14?
314E-2
浮点常量默认是什么类型?
double类型
如下写法哪些是不对的:
a. byte b = 30;
b. byte c = 500;
c. long d = 2343223;
d. float f = 3.14;
b:不对,超出了byte的范围
d:不对,缺少f,应该写为3.14f或3.14F
浮点数能用于比较吗?下面可能打印什么结果:
float d1 = 423432423f; float d2 = d1+1; if(d1==d2 ){ System.out.println("d1==d2"); }else{ System.out.println("d1!=d2"); } |
打印结果为: d1 == d2
float类型的数据在内存中的存储形式为科学计数法, 且有效位数为7位, 则d1为4.2343242E7, d2用科学计数法表示同样为4.2343242E7, 因此d1 == d2
字符型变量几个字节? 这种写法对不? char c = "d";
字符型变量占2个字节
写法不对,应该为char c=‘d’;
布尔型变量占用空间是一位还是一个字节?
布尔型变量占一位
这种写法好不好? if(b==true)
不好,应写为if(b)
常量的声明使用哪个关键字?
常量的声明使用的关键字是final
常量的命名规范是?
全部由大写字母组成,单词间通过下划线来界定
解释一下,驼峰原则?
当变量或函数名称需要多个英文单词组成时,首字母以小写开头,每个单词首字母大写(第一个单词除外)
使用Scanner接收键盘输入,是否一定要加import Java.util.*; ?
需要导包
也可以写为import java.util.Scanner;
类名的命名规则是? 方法名、变量名的命名规则是否一致? 常量的命名规则是?
类的命名规则:每个英文单词的首字母都大写
方法名、变量名的命名规则:第一个单词首字母小写,从第二个单词后,每个单词的首字母大写
常量的命名规则:字母全部大写
算术运算符中类型提升是怎么回事? a+b返回什么类型? int a=3; long b=3;
类型提升指的是自动类型转换
a+b返回的是long类型
i++和++i的异同之处
相同:都是变量i自增1
i++与++i作为一条单独语句使用时, 没有区别
不同:i++是先使用i的值进行其他运算,然后再自增1
++i是先自增1,然后再使用i的值进行其他运算
关系运算符中,能不能这么写:"1<a<3"?
不能,
应该写为a>1&&a<3
逻辑运算符|、&、!、^的含义及其运算规则?
| 或: 只要有一个为true,则直接返回true
& 与: 只要有一个为false,则直接返回false
! 非: 如果为true,则返回false,如果为false,则返回true
^ 异或: 如果两个操作数相同,则返回false,如果两个操作数不同,则返回true
运算符||和|的异同之处
相同:
|| 与 | 都是逻辑运算符, 运算规则都为只要有一个为true,则直接返回true
不同:
|| 短路或 : 从左到右计算,如果符号左边的操作数为true,则不会继续计算,直接返回 true; 如果符号左边的操作数为false,则需要继续计算
| 逻辑或:操作数左右两边的操作数都需要计算,不会发生短路
|| 只是逻辑运算符
| 还可以是位运算符中的按位或符号
5*4最快的运算方式是?
位运算5<<2
这两个表达式分别返回什么结果? ((1<3)?"a":"b")+3+4, x=-2; x > 0 ? 1 : (x == 0 ? 0 : -1)
((1<3)?"a":"b")+3+4 返回结果为a34
x=-2; x > 0 ? 1 : (x == 0 ? 0 : -1) 返回结果为-1
什么情况下,加号会变成字符串连接符?
“+”号左右一个为String类型时,则变成字符连接符
4&5,4|5的结果分别是多少? 4&&5这个操作可行吗?为什么?
4&5的结果为4
4|5的结果为5
4&&5这个操作不可行,因为&&左右要求为boolean类型表达式
int能否自动转换成byte,short,char? 是否有一定条件才能转换?
不能
需要强制类型转换
long能自动转换成int吗?long能自动转换成float吗?
long可以自动转成int
long可以自动转成float
自动类型转换中,容量小和容量大指的是什么意思?
容量大小指的是不同数据类型的存储数据的范围
强制类型转换中,是否可能发生数据丢失?
可能发生数据丢失
布尔类型能否自动转换为int? 如果不能,简述理由。
不能
因为类型不匹配
下面两种写法,哪个较好:
a. 70L*60*24*365*70*20
b. 70*60*24*365*70*20L
第一种写法好;
第二种表达式的前半部分70*60*24*365*70的乘积有可能会超过int的取值范围, 导致精度损失
第三章 控制语句
三种控制结构是什么?
顺序结构,选择结构,循环结构
如果if语句后面不写{},if的控制范围是否只限于第一句?
正确
Math.random()是什么意思?如果想获得15-20之间的随机数,怎么办?
产生一个0-1之间的随机数,包含0但不包含1
(int)(Math.random()*6)+15;
switch语句的功能是否完全可以使用if else if else多选择结构来代替?如果是,为什么还需要switch结构?
可以
switch一般用来做多值的判断,如果判断条件为区间,则最好使用多重if来做,如果是等值情况最好使用switch来做
switch中的表达式的结果需要是什么类型?
byte,char,short,int
jdk1.5 加入了枚举
jdk1.7加入了String
switch语句中,一个case开始执行后,什么时候结束执行这个case的语句?
遇到break结束执行这个case语句
switch语句中,default是否必须写?
不是必须写
下面代码有什么错误?
switch (c2) { case 'y'; case 'w'; System.out.println("半元音"); break; default: System.out.println("辅音"); } |
case后的表达式后面应该是“:”冒号
循环结构模拟了现实世界中的什么逻辑?
循环结构模拟了现实世界中的“重复问题“的逻辑
循环结构的四种内部结构是什么?
while(布尔表达式){
循环体;
}
do{
循环体;
}while(布尔表达式);
for(初始表达式;布尔表达式;迭代因子){
循环体;
}
foreach(数组或集合中元素的类型 迭代变量:数组或集合名){
循环体;
}
while和dowhile有什么区别?
当条件不成立时,do-while至少执行一次循环体
什么情况下,会出现死循环?并写出一个例子来
循环条件始终成立时,则会出现死循环
while(true){
System.out.println(“helloworld”);
}
for循环相比while循环有什么优势?
语法结构比while简便,
通常用于解决循环次数固定的问题
下面代码都有什么问题:
do{ System.out.println(a); a++; } while (a<0) |
a没有初始化
下面代码有错误吗?如果有,指出错误:
for(int i=0;i<=10;i++){ System.out.println(i); //循环体 } System.out.println("(((((("+i); |
i超出了作用域的范围
循环中,break的作用是?continue的作用是?
break用于强行退出循环,不执行循环中剩余的语句
continue用于跳过本次循环, 不执行continue后的语句, 继续下一次循环
语句块能否使用外部的变量?语句块中定义的变量,外部能否使用?
语句块能使用外部的变量, 但是语句块中定义的变量外部不能使用
方法的定义中,是否必须要有返回值类型?如果确实不需返回值,使用哪个关键字声明?
返回值类型不是必须的
不需要返回值使用关键字void
方法的定义中,return是否必须?它有什么作用?
不是必须
return语句终止方法的运行并指定要返回的数据
Java中,参数的传递使用值传递还是引用传递?
值传递
方法定义中,形式参数和实际参数有什么区别?用自己的话描述。
方法定义时的参数称为形式参数,需要数据类型
方法调用时的参数称为实际参数,不需要类型,只需要值
方法定义时,使用实参还是形参?
方法定义时,使用的是形参
定义形参时,必须要写变量类型吗?
必须要写变量类型
实参类型是否必须和形参类型匹配?
必须匹配
什么是方法的重载,有什么作用?
方法重载:
[1]在同一个类中
[2]方法的名称相同
[3]参数列表不同
[4]与访问修饰符和返回值类型无关
[5]与异常无关
作用:
传递不同的参数实现相同的效果
两同三不同指的是?返回值不同构成重载吗?形参名称不同构成重载吗?
两同:同一个类中,方法名称相同
三不同:参数列表的参数的类型,个数,顺序不同
返回值不同构不能方法得载
形参名称不同构不成方法重载
【上机】根据随机生成的的月份,打出该月份的天数.(不考虑闰年、闰月)
public class Test{
public static void main(String [] args){
int day=0;
int ran=(int)(Math.random()*12)+1;
switch(ran){
case 2:
day=28;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day=31;
break;
default:
day=30;
break;
}
System.out.println(ran+”月,共”+day+”天”);
}
}
【上机】用while和for循环分别计算100以内奇数和偶数的和,并输出。
(1)求1-100以内奇数的和;
用while循环:
int i=1;
int sum=0;
while(i<=100){
sum=sum+i;
i+=2;
}
System.out.println("1-100之间所有奇数的和是"+sum);
用for循环:
int i=1;
int sum=0;
for(i=1;i<=100;i+=2){
sum=sum+i;
}
System.out.println("1-100之间所有奇数的和是"+sum);
(2)求1-100以内偶数的和(略)
【上机】用while和for循环输出1-1000之间能被5整除的数,且每行输出3个。
用while:
int i=1;
int count=0;
while(i<=1000){
if(i%5==0) {
System.out.print(i+"\t");
count++;
if(count%3==0){
System.out.println();
}
}
i++;
}
用for循环:
int i=1;
int count=0;
for(i=1;i<=1000;i++){
if(i%5==0) {
System.out.print(i+"\t");
count++;
if(count%3==0){
System.out.println();
}
}
}
【上机】打印出九九乘法表
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(j+”*” +i+”=”+(i*j)+””);
}
System.out.println();
}
【上机】生成0-100随机数,直到生成88为止,停止循环!
public static void main(String[] args) {
//生成1-100随机数;
int r=(int)(Math.random()*100)+1;
while(r!=88){
r=(int)(Math.random()*100)+1;
}
}
【上机】把100~150之间不能被3整除的数输出
for(int i=100;i<=150;i++){
if(i%3!=0){
System.out.println(i);
}
}
【上机】打印出实心10*10正方形、空心10*10正方形
for(int i=1;i<=10;i++){
for(int j=1;j<=10;i++){
System.out.print(“*”);
}
System.out.println();
}
【上机】打印出实心10*10菱形, 空心10*10菱形
//1-6行正三角
for(int i = 0; i < 6; i++){
//*前空格
for(int j = 0; j < 5 - i; j++){
System.out.print("");
}
//*
for(int j = 0; j < 2 * i + 1; j++){
System.out.print("*");
}
//*后空格
for(int j = 0; j < 5 - i; j++){
System.out.print("");
}
System.out.println();
}
//7-11行倒三角
for(int i = 0; i < 5; i++){
//*前空格
for(int j = 0; j < i + 1; j++){
System.out.print("");
}
//*
for(int j = 0; j < 9 - 2 * i; j++){
System.out.print("*");
}
//*后空格
for(int j = 0; j < i + 1; j++){
System.out.print("");
}
System.out.println();
}
【上机】将如上所有上机相关算法的作业,封装成方法,便于重用。
第四章 数组
数组的类型可以为任意类型吗?
可以是任意类型
数组中的元素的类型必须是相同的吗? 数组中的元素是有序的吗?
数组中元素的类型必须是相同的
数组中元素是有序的, 索引的顺序
数组的长度可变不? 数组的长度使用哪个属性?
数组一旦声明其长度不能更改
数组的长度属性是length
数组元素下标(或索引)的范围是?
范围是0-数组名.length-1
数组也是引用类型吗? 数组也是对象,这句话对吗?
数组是引用数据类型
数组也是对象这句话正确
数组中的元素就像对象中的成员变量一样,初始化方式也一样。这句话对吗?
正确
【上机】数组的三种初始化方式是什么? 并测试练习相关代码
静态初始化
int [] a={1,2,3};
动态初始化
int [] a=new int[2];
a[0]=1;
a[1]=2;
默认初始化
int [] a=new int[2];//0,0
数组的静态初始化代码,下面代码有没有不合理的地方:
Dog[] dogs2 = { new Dog("大黄",1), new Dog("小强",2), }; |
有,new Dog(“小强”,2)后的逗号应去掉
完成如下代码:
char[] s; s = new char[26]; for ( int i=0; i<26; i++ ) { s[i] = (char) (’A’ + i); System.out.println(s[i]); // System.out.println(“s[” + i + “]=” + s[i]); } |
下面的数组定义哪些是正确的?
A: int a[][] = new int[3,3]; B: int a[3][3] = new int[][]; C: int a[][] = new int[3][3]; D: int []a[] = new int[3][3]; E: int[][]a = new int[3][3]; |
CDE是正确的
请在下面语句中找出一个正确的。
A. int arr1[2][3];
B. int[][] a2 = new int[2][];
C. int[][] arr2=new int [][4];
D. int arr3[][4]= new int [3][4];
B正确
【上机】定义一个长度为10 的一维字符串数组,在每一个元素存放一个单词;然
后运行时从命令行输入一个单词,程序判断数组是否包含有这个单词,包含这个
单词就打印出“Yes”,不包含就打印出“No” 。
public class Test{
public static boolean isFind(String [] arr,String word){
boolean isFlag=false;
for(int i=0;i<arr.length;i++){
if(word.equals(arr[i])){
isFlag=true;
break;
}
}
return isFlag;
}
public static void main(String [] args){
String[] arr={“hello”,”world”,”java”,”html”,”oracle”,
”apple”,”orange”,”banana”,”red”,”green”};
System.out.println(isFind(arr,args[0])?”Yes”:”No”);
}
}
冒泡排序的基本思路
1.整个数列分成两部分:前面是无序数列,后面是有序数列
2.初始状态下,整个数列都是无序的,有序数列是空
3.如果一个数列有n个元素,则至多需要n-1趟循环才能保证数列有序
4.每一趟循环可以让无序数列中最大数排到最后,(也就是说有序数列的元素个数增加1)
5.每一趟循环都从数列的第一个元素开始进行比较,依次比较相邻的两个元素,比较到无序数列的末尾即可(而不是数列的末尾)
6.如果前一个大于后一个,交换
7.根据是否发生交换判断数组是否已经有序
使用冒泡排序完成数组元素的排序
int [] array={34,23,4,55,34,53};
for(int i=0;i<array.length-1;i++){
boolean flag = true;
for(int j=0;j<array.length-1-i;j++){
if(array[j]>array[j+1]){
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
Flag = false;
}
}
if(flag){
break;
}
}
可变参数的作用及其用法
作用:适用于参数个数不确定、类型确定的情况,java把可变参数当做数组处理
用法:
只能出现在参数列表的最后
…位于变量类型和变量名之间,前后有无空格都可以
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数
如何给main方法传递实参
通过命令行参数给main方法传递实参
【上机】用二重循环求出二维数组b所有元素的和:
int[][] b={{11},{21,22},{31,32,33}}
int sum=0;
for(int i=0;i<b.length;i++){
for(int j=0;j<b[i].length;j++){
sum+=b[i][j];
}
}
System.out.println(“和为:”+sum);
eclipse可以开发Java,可以开发c++吗?
可以
eclilpse中的debug模式有什么好处?
修正语法错误和逻辑错误的过程,保证程序的正确性
eclipse中运行一个Java程序,如何操作?
单击右键选择run As ,再选择java Application
eclipse需要安装吗? 使用eclispe需要安装JDK吗?
不需要