先做两个比较简单的先用:
import java.util.Arrays;
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Function {
/**
* 设计一个方法,完成字符串的解析。方法定义为:public void myParseString(String inputStr);
* 对于给定的字符串,取得字符串内的各个整数(不考虑小数,),然后将取得的数排序,按从小到大依次打印出来。
* @param args
*/
public static void main(String[] args) {
String s = "aa789bB22cc345dd;5.a";
new Function().myParseString(s);
}
public void myParseString(String inputStr){
String mathregix="\\d+";//数字
Vector vector=new Vector();
Pattern fun=Pattern.compile(mathregix);
Matcher match = fun.matcher(inputStr);
while (match.find()) {
vector.add(match.group(0));
}
Object[] obj=vector.toArray();
int[] result=new int[obj.length];
for (int i = 0; i < obj.length; i++) {
result[i]=Integer.parseInt((String) obj[i]);
}
Arrays.sort(result);
for (int i = 0; i < result.length; i++) {
System.out.println(result[i]);
}
}
}
import java.util.Date;
/**
* 有一个学生类(Student),其有四个私有属性,分别为:
* 学号no,字符串型;
* 姓名name,字符串型;
* 年龄age,整型;
* 生日birthday,日期型;
* 请:
* 1) 按上面描述设计类;
* 2) 定义对每个属性进行取值,赋值的方法;
* 3) 要求学号不能为空,则学号的长度不能少于5位字符,否则抛异常;
* 4) 年龄范围必须在[1,500]之间,否则抛出异常;
*/
public class Student {
private String no;
private String name;
private int age;
private Date birthday;
public int getAge() {
return age;
}
public void setAge(int age) throws Exception {
if(age<1||age<500)throw new Exception("年龄不合法。");
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNo() {
return no;
}
public void setNo(String no) throws Exception {
if(no==null)throw new Exception("学号不能为空!");
if(no.length()<5)throw new Exception("学号不能少于五位!");
this.no = no;
}
}
二、三题
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
/**
* 2. 设计一个GUI界面,要求打界面如下:
*点击文件->打开,打开文件选择器,选择打开给定的java.txt文件,将文件内所有a-z,A-Z之间的字符显示在界面的文本区域内。
* 3. 设置一个GUI界面,界面如下:
* 点击文件->保存,打开文件选择窗体,选择一个保存路径,将本界面文本区域内输入的内容进行过滤,将所有非a-z,A-Z之间的字符保存到C盘下的java.txt文件内。
* Java.txt文件内容如下:
* 我们在2009年第2学期学习Java Programming Design,于2009-6-16考试。
*
*
*
*/
public class FileEditer extends javax.swing.JFrame implements ActionListener {
private JMenuBar menubar;
private JMenu file;
private JMenuItem open;
private JTextArea area;
private JMenuItem save;
private JFileChooser jfc;
/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FileEditer inst = new FileEditer();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public FileEditer() {
super();
initGUI();
}
private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
{
area = new JTextArea();
getContentPane().add(area, BorderLayout.CENTER);
area.setText("文本区");
}
{
menubar = new JMenuBar();
setJMenuBar(menubar);
{
file = new JMenu();
menubar.add(file);
file.setText("文件");
file.setPreferredSize(new java.awt.Dimension(66, 21));
{
open = new JMenuItem();
file.add(open);
open.setText("打开");
open.setBorderPainted(false);
open.setActionCommand("open");
open.addActionListener(this);
}
{
save = new JMenuItem();
file.add(save);
save.setActionCommand("save");
save.setText("保存");
save.addActionListener(this);
}
}
}
{
jfc=new JFileChooser();
}
pack();
setSize(400, 300);
} catch (Exception e) {
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent e) {
if("open".equals(e.getActionCommand())){
int result=jfc.showOpenDialog(this);
if(result==jfc.APPROVE_OPTION){
File file=jfc.getSelectedFile();
try {
byte[] b=new byte[1024];
FileInputStream fis=new FileInputStream(file);
fis.read(b);
fis.close();
String string=new String(b,"GBK");
string=string.replaceAll("[^a-zA-Z]*", "");
area.setText(string.trim());
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException es) {
// TODO Auto-generated catch block
es.printStackTrace();
}
}
}else if("save".equals(e.getActionCommand())){
int result=jfc.showSaveDialog(this);
if(result!=jfc.APPROVE_OPTION)return;
File file=jfc.getSelectedFile();
try {
if(!file.exists()){
file.createNewFile();
}
String string = area.getText();
string=string.replaceAll("[a-zA-Z]*", "");
byte[] b=string.getBytes();
FileOutputStream fis=new FileOutputStream(file);
fis.write(b);
fis.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException es) {
// TODO Auto-generated catch block
es.printStackTrace();
}
}
}
}
⑵ java编程题目
import java.util.ArrayList;
import java.util.List;
public class Array1 {
public static void main(String[] args) {
List l=new ArrayList();
l.add(new Post("李荣","浦东","上海","上海","中国","021"));
l.add(new Post("张明","闸北","临沂","山东","中国","021"));
l.add(new Post("十三妹","徐汇","南京","江苏","中国","021"));
for(int i=0;i<l.size();i++)
{
Post p=(Post)l.get(i);
System.out.println(p.name + p.street + p.city+p.province+p.country+p.code);
}
}
}
class Post
{
String name;
String street;
String city;
String province;
String country;
String code;
public Post(String name, String street, String city, String province, String country,String code) {
this.name = name;
this.street = street;
this.city = city;
this.province = province;
this.country = country;
this.code = code;
}
}
⑶ java关于String编程题
importjava.io.File;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;
publicclass${
privatestaticList<String>data=newArrayList<String>();
publicstaticvoidmain(String[]args){
try{
Stringstr="atihhhfughwedckgg";
//(1)用代码实现统计有多少种字母,以及每个字母的个数,
test1(str);
System.out.println(data);
//(2)将查询的数据存放到D盘根目录下的Test文本文件下。
test2();
}catch(Exceptione){
e.printStackTrace();
}
}
privatestaticvoidtest1(Stringstr){
intlen=0;
Stringfst="";
while(str.length()>0){
len=str.length();
fst=str.substring(0,1);
str=str.replaceAll(fst,"");
data.add(fst+":"+(len-str.length()));
}
}
privatestaticvoidtest2()throwsIOException{
FileWriterfw=newFileWriter(newFile("d:/a.txt"));
for(Stringstr:data){
fw.write(str+" ");
}
fw.flush();
fw.close();
}
}
⑷ java面试题及答案
JAVA 面试32问
第一, 谈谈final, finally, finalize的区别。 (最常被问到)
final修饰符(关键字)
如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract,又被声明为final。将变量或方法声明为final,可以保证它们在使用中不被改变。其初始化可以在两个地方:一是其定义处,也就是说在final变量定义时直接给其赋值;二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重写(override)。
finally
在异常处理时提供finally块来执行任何清除操作。如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。
finalize
方法名。Java 技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
第二,Anonymous Inner Class(匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。
第三,Static Nested Class 和 Inner Class的不同,说得越多越好。(面试题有的很笼统)
Nested(嵌套)Class(一般是C++的说法)
nested class 是合成型聚集关系(Composite Aggregation) 的另一种表达方式,也就是说nested class也可以用Aggregation表达出来,但是,nested class更加精确地表达了一种专用的、紧耦合的关系,尤其在代码生成时,nested class在Java中映射成inline class。比如,计算机专用开关电源类可以作为计算机类的nested class,但是,电池组类就不一定适合作为计算机类的nested class,因为,电池组类表述的是一个过于通用的对象,可能还被包含(Aggregation)于模型中的其他设备对象。class A nested in class B,则说明A是一个nested class,一般A是用来完成B中的某种重要功能。
Inner Class (一般是JAVA的说法)
Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。
静态内部类(Inner Class)意味着a创建一个static内部类的对象,不需要一个外部类对象,b不能从一个static内部类的一个对象访问一个外部类对象
第四,&和&&的区别。(这个问得很少)
&是位运算符。&可为位运算,也可为逻辑运算,看情况而定。&&是布尔逻辑运算符。
第五,HashMap和Hashtable的区别。(常问)
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。
Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许,还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue(Returns true if this map maps one or more keys to the specified value)和containsKey(Returns true if this map contains a mapping for the specified key)。因为contains(Tests if some key maps into the specified value in this hashtable)方法容易让人引起误解。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
第六,Collection 和 Collections的区别。(你千万别说一个是单数一个是复数)
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
Collection是个java.util下的接口,它是各种集合结构的父接口。
第七,什么时候用assert。(API级的技术人员有可能会问这个)
断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 Assertionerror。它用于调试目的:
assert(a > 0); // throws an Assertionerror if a <= 0
断言可以有两种形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 应该总是产生一个布尔值。
Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。
断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:
javac -source 1.4 Test.java
要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。
要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。
要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。
可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。
第八,GC是什么?为什么要有GC?(基础)
GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
gc 虽可清理,但非立刻清理
第九,String s = new String("xyz");创建了几个String Object?
两个对象,一个是"xyx",一个是指向"xyx"的引用对象s。一个对象,一个对象引用。
第十,Math.round(11.5)等于多少? Math.round(-11.5)等于多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? ( 面试题都是很变态的,要做好受虐的准备)
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。
short s1 = 1; s1 += 1正确。
Byte a=1,b=1,bye c=a+b;错误,byte与byte,short与short运算返回值为int
第十二,sleep() 和 wait() 有什么区别? (搞线程的最爱)
sleep()
是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)"醒来"的线程具有更高的优先级 (b)正在运行的线程因为其它原因而阻塞。
wait()
是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到
第十三,Java有没有goto?(很十三的问题,如果哪个面试的问到这个问题,我劝你还是别进这家公司)
Goto java中的保留字,现在没有在java中使用。
第十四,数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。
String有有length()这个方法。
第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? (常问)
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,
重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。但是不能通过返回值进行overload。
第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
第十七,给我一个你最常见到的runtime exception。(如果你这个答不出来,面试的人会认为你没有实际编程经验)
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, , DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFORMatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
第十八,error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
error--unchecked exception--checked
第十九,List, Set, Map是否继承自Collection接口?
List,Set是Map不是(与Collection同级)
第二十,abstract class和interface有什么区别? (常问)
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
都不能
第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
第二十三,启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
第二十四,构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
第二十五,是否可以继承String类?
String类是final类故不可以继承
第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
第二十八,编程题: 用最有效率的方法算出2乘以8等于几?(有C背景的程序员特别喜欢问这种问题)
2 << 3
第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,有相同的hash code。看你的对象类型了。
第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
Ps:在Java7中String可以用在switch中
第三十二,编程题: 写一个Singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些
⑸ JAVA基础编程题~
public class student{
private String name;
private int age;
public student(String name,int age){ //student的带有String,int带参数的构造函数
this.name = name;
this.age = age; //把传进来的参数赋值给创建出来的类的对象
}
public static void main(String[] args){
student s = new student("zhangsan",18); //调用student的构造函数创 造一个对象s
System.out.println("姓名:"+s.name+"年龄:"+s.age);//调用对象的属性就用s.name s.age!
}
}
----------------------------------------------------------------------
public class Student {
static String name;//设定String类型的静态变量name
static int age;//设定int类型的静态变量age
public static void main(String[] args){//main为主方法,运行从main开始
name="zhangsan";//给name赋值zhangsan
age=18;//给age赋值18
System.out.println("该学生的名字为"+name+"年龄为:"+age);//输出name和age
}
}
static 修饰的属性和方法只属于这个类本身,而不属于这个类所创建出来的对象,所以可以直接写name,age 而不用像上面那种要先创建个类的对象出来 !
⑹ 一道Java的编程题~~!!
regedit;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
public class Regedit extends JFrame {
private JLabel account = new JLabel("账号");
private JTextField aText = new JTextField(10);
private JLabel password = new JLabel("密码");
private JPasswordField pText = new JPasswordField(10);
private JLabel conpass = new JLabel("确认密码");
private JPasswordField cText = new JPasswordField(10);
private JLabel birthday = new JLabel(" 生日");
private JComboBox year = new JComboBox(data(11, 1985));
private JLabel y = new JLabel("年");
private JComboBox month = new JComboBox(data(13, 0));
private JLabel m = new JLabel("月");
private JComboBox day = new JComboBox(data(32, 0));
private JLabel d = new JLabel("日");
private JLabel sex = new JLabel("性别");
private ButtonGroup group = new ButtonGroup();
private JRadioButton man = new JRadioButton("男", false);
private JRadioButton woman = new JRadioButton("女", false);
private JLabel interest = new JLabel(" 兴趣");
private JCheckBox read = new JCheckBox("阅读");
private JCheckBox sing = new JCheckBox("唱歌");
private JCheckBox dance = new JCheckBox("跳舞");
private JLabel remakes = new JLabel(" 备注");
private JTextArea rText = new JTextArea(6, 15);
private JButton button = new JButton("注册");
private String name, pass1, pass2, birth = "", intre = "", se, remake;
public static void main(String[] args) {
new Regedit();
}
public Regedit() {
setTitle("Regedit");
JPanel tz = new JPanel(new GridLayout(1, 2));
JPanel tOne = new JPanel(new GridLayout(3, 2));
JPanel tTwo = new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel tThree = new JPanel(new BorderLayout());
JPanel tFour = new JPanel(new BorderLayout());
JPanel tFive = new JPanel(new GridLayout(3, 1));
JPanel tSix = new JPanel(new GridLayout(1, 2));
JPanel tSeven = new JPanel(new GridLayout(2, 1));
JPanel tEight = new JPanel(new GridLayout(2, 1));
JPanel tNine = new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel tTen = new JPanel(new GridLayout(1, 2));
setLayout(new GridLayout(1, 2));
tOne.add(account);
tOne.add(aText);
aText.addActionListener(new Textaction(aText));
tOne.add(password);
tOne.add(pText);
pText.addActionListener(new Textaction(pText));
pText.setEchoChar('*');
tOne.add(conpass);
tOne.add(cText);
cText.addActionListener(new Textaction(cText));
cText.setEchoChar('*');
tTwo.add(birthday);
tTwo.add(year);
year.addActionListener(new birthday(year));
tTwo.add(y);
tTwo.add(month);
month.addActionListener(new birthday(month));
tTwo.add(m);
tTwo.add(day);
day.addActionListener(new birthday(day));
tTwo.add(d);
tSix.add(sex);
group.add(man);
man.addActionListener(new sex());
group.add(woman);
woman.addActionListener(new sex());
tSeven.add(man);
tSeven.add(woman);
tSeven.setBorder(BorderFactory.createLineBorder(Color.gray));
tSix.add(tSeven);
tFour.add(interest, BorderLayout.WEST);
tFive.add(read);
read.addActionListener(new interest(read));
tFive.add(sing);
sing.addActionListener(new interest(sing));
tFive.add(dance);
dance.addActionListener(new interest(dance));
tFive.setBorder(BorderFactory.createLineBorder(Color.gray));
tFour.add(tFive);
tNine.add(remakes);
rText.setBorder(BorderFactory.createLineBorder(Color.gray));
tNine.add(rText);
rText.setLineWrap(true);
tNine.add(button);
button.addActionListener(new button());
tz.add(tOne);
tThree.add(tTwo, BorderLayout.NORTH);
tThree.add(tFour);
tz.add(tThree);
tEight.add(tz);
tTen.add(tSix);
tTen.add(tNine);
tEight.add(tTen);
add(tEight);
pack();
setVisible(true);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private Integer[] data(int day, int j) {
Integer[] data = new Integer[day];
data[0] = null;
if (j == 0)
j = 1;
for (int i = 1; i < data.length; i++) {
data[i] = j + i - 1;
}
return data;
}
class Textaction implements ActionListener {
private JTextField text;
public Textaction(JTextField JTF) {
text = JTF;
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == aText) {
name = text.getText();
FocusManager.getCurrentManager().focusNextComponent();
}
if (e.getSource() == pText) {
FocusManager.getCurrentManager().focusNextComponent();
pass1 = text.getText();
}
if (e.getSource() == cText) {
pass2 = text.getText();
FocusManager.getCurrentManager().focusNextComponent();
}
}
}
class birthday implements ActionListener {
private JComboBox combo = new JComboBox();
public birthday(JComboBox JCB) {
combo = JCB;
}
public void actionPerformed(ActionEvent e) {
birth += combo.getSelectedItem() + " ";
}
}
class sex implements ActionListener {
public void actionPerformed(ActionEvent e) {
se = e.getActionCommand();
}
}
class interest implements ActionListener {
private JCheckBox check;
public interest(JCheckBox JBC) {
check = JBC;
}
public void actionPerformed(ActionEvent e) {
if (check.isSelected()) {
intre += e.getActionCommand() + " ";
}
}
}
class button implements ActionListener {
public void actionPerformed(ActionEvent e) {
int result = JOptionPane.showConfirmDialog(null, "您确定注册吗?", "请确认",
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.OK_OPTION) {
remake = remakes.getText();
try {
FileWriter out = new FileWriter("D:/Information.txt", true);
out.write(name + " " + pass1 + " " + se + " " + birth + " "
+ intre + " " + remake + "\r\n");
out.close();
} catch (IOException io) {
io.getStackTrace();
}
}
}
}
}
⑺ java 竞赛编程题,有点难度啊!求大侠
package computer;
import java.util.Arrays;import java.util.Random;
import java.util.Scanner;
public class SerachFunction {
public static int[] allnum=new int[20];
// picture ...like a picture
public void picOne(){
System.out.println("************");
System.out.println("1.选择排序");
System.out.println("2.冒泡排序");
System.out.println("3.插入排序");
System.out.println("4.全排列");
System.out.println("5.数字分解为数字和");
System.out.println("6.杀死小朋友问题");
System.out.println("7.阶乘");
System.out.println("8.双色球");
System.out.println("9.100-1000的水仙花数");
System.out.println("10.正数分解因数");
System.out.println("11.恐怖的事情 千万不要输入11");
System.out.println("输入-1退出");
System.out.println("输入-2查看问题注释");
System.out.println("************");
}
public void picTwo(){
System.out.println("注意输入单个字符参数(根据选项输入,多个参数以逗号分割): ");
}
public void picThree(){
System.out.println("5号问题为输入某一数字 出现这个数字可由哪些数字相加而得");
System.out.println("6号问题为9(输入)个已编号的小朋友围一圈报数1,2,3报到3的拖出去xx问剩下的小朋友是几号");
}
public void picFour(){
System.out.println("0>_<0~");
System.out.println("恐怖的事情发生了...说了不要点...");
System.out.println("楼主累死了....");
}
// main
public static void main(String[] args){
SerachFunction fc=new SerachFunction();
fc.inputFunction();
}
public void inputFunction(){ //接受指令并调用相关函数
int command;
char[] params;
Scanner sc=new Scanner(System.in);
while(true){
picOne();
if((command=sc.nextInt())==-1){
break;
}
picTwo();
params=getParamsArray(sc.next());
System.out.println();
switch(command){
case 1:
selectSort(params);
break;
case 2:
bubbleSort(params);
break;
case 3:
insertionSort(params);
break;
case 4:
fullArray(params,0);
break;
case 5:
resolveNum(getQuondam(params),0);
break;
case 6:
killChildren(getQuondam(params));
break;
case 7:
factorial(getQuondam(params),1);
break;
case 8:
twoColorBall();
break;
case 9:
daffodil();
break;
case 10:
int all=0;
primeFactor(getQuondam(params),0);
break;
case 11:
picFour();
break;
case -2:
picThree();
break;
}
System.out.println("Y(^_^)Y");
}
System.out.println("(*^_^*)");
}
/*
* com function
* */
public char[] getParamsArray(String params){
params=params.replaceAll(",","");
return params.toCharArray();
}//to get char[] params
// 选择排序
public void selectSort(char[] params){
for(int i=0;i<params.length-1;i++){
for(int m=i+1;m<params.length;m++){
if(params[i]>params[m]){
changePlace(params,m,i);
}
}
}
showChar(params);
System.out.println("选择排序结束");
}
//冒泡排序
public void bubbleSort(char[] params){
for(int i=params.length-1;i>0;i--){
for(int m=0;m<i;m++){
if(params[m]>params[m+1]){
changePlace(params,m,m+1);
}
}
}
showChar(params);
System.out.println("冒泡排序结束");
}
//插入排序
public void insertionSort(char[] params){
for(int i=1;i<params.length;i++){
for(int m=i-1;m>=0;m--){
if(params[m+1]<params[m]){
changePlace(params,m+1,m);
}
}
}
showChar(params);
System.out.println("插入排序结束");
}
//全排列
public void fullArray(char[] params,int begin){
if(begin==params.length){
showChar(params);
}
for(int i=begin;i<params.length;i++){
if(begin<=params.length){
changePlace(params,begin,i);
fullArray(params,begin+1);
changePlace(params,begin,i);
}
}
}
//数字分解为数字和
public void getAllNum(int[] num,int end){
System.out.print("分解方式:");
for(int i=0;i<end;i++){
System.out.print(num[i]);
if(i+1!=end){
System.out.print(',');
}
}
System.out.println("");
}
public int getArrayT(int[] num,int end){
int tot=0;
for(int i=0;i<end;i++){
tot+=num[i];
}
return tot;
}
public boolean getShoud(int[] num,int end){
for(int i=0;i<end;i++){
if(i+1<end){
if(num[i+1]<num[i]){
return false;
}
}
}
return true;
}
public void resolveNum(int num,int begin){
if(getArrayT(allnum,begin)==num){
if(getShoud(allnum,begin)){
getAllNum(allnum,begin);
}
}
for(int i=1;i<=num;i++){
if(getArrayT(allnum,begin)<=num){
allnum[begin]=i;
resolveNum(num,begin+1);
}
}
}
// 杀死小朋友
public void killChildren(int child){
int alivechild=child;
int num=0;
int index=0;
boolean[] childisdead=new boolean[child];
Arrays.fill(childisdead,true);
while(alivechild!=1){
if(childisdead[index]){
num++;
if(num%3==0){
alivechild--;
childisdead[index]=false;
num=0;
}
}
index++;
if(index==child)
index=0;
}
for(int i=0;i<childisdead.length;i++){
if(childisdead[i])
System.out.println((int)(i+1)+"号小朋友还活着");
}
}
//阶乘
public void factorial(int end,long output){
if(end==1){
System.out.println(output);
return;
}
output=output*end;
factorial(end-1,output);
}
//two color ball;
public void twoColorBall(){
int[] redball=new int[6];
int blueball=(int)(Math.random()*15+1);
int index=0;
while(true){
boolean bol=true;
int red=(int)(Math.random()*32+1);
for(int i=0;i<=index;i++){
if(red==redball[index]){
bol=false;
}
}
if(bol){
redball[index]=red;
index++;
}
if(index==6){
break;
}
}
System.out.print("红色:");
for(int i=0;i<6;i++){
System.out.print(redball[i]+",");
}
System.out.println("");
System.out.println("蓝色:"+blueball);
}
//水仙花
public void daffodil(){
int hundreds=0,decade=0,unit=0;
System.out.print("水仙花数:");
for(int i=100;i<1000;i++){
hundreds=i/100;
decade=(i%100)/10;
unit=(i%100)%10;
hundreds=hundreds*hundreds*hundreds;
decade=decade*decade*decade;
unit=unit*unit*unit;
if(i==(hundreds+decade+unit)){
System.out.print(i+",");
}
}
System.out.println("");
}
//分解为因数
public void getPriShow(int[] num,int end){
System.out.print("分解方式:");
for(int i=0;i<end;i++){
System.out.print(num[i]);
if(i+1!=end){
System.out.print('*');
}
}
System.out.println("");
}
public void primeFactor(int num,int begin){
if(num==1){
if(getShoud(allnum,begin)){
getPriShow(allnum,begin);
}
return;
}
for(int i=2;i<=num;i++){
if(num%i==0){
allnum[begin]=i;
primeFactor(num/i,begin+1);
}
}
}
//展示char数组
public void showChar(char[] params){
for(int i=0;i<params.length;i++){
System.out.print(params[i]);
if(i+1!=params.length){
System.out.print(',');
}
}
System.out.println("");
}
//两数换位置
public void changePlace(char[] params,int begin,int end){
int act;
act=params[begin];
params[begin]=params[end];
params[end]=(char) act;
}
//得到原数
public int getQuondam(char[] num){
return Integer.parseInt(String.valueOf(num));
}
}
//水仙花水的那个就是
⑻ JAVA 编程题(输入坐标求出边长和面积以及...)
四边形的话,坐标点应该是四对八个坐标数字啊,参数x,y,width,height给出没啥意义啊,题意再说清晰一点
⑼ Java编程常见面试题目,要求正确答案
第一,谈谈final, finally, finalize的区别。
final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize?方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。
第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。
Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.ASP?id=704&page=1
注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象
第四,&和&&的区别。
&是位运算符。&&是布尔逻辑运算符。
第五,HashMap和Hashtable的区别。
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。
Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。
第六,Collection 和 Collections的区别。
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
Collection是个java.util下的接口,它是各种集合结构的父接口。
第七,什么时候用assert。
断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。它用于调试目的:
assert(a > 0); // throws an AssertionError if a <= 0
断言可以有两种形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 应该总是产生一个布尔值。
Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。
断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:
Javac -source 1.4 Test.java
要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。
要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。
要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。
可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。
第八,GC是什么? 为什么要有GC? (基础)。
GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
第九,String s = new String("xyz");创建了几个String Object?
两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。
第十,Math.round(11.5)等于多少? Math.round(-11.5)等于多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。
第十二,sleep() 和 wait() 有什么区别? 搞线程的最爱
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级,(b)正在运行的线程因为其它原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
第十三,Java有没有goto?
Goto?java中的保留字,现在没有在java中使用。
第十四,数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。
String有有length()这个方法。
第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
第十七,给我一个你最常见到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, , DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
第十八,error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
第十九,List, Set, Map是否继承自Collection接口?
List,Set是
Map不是。
第二十,abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
都不能
第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
第二十三,启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
第二十四,构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
第二十五,是否可以继承String类?
String类是final类故不可以继承。
第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
第二十八,编程题: 用最有效率的方法算出2乘以8等于几?
有C背景的程序员特别喜欢问这种问题。
2 << 3
第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,有相同的hash code。
第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
第三十二,编程题: 写一个Singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些
第三十三 Hashtable和HashMap
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许
还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。