1.Collections
1.1
set:无序,元素唯一
HashSet<Integer> numbers = new HashSet();
numbers.add(num);
for(Integer i: numbers){
System.out.println(i);
}
1.2
list:有序,有index,元素可以重复
ArrayList myList = new ArrayList();
myList.add(1);
myList.add("1");
int t;
t = (int) myList.get(0);
t = Integer.valueOf((String)myList.get(1));
//Integer.valueOf(): String->int
myList.add(0);
myList.add(1);
myList.add(0);//1,"1",0,1,0
myList.remove(0); //删除0号
myList.remove((Integer)0);//删除list中按序第一个数字0
System.out.println(myList.toString());
run:
[1, 1, 0]
remove(): 元素的Index 或者 按顺序删除第一个出现的元素
1.3
map:key唯一,元素可以重复
HashMap myMap = new HashMap();
myMap.put("nico", "666");
myMap.put(33, "你看不见这条");
myMap.put(33, 44);
Set keySet=myMap.keySet();//set,唯一
Collection valueCollection=myMap.values();
System.out.println(keySet.toString());
System.out.println(valueCollection.toString());
//use Iterator
Set eSet = myMap.entrySet();
Iterator it = eSet.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
run:
[33, nico]
[44, 666]
33=44
nico=666
有重复的key时会覆盖
Example:直接使用for each循环处理key和value
HashMap hm=new HashMap();
ArrayList keyList=new ArrayList();
ArrayList valueList=new ArrayList();
hm.put("trademe","www.trademe.co.nz");
hm.put("aut","www.aut.ac.nz");
for(Object s: hm.keySet()){
System.out.println((String)s);
keyList.add((String)s);
}
for(Object v: hm.values()){
System.out.println((String)v);
valueList.add((String)v);
}
System.out.println(keyList.toString());
run:
aut
trademe
www.aut.ac.nz
www.trademe.co.nz
[aut, trademe]
2.File I/O
2.1 写:PrintWriter(FileOutputStream(txt))
// 重写
try
{
PrintWriter outputStream = new PrintWriter(new FileOutputStream("out.txt"));
outputStream.println(1);
System.out.println("... written to out.txt.");
outputStream.close();
}
catch(FileNotFoundException e)
{
System.out.println("Error opening the file out.txt."+ e.getMessage());
}
// 不replace 修改text
PrintWriter outStream = new PrintWriter(new FileOutputStream("out.txt",true));
outStream.println("tet");
outStream.close();
2.2 读:BufferedReader(FileReader(txt))
try
{
FileReader fr=new FileReader("out.txt");
BufferedReader inputStream = new BufferedReader(fr);
String line = null;
while((line=inputStream.readLine())!=null)
System.out.println(line);
inputStream.close();
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
2.3 StringTokenizer
// 将文件中每行的数据根据选择的分隔符分割
String str = "abc,. def,hij,klm";
StringTokenizer st= new StringTokenizer(str, "., ",false); //""中代表要分割的符号,true连分隔符一起显示,false不显示
while(st.hasMoreTokens())
{
System.out.println(st.nextToken());
}
2.4 downward casting
// 不区分大小写x键退出控制台输入
boolean quit=false;
Scanner scan=new Scanner(System.in);
while(!quit){
String str=scan.next();
if(str.toLowerCase().equals("x")){ //向下造型=X,x都允许,即忽略大小写
quit=true;
}
System.out.println("Please input again");
}
2.5 Path,File
3.GUI
3.1 Frame
JFrame f = new Frame("Frame Test");
f.setTitle("A Simple Frame");
f.setSize(300, 200);
f.setLocation(100,100);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
public class ButtonTest extends JFrame
{
private static ButtonTest bt;
public static void main(String[] args)
{
bt= new ButtonTest();
bt.setTitle("testtt");
bt.setSize(300, 300);
bt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
bt.setVisible(true);
}
3.2 设置size
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screenSize=kit.getScreenSize();
int frameWidth=screenSize.width/2;
int frameHeight=screenSize.height/2;
f.setSize(frameWidth, frameHeight);
3.3 Button and Event handling
3.3.1 重写ActionListener
public class ColorAction implements ActionListener {
private Color thiscolor;
public ColorAction(Color c) {
thiscolor = c;
}
@Override
public void actionPerformed(ActionEvent e) {
buttonPanel.setBackground(thiscolor);
}
}
public Test(){
...
JButton blue = new JButton("blue");
JButton red = new JButton("red");
ActionListener blueact = new ColorAction(Color.blue);
ActionListener redact = new ColorAction(Color.red);
blue.addActionListener(blueact);
red.addActionListener(redact);
...
}
3.3.2 加入ActionListener接口
public class Test implements ActionListener{
private static JPanel buttonPanel;
private static JButton blue ;
private static JButton red ;
public Test() {
...
blue.addActionListener(this);
red.addActionListener(this);
...
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source==blue){
buttonPanel.setBackground(Color.blue);
}
else{
buttonPanel.setBackground(Color.red);
}
}
}
3.4 Panel and Layout Management
frame.add(buttonPanel, BorderLayout.SOUTH);
GridLayout
Panel.setLayout(new GridLayout(3,4));
//三行四列
3.5 Other GUI Components
TextField / TextArea
JTextField field = new JTextField("field",10);
buttonPanel.add(field);
//用户可以输入
JTextArea text = new JTextArea("tttttext");
buttonPanel.add(text);
String t= text.getText();
//用户可输入换行文字
JScrollPane scroll = new JScrollPane(text);
buttonPanel.add(scroll);
//为TextArea加入滚动条
Label
JLabel label = new JLabel("Name:",JLabel.LEFT);
buttonPanel.add(label);
//display only
//JLabel.LEFT:文字显示在左边
label.setText("ggg");
CheckBox
check = new JCheckBox("yoyo?");
check.addActionListener(this);
buttonPanel.add(check);
//选框
public void actionPerformed(ActionEvent e) {
if(check.isSelected()){
label.setText("yoyo!");
}
else if(!check.isSelected()){
label.setText("no yoyo");
}
}
//重写actionPerformed函数
RadioButton 单选框
public class Test implements ActionListener{
private static JPanel sPanel;
private static ButtonGroup group
private static JLabel label;
...
public void addRadioButton(String name,final int size)
{
JRadioButton button = new JRadioButton(name, true);
group.add(button);
sPanel.add(button);
ActionListener listener = new ActionListener(){
public void actionPerformed(ActionEvent event){
label.setHorizontalAlignment(size);}
};
button.addActionListener(listener);
}
public Test() {
...
sPanel = new JPanel();
group = new ButtonGroup();
addRadioButton("left", label.LEFT);
addRadioButton("right", label.RIGHT);
addRadioButton("center", label.CENTER);
...
}
}
ComboBox 下拉选框
public class Test {
private static JLabel label;
private JComboBox<String> box;
...
public Test() {
...
box = new JComboBox<>();
box.addItem("right");
box.addItem("left");
box.addItem("center");
box.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String s = box.getItemAt(box.getSelectedIndex());
System.out.println(s);
if(s.equals("right")){
label.setHorizontalAlignment(label.RIGHT);
}
else if(s.equals("left")){
label.setHorizontalAlignment(label.LEFT);
}
else if(s.equals("center")){
label.setHorizontalAlignment(label.CENTER);
}
}
});
buttonPanel.add(box);
....
}
}
4 JThread
4.1 implements Runnable
public class Test implements Runnable{
String st;
public Test(String s) {
st = s;
}
public static void main(String[] args) throws FileNotFoundException, IOException {
Test test1 = new Test("task1");
Test test2 = new Test("task2");
Thread t1 = new Thread(test1);
Thread t2 = new Thread(test2);
t1.start();
t2.start();
}
@Override
public void run() {
for(int i=0 ; i<5 ; i++){
System.out.println(st);
}
}
}
4.2 extends Thread
public class Test extends Thread{
String st;
public Test(String s) {
st = s;
}
@Override
public void run() {
for(int i=0 ; i<5 ; i++){
System.out.println(st);
}
}
public static void main(String[] args) throws FileNotFoundException, IOException {
Test t1 = new Test("task1");
Test t2 = new Test("task2");
t1.start();
t2.start();
}
}
4.3 yield & sleep
@Override
public void run() {
for(int i=0 ; i<5 ; i++){
System.out.println(st);
this.yield();
// try {
// this.sleep(100);
// } catch (InterruptedException ex) {
// Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
// }
}
}
4.4 join and synchronized
t1.join();//No thread can start until t1 finishes
5.JDBC
5.1 连接数据库
public class BookStore {
public static String url = "jdbc:derby://localhost:1527/PDC";
public static Connection conn;
public static String username = "root";
public static String password = "toor";
public void connectBookStoreDB() {
try{
conn = (Connection) DriverManager.getConnection(url, username, password);
System.out.println("Connect successed");
}
catch(SQLException ex){
System.out.println("SQLException: "+ex.getMessage());
}
}
}
5.2 Statement
public void createPromotionTable(){
try{
Statement s = conn.createStatement();
String creatTable = "CREATE TABLE Promotion (CATEGORY VARCHAR(20), Discount INT)";
s.execute(creatTable);
String insertData = "INSERT INTO Promotion VALUES ('Fiction', 0),('Non-fiction', 10),('Textbook', 30)";
s.execute(insertData);
System.out.println("successed");
}
catch(SQLException ex){
System.out.println("SQLException: "+ex.getMessage());
}
}
5.3 从数据库中读取数据 :ResultSet
public ResultSet getWeekSpecial(){
ResultSet rs = null;// 1
try {
Statement s = conn.createStatement();
String select = "SELECT TITLE,Discount,PRICE FROM BOOK,Promotion where BOOK.CATEGORY=Promotion.CATEGORY";
rs = s.executeQuery(select);// 2
System.out.println("TITLE price Discount");
System.out.println("================");
while(rs.next()){// 3
String title = rs.getString("TITLE");
float PRICE = rs.getFloat("PRICE");
int Discount = rs.getInt("Discount");
System.out.println(title+" "+PRICE+" "+Discount);
}
} catch ( SQLException ex) {
System.out.println("SQLException: "+ex.getMessage());
}
return rs;// 4
}
5.4 metadata
public void metaData() {
try {
DatabaseMetaData dbmd = conn.getMetaData();
System.out.println("数据库已知的用户: "+ dbmd.getUserName());
System.out.println("数据库的系统函数的逗号分隔列表: "+ dbmd.getSystemFunctions());
System.out.println("数据库的时间和日期函数的逗号分隔列表: "+ dbmd.getTimeDateFunctions());
System.out.println("数据库的字符串函数的逗号分隔列表: "+ dbmd.getStringFunctions());
System.out.println("数据库供应商用于 'schema' 的首选术语: "+ dbmd.getSchemaTerm());
System.out.println("数据库URL: " + dbmd.getURL());
System.out.println("是否允许只读:" + dbmd.isReadOnly());
System.out.println("数据库的产品名称:" + dbmd.getDatabaseProductName());
System.out.println("数据库的版本:" + dbmd.getDatabaseProductVersion());
System.out.println("驱动程序的名称:" + dbmd.getDriverName());
System.out.println("驱动程序的版本:" + dbmd.getDriverVersion());
System.out.println("数据库中使用的表类型");
ResultSet rs = dbmd.getTableTypes();
while (rs.next()) {
System.out.println(rs.getString("TABLE_TYPE"));
}
} catch (SQLException ex) {
Logger.getLogger(BookStore.class.getName()).log(Level.SEVERE, null, ex);
}
}
5.5 删除表(需要通过DatabaseMetaData 获取表名)
public void deleteIfExists(String name){
String tableName = name;
try {
Statement s = conn.createStatement();//用于删除表
DatabaseMetaData dbmd = conn.getMetaData();
String[] types = { "TABLE" };
ResultSet rs = dbmd.getTables(null, null, "%", types);
while (rs.next()) {
String table = rs.getString("TABLE_NAME"); //表名
// String tableType = rs.getString("TABLE_TYPE"); //表类型
if(table.equals(tableName)){
s.execute("DROP TABLE "+tableName);
System.out.println("成功删除");
}
System.out.println(table);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
//tableName.compareToIgnoreCase(newTableName) == 0
//比较表名是否相同
//需要关闭:
if (rs != null) {
rs.close();
}
if (s != null) {
s.close();
}
6. pattern:MVC (Model View Controller)
7. JUnit
7.1 Flow graph
7.2 添加jar包
http://www.java2s.com/Code/Jar/h/Downloadhamcrestcore13rc2jar.htm
7.3 创建测试类
7.4 修改默认函数 测试
测试通过
8. Reflection
测试类
public class Test extends Thread implements Runnable{
public String st;
final int i=1;
...
}
public class Modi extends Test{
private String brand = "";
public int k;
final double f=0;
public void print(String s){
System.out.println(s);
}
...
}
8.1 class name
Class cls = Test.class;
System.out.println(cls.getName());
System.out.println(cls.getSuperclass());
pdc.Test
class java.lang.Thread
8.2 modifiers(e.g., public, final, abstract etc.)
System.out.println(cls.getModifiers());
System.out.println(Modifier.PUBLIC);
//import java.lang.reflect.Modifier;
1
1
8.3 interfaces
Class[] inter = cls.getInterfaces();
for(Class c :inter){
System.out.println(c.getName());
}
java.lang.Runnable
8.4 Fields(public and private) (not static)
Class cls2 = Modi.class;
Field f1[] = cls2.getFields();//public,super class
Field f2[] = cls2.getDeclaredFields();//public,private,final
//cls2.getDeclaredField("name");
for(Field f:f1){
System.out.println(f);
// System.out.println(f.getName());
// System.out.println(f.getType());
// System.out.println(Modifier.toString(f.getModifiers()));
}
System.out.println("----------");
for(Field f:f2){
System.out.println(f);
}
8.5 Constructor
Class cls2 = Modi.class;
Constructor c[] = cls2.getConstructors();
System.out.println(cls2.getConstructor(String.class));//根据参数表的数据类型
for(Constructor co:c){
System.out.println(co);
}
public pdc.Modi(java.lang.String)
public pdc.Modi(java.lang.String)
Class cls2 = Modi.class;
Constructor c[] = cls2.getConstructors();
for(Constructor co:c){
System.out.println(co);
System.out.println(co.getName());
System.out.println(co.getModifiers());//public
for(Class type:co.getParameterTypes()){
System.out.println(type);
}
}
Class aCls = Rectangle.class;
Constructor[] cons = aCls.getConstructors();
Object ob=null;
System.out.println(cons.length);
for(Constructor co:cons){
System.out.println(co.getName());
Class []ts = co.getParameterTypes();
for(Class type:ts){
System.out.println(type);
}
if(ts.length==2){
ob=co.newInstance(2.5,3.2);
}
}
8.6 Methods
Class cls2 = Modi.class;
Method[] ms = cls2.getDeclaredMethods();
// Method[] ms = cls2.getMethods();
for(Method m:ms){
System.out.println("Method: "+m);
System.out.println("DeclaringClass: "+m.getDeclaringClass());
System.out.println("Name: "+m.getName());
System.out.print("ParameterTypes: ");
for(Class c:m.getParameterTypes()){
System.out.println(c);
}
System.out.println("ReturnType: "+m.getReturnType());
}
8.7 setAccessible:操作private的变量
Class aCls = Circle.class;
Field f=aCls.getDeclaredField("priDouble");
f.setAccessible(true);
System.out.println(f.getName());
Object cir=aCls.newInstance();
double fv=f.getDouble(cir);//得到instance中的double值
System.out.println("priDouble = "+fv);
f.setDouble(cir, 8.8);
System.out.println("new value: "+f.getDouble(cir));