java知识点及错题集合

java有关知识
1、&与&&的区别:&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行。&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。
2、java中print与println的区别: println打印的时候自带了换行,下一次在打印的时候从下一行开始打印。
print不换行,下次打印的时候在这次打印的东西后面直接打印。

错题集合
一、选择题

1.下列哪个类的声明是正确的?(D)
A、protected private number
B、abstract private move(){}
C、abstract final class HI{}
D、public abstract class Car{}

2.下面关于Java语言中实例方法和类方法的说法,哪项是对的?(D )
A、实例方法可以操作实例变量也可以操作类变量
B、实例方法可以直接通过类名调用
C、类方法可以操作实例变量也可以操作类变量
D、类方法可以直接通过类名调用

3.下列那一项说法最好地描述了java中的对象?(B )
A.对象是一组具有共同特征的结构和行为的类。
B.对象是一种数据结构,它具有操作数据的方法。
C.对象是方法的集合,这些方法在小程序窗口或应用程序窗口中产生图形元素,或者计算和返回值。
D.对象是通过import命令引入到程序中的所有事情。

4.下面关于类的说法错误的是(A )
A.java语言的类支持单继承和多继承
B.类是对所有具有一定共性的对象的抽象
C.类是java语言中的一种复合数据类型
D.类中包含数据变量和方法

5.试题2:阅读以下代码:
import java.io.;
import java.util.
;
public class foo{
public static void main (String[] args)
{String s;System.out.println(“s=” + s);}
}
输出结果应该是(A)
A、由于String s没有初始化,代码不能编译通过 B、代码得到编译,并输出“s=null”
C、代码得到编译,并输出“s=”
D、代码得到编译,但捕获到 NullPointException异常

  1. 关于以下程序段,正确的说法是(B)
  2. 1. String s1=”abc”+”def”;
  3. 2. String s2=new String(s1);
  4. 3. if(s1= =s2)
  5. 4. System.out.println(“= = succeeded”);
  6. 5.if (s1.equals(s2))
  7. 6. System.out.println(“.equals() succeeded”);

A、行4执行,行6不执行 B、行6执行,行4不执行
C、行4与行6都将执行 D、行4、行6都不执行

7.java程序运行时,用于判定一个对象实例的类型运算符是(A)
A、instanceof
B、equal
C、 ==
D、以上都对

8.String或StringBuffer类的对象在调用以下哪个方法时其自身会发生更改?(D)
A、StringBuffer类的length ()方法
B、String类的replace()方法
C、String类的toUpperCase()方法
D、StringBuffer类的reverse ()方法
E、String类的charAt()方法

9.下列能获得Date的实例对象的语句为(B)

A、Calendar.getInstance().getTime();;
B、new Calendar().getTime();;
C、new Date();;
D、DateFormat.getDateInstance(DateFormat.LONG).parse(“2017年5月20日”);;

10、Integer;类是基本数据int的封装类,下列不能返回Integer实例对象的是(D)。

A、new Integer(“123”);;
B、 Integer.valueOf(123");;
C、 Integer.valueOf(“123”);;
D、 Integer.parseInt(“123”);;

11、下面不能实现将数形式的字符串String s = “23”;转换为数23的语句时(C)。
A、Integer.valueOf(s).intValue();;
B、 Integer.parseInt(s);;
C、 Integer.intValue(s);;
D、new Ingeger(s).intValue();;

12、下列关于Thread类提供的线程控制方法的说法中,错误的一项是(C) A、线程A通过调用interrupt()方法来中断其阻塞状态
B、若线程A调用方法isAlive()返回值为true,则说明A正在执行中
C、currentThread()方法返回当前线程的引用
D、在线程A中执行线程B的join()方法,则线程A等待直到B执行完成

13、下列说法中错误的一项是(C)
A、线程只能在其创建时设置所属的线程组
B、Java中的第一个线程都属于某个线程组
C、线程创建之后,可以从一个线程组转移到另一个线程组
D、新建的线程默认情况下属于其父线程所属的线程组

14、以下哪个是ServerSocket类中用于接收来自客户端请求的方法?(D) A、get() B、receive() C、getOutputStream() D、accept()

15、以下哪个类用于实现TCP通信的客户端程序?(B)
A、ServerSocket B、Socket C、Client D、Server
二、填空题
1.接口的所有成员域都具有public 、static和final属性。

三、判断题
1.如果方法的参数是基本数据类型,则直接将实参的值传递给方法体,方法内对形参的修改,会改变实参的原来值。(错)

2.如果方法的参数是对象类型,则直接将实参对象的引用值传递给方法体,方法内对形参的任何修改,会改变实参的原来值。(对)

3、异常对象代表当前出现的一个具体异常。(对)

4、使用Iterator迭代集合元素时,可以调用集合对象的方法增删元素。(错)

5、如果前台线程全部死亡,后台线程也会自动死亡。(对)
四、编程题
1. 字符串处理问题
Java语言中使用字符串对象String封装,String对象提供了丰富的处理方法,在Java的API文档中对String类型的主要常用方法摘要如下:
char charAt(int index) 返回指定索引处的 char 值。
int compareTo(String anotherString) 按字典顺序比较两个字符串。
int compareToIgnoreCase(String str) 不考虑大小写,按字典顺序比较两个字符串。
String concat(String str) 将指定字符串联到此字符串的结尾。
static String copyValueOf(char[] data) 返回指定数组中表示该字符序列的字符串。
boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束。 byte[] getBytes() 使用平台默认的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中。
byte[] getBytes(String charsetName) 使用指定的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中。
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符从此字符串复制到目标字符数组。
int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。
int indexOf(int ch, int fromIndex) 从指定的索引开始搜索,返回在此字符串中第一次出现指定字符处的索引。
int indexOf(String str) 返回第一次出现的指定子字符串在此字符串中的索引。
int indexOf(String str, int fromIndex) 从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。
int lastIndexOf(int ch) 返回最后一次出现的指定字符在此字符串中的索引。
int lastIndexOf(int ch, int fromIndex) 从指定的索引处开始进行后向搜索,返回最后一次出现的指定字符在此字符串中的索引。
int lastIndexOf(String str) 返回在此字符串中最右边出现的指定子字符串的索引。
int lastIndexOf(String str, int fromIndex) 从指定的索引处开始向后搜索,返回在此字符串中最后一次出现的指定子字符串的索引。
int length() 返回此字符串的长度。
String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。
String replace(CharSequence target, CharSequence replacement) 使用指定的字面值替换序列替换此字符串匹配字面值目标序列的每个子字符串。 String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。
String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。
char[] toCharArray() 将此字符串转换为一个新的字符数组。
String toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
String toString() 返回此对象本身(它已经是一个字符串!)。
String toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
String toUpperCase(Locale locale) 使用给定的 Locale 规则将此 String 中的所有字符都转换为大写。
String trim() 返回字符串的副本,忽略前导空白和尾部空白。
给你的问题是:请你利用字符串处理函数完成将标准输入的一行字符串中的数字字符提出来,你可以使用如下代码读入一行字符串:
String line=null;
Scanner in = new Scanner(System.in);
while(in.hasNextLine()){
line = in.next();
}
输入: 标准输入,每行输入不超过255个字符;
输出: 标准输出,将每行字符串中的数字字符使用一行连续输出。
测试用例输入:

adfafdafdaf[o,903243adsfaf23545asdf5
asd23fawet5gart0ringalr4dgjeo5ardsafa

测试用例输出:
903243235455
235045


 import java.util.Scanner;
 public class numinstr{
  public static void main(String[] args){
   Scanner in =new Scanner (System.in);
   while (in.hasNext()){
    String s=in.nextLine(); 
    for(int i=0;i<s.length();i++){ 
     if(s.charAt(i) >='0'&&s.charAt(i)<='9')
     System.out.print(s.charAt(i)); 
     } 
     } 
     }

2.求课程成绩的总分和平均分
题目
描述 一个学生考了数学、英语、语文三门,求总分和平均分。 输入 输入三个整数,中间空格隔开,分别表示数学、英语、语文三门成绩。 输出 输出两行,第一行输出总分,第二行输出平均分,其中平均分保留两位小数。请注意行尾输出 换行。
样例输入
90 85 90
样例输出
265
88.33

import java.util.Scanner;
public class p11 {	
public static void main(String args[])	{
Scanner sc = new Scanner(System.in);  
  int a = sc.nextInt();    
  int b = sc.nextInt();    
  int c = sc.nextInt();   
  int zongfen=a+b+c;   
  double avg=zongfen/3.0;   
  System.out.println(zongfen);   
System.out.printf("%.2f",avg);	
      }
  } 

3.球的相关计算问题
球的相关计算涉及到球的体积和球的表面积以及过直径的截面积等,我们知道,以上计算仅需要 知道球的半径就可以利用计算公式计算出来,计算中用到的圆周率使用3.14进行计算。 输入: 标准输入一个浮点数r(r>0),代表需要计算的球的半径. 输出: 标准输出,根据输入的球半径r,依次输出球表面积、圆球体积和直径的侧面积大小,数据间由 一个空格隔开,结果保留2位有效数字。
测试用例输入:
3
测试用例输出:
113.04 113.04 28.26
代码2:

 import java.util.Scanner; 
  public class p2  {
 public p2() { } 
 public static void main(String args[])  {
 double pi=3.14; Scanner in = new Scanner(System.in);  
 double r = in.nextDouble();
 double s = 4*pi * r * r; 
 double v = 4/3.0*pi*r*r*r;  
 double sc = pi * r * r; 
 System.out.printf("%.2f ",s); 
 System.out.printf("%.2f ",v); 
 System.out.printf("%.2f",sc);
       }
  } 

4.多关键字排序
学生考试成绩的统计利用计算机软件将变得十份简单的事,由于你很勤奋,并且刚学习了面向对象程序设计Java,在Java中提供了面向对象程序设计方法,并提供了大量有用的工具类,解决该问题你将成为能手,我们知道只要利用容器 Collections.sort()方法,很方便解决对象的排序问题,如果一个年级的学生参加了有语文、数学和英语三科目的考试,需要计算出每个学生的总分和平均成绩,并且要按照总分排序,如果总分相同,则依照语文、数学再英语的成绩排序,即排序关键词依次为总分、语文、数学、英语。请你设计一个程序解决该问题。 提示:利用输入数据的每行创建一个Student对象,将所有学生对象存储到一个List stulist = new ArrayList();线性表中,再利用Collections.sort(stulist,new MyComptor());就解决排序问题,然后将stulist中的每个学生输出,就完成该排序问题了,但为了能排序,Collections必须知道对象排序规则,要定义一个规则,是通过设计一个比较器完成,比较器的主体如下:
class MyComptor implements Comparator {
public int compare(Object o1, Object o2) {
Student stu1 =(Student)o1;
Student stu2 =(Student)o2;
if(…){
//填写比较规则
return 1;
}
else{
return 0;
}
}
}
下面个点对象排序的参考实例:
Point point2 = new Point(2,2,2);
Point point1 = new Point(1,1,1);
Point point3 = new Point(3,1,2);
List points = new ArrayList();
points.add(point2);
points.add(point1);
points.add(point3);
//根据point中的升序输出
Collections.sort(points, new SortByXdesc());
SortByXdesc对象的定义如下:
public class SortByXdesc implements Comparator {
//根据point中的x降序输出 @Override public int compare(Object o1, Object o2) {
Point point1 =(Point)o1;
Point point2 =(Point)o2;
if(point1.getX()>point2.getX()){
return 1;
}else{
return 0;
}
}
}
标准输入: 第一行为一个正整数N,表示该年纪共有的学生数,接下来的N行,每行为一个学生的信息,依次为学号、班级、语文成绩、数学成绩和英语成绩,其中学号为10个字符的字符串,班级和成绩为正整数,他们之间由一个空格隔开。
标准输出: 输出该年级学生的成绩单,即根据总分和语文、数学、英语成绩为次关键词的排序后的成绩单,每行输出一个学生的成绩,使用一个空格隔开,依次输出如下数据:学号 班级 语文 数学 英语 总分 平均其中平均成绩四舍五入保留2位小数。
测试用例输入:
4
0806401001 1 56 64 77
0806401002 1 75 68 54
0806401003 1 68 79 76
0806401004 1 56 57 84
测试用例输出:
0806401003 1 68 79 76 223 74.33
0806401002 1 75 68 54 197 65.67
0806401001 1 56 64 77 197 65.67
0806401004 1 56 57 84 197 65.67

 import java.text.DecimalFormat;
   import java.util.*; 
   public class Sort { 	
   public static void main(String[] args) {	
   	// TODO Auto-generated method stub	
   String sno = null;		
   int sclass, chinese, math, english;		
   ArrayList<Student> stulist = new ArrayList<Student>();		
   Scanner sc = new Scanner(System.in);		
   int n = sc.nextInt();		
   sc.nextLine();		
   for (int i = 0; i <n; i++) {		
   sno = sc.next();	
   sclass = sc.nextInt();		
   chinese = sc.nextInt();	
   math = sc.nextInt();		
   english = sc.nextInt();		
   Student stu = new Student(sno, sclass, chinese, math, english);		
   stulist.add(stu);	
    }		
    Collections.sort(stulist,new MyComptor());	
   for(Student stu:stulist)	 		
   System.out.println(stu);	 	 	
   		  }	
   	 }	
 class Student {	
 String sno;		
 int sclass, chinese, math, english,sum;        
 double avg;		
 Student(String sno, int sclass, int yuwen, int math, int english) {			this.sno = sno;			
this.sclass = sclass;		
this.chinese = yuwen;			
this.math = math;			
this.english = english;			
sum=chinese+math+english;			
avg=sum/3.0;		
} 		
public String toString(){		
DecimalFormat df = new DecimalFormat ("0.00");		
return sno + " " +sclass + " " + chinese + " " 				
+ math + " " + english + " " + sum + 				
+ " " + df.format(avg);	
 }	
 }	
class MyComptor implements Comparator<Object> 	
{
 public int compare(Object o1, Object o2)	
 { Student stu2 = (Student) o2; 	
 Student stu1 = (Student) o1; 
 if (stu1.sum > stu2.sum)return -1; 	
 else if (stu1.sum < stu2.sum) return 1; 	
 else if (stu1.chinese > stu2.chinese) return -1; 	
 else if (stu1.chinese < stu2.chinese) return 1; 	
 else if (stu1.math > stu2.math) return-1; 	
 else if (stu1.math < stu2.math) return 1; 	
 else if (stu1.english > stu2.english) return -1; 	
 else if (stu1.english < stu2.english) return 1; 	
 else return 0; 
 } 	
 }

5.利用类对象计算日期
在利用Java语言进行信息系统开发中,经常需要对日期进行计算和转换,比如,设置了某活动的 开始日期和结束日期,系统需要判断当前是否是该活动时间,在Java开发的信息系统中,通常日期 以字符串形式“yyyy-MM-dd hh:mm:ss”保存到数据库中,在进行转换中,通常需要将字符串表示 的日期转换为Date对象,Java API提供了一个工具SimpleDateFormat对象能将一个满足“yyyy-MM-dd hh:mm:ss”形式的字符串转换成一个Date对象。在日期转换中,经常也利用到时间戳,什么是时 间戳(timestamp)?时间戳(timestamp)是一种时间表示方式,定义为从格林威治时间1970年01月01日 00时00分00秒起至现在的总秒数。通过日期对象的getTime()将获得该日期的当前时间戳的毫秒数。
将日期字符串转换为Date对象的参考代码如下:
try {String dateString = “2009-08-02 13:43:00”;
DateFormat df = SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
Date date = df.parse(dateString);
}
catch(Exception ex) { }
给你的问题是,如何给出某活动的开始日期和结束日期,已经当前日期的时间戳,需要你编程判定当前日期所处的位置. 样例输入: 输入的第一行为一个正整数N,表示需要你计算活动次数,接下来的N行,每行的第一个数为一个 10位正整数,表示当前日期的时间戳秒数,接下来是两个字符串,表示活动开始日期和结束日 期。字符串满足日期“yyyy-MM-dd hh:mm:ss”格式。 样例输出: 如果当前日期在活动开始之前,就输出“Before",如果在活动之中输出"NOW",如果在活动之 后,输出"After".
测试输入数据:
2 1389339888 “2013-10-11 12:12:12” “2013-10-12 12:12:12”
1389339888 “2014-01-09 12:12:12” “2014-01-12 12:12:12”
测试输出数据:
After
NOW
实训分析:本问题是多测试用例问题,用例数可知,解决一个用例的类型为: 类型名称:DateQuestion 成员变量:private long tms;// 时间戳秒数private Date t_begin,t_end; 开始日期和结束日期成员方法:
构造方法1:public DateQuestion (String s)
{//完成输入的行提取tms和t_begin,t_end; }
构造方法2:public DateQuestion (long t,String s){
//完成输入的行提取tms和t_begin,t_end; }
构造方法3:public DateQuestion (long t,String s1,String s2){
//完成输入的行提取tms和t_begin,t_end; }
public String getResult(){//从日期中提取毫秒数(date.getTime()方法),再与tms的大小进行比较,算法比较简单}提示:
本实训的难度在于从输入行中提取日期数据,方法有多种,建议先读取一个long数据,再读一行,从行字符串中使用” ”将字符串分成多组,分组方法使用Scanner对象.
参考答案1:
构造方法public DateQuestion (String s){ }

 import java.util.Date;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Scanner;class DateQuestion {	
 private long tms;// 时间戳秒数	
 private  Date t_begin,t_end; // 开始日期和结束日期	
 public DateQuestion(String s) {		
 // 完成输入的行提取tms和t_begin,t_end; }			
 tms = Long.parseLong(s.substring(0, 10));		
 SimpleDateFormat dat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");		
 try {			t_begin = dat.parse(s.substring(12, 31));			t_end = dat.parse(s.substring(34, s.length() - 1));		
 } 
 catch (ParseException e) {			
 // TODO Auto-generated catch block			
 e.printStackTrace();		
 }				
 }	
 public String getResult() {	
 // 从日期中提取毫秒数(date.getTime()方法),再与tms的大小进行比较,算法比较简单		
 Long time_me = tms * 1000;		
 long time_begin = t_begin.getTime();		
 long time_end = t_end.getTime();		
 String result;		
 if (time_me < time_begin)			
 result = "Before";		
 else if (time_me > time_end)			
 result = "After";		
 else			
 result = "NOW";		
 return result;	
 }} 
 public class DateTest {	
 public static void main(String[] args) {		
 Scanner in = new Scanner(System.in);		
 int n = in.nextInt();		
 String s = in.nextLine();		
 for (int i = 0; i < n; i++) {			
 s = in.nextLine();			
 DateQuestion date = new DateQuestion(s);			
 System.out.println(date.getResult());		
 }	}}

参考答案2:
构造方法public DateQuestion (long t ,String s){ }

class DateQuestion {	
private long tms;
// 时间戳秒数	private  Date t_begin,Date t_end; 
// 开始日期和结束日期	
public DateQuestion(long t,String s)  {		
// 完成输入的行提取tms和t_begin,t_end; 			
String ss[]=s.split("\"");		
tms = t;		
try {			
SimpleDateFormat dat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");			
t_begin = dat.parse(ss[1]);			
t_end = dat.parse(ss[3]);		
} 
catch (ParseException e) {			
// TODO Auto-generated catch block			
e.printStackTrace();		
}			
}	
public String getResult() {	
// 从日期中提取毫秒数(date.getTime()方法),再与tms的大小进行比较,算法比较简单		
Long time_me = tms * 1000;		
long time_begin = t_begin.getTime();		
long time_end = t_end.getTime();		
String result;		
if (time_me < time_begin)			
result = "Before";		
else if (time_me > time_end)			
result = "After";		
else			
result = "NOW";		
return result;	
}}
public class DateTest {	
public static void main(String[] args) {		
Scanner in = new Scanner(System.in);		
int n = in.nextInt();		
String s = in.nextLine();		
for (int i = 0; i < n; i++) {long t=in.nextLong();			
s = in.nextLine();			
DateQuestion date = new DateQuestion(t,s);			
System.out.println(date.getResult());		
}	
}}  

参考答案3:

import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Scanner;public class p12 { 	
 public static void main(String[] args) throws Exception { 		
 Scanner in = new Scanner(System.in); 		
 int n = in.nextInt(); 		
 String s = in.nextLine(); 		
 SimpleDateFormat dat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");		
 for (int k = 0; k < n; k++) 		
 { String ss[] = new String[3]; 		
 s=in.nextLine();		
 ss[0] = s.substring(0, 10); 		
 ss[1] = s.substring(12, 31); 		
 ss[2] = s.substring(34, s.length() -1); 		
 Long time_me = Long.parseLong(ss[0]) * 1000; 		
 long time_begin = dat.parse(ss[1]).getTime(); 		
 long time_end = dat.parse(ss[2]).getTime(); 		
 if (time_me < time_begin)		
 { System.out.println("Before"); } 		
 else if (time_me > time_end) 		
 { System.out.println("After"); } 		
 else { System.out.println("NOW"); 		
 } 		
 } 		
 } 	
 }
****6. 函数表达式的计算****
请你设计一个程序,根据输入的x值计算出函数值y,函数表达式为: 输入数据的x值使用标准输入,x的输入占一行,你的计算结果也使用一行输出,输出结果保留6 位小数。 
输入测试用例: 
12.54 
用例输出结果: 
26.620000


```go

```bash

```cpp
import java.util.Scanner;
public class p9 {
public static void main(String[] args){	
Scanner in=new Scanner(System.in);	
double y,x=in.nextDouble();	
if(x<1) y=x;	
else if(x<10) y=2*x-1;	
else y=3*x-11;	
System.out.printf("%.6f",y);		
}} 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值