1. 程式人生 > >Java小白進階之路(一)

Java小白進階之路(一)

1、字串操作:replace方法(舊字串,新子串)。

Scanner scanner = new Scanner(System.in);
System.out.println("請輸入");
// 接收使用者的輸入的字串
String s1 = scanner.next();
// 接受整型
int n1 = scanner.nextInt();
System.out.println(s1,+n1);

//列印長度
System.out.println(s1.length());

//替換字串
System.out.println(s1.replace("cao","***"));

2、String string = new String("abcnjsdvjjioasdf");  初始化一個字串,不帶new遇見相同值時公用一個物件。

//  值雖然相同但是不共用一個物件
String s1 = new String("123");
String s2 = new String("123");

共用一個物件:

String s1 ="123";
String s2 = "123";

3、包裝類:int--->Integer   char---->charactor   long---> Long  經過這樣轉化就成了一個物件

 int m = 2;
 String s = "132";
 Integer n1 = new Integer(m);

// string.valueof(i)將整形的i轉換為字串
 System.out.println(String.valueOf(s));

//a1.tostring()轉換成為字串
 System.out.println(n1.toString());

// Integer.valueof(變數)   獲得值。getClass()  獲取
 System.out.println(Integer.valueOf(n1)+"--->"+n1.getClass());

//  Integer.parserInt(字串) 轉換為INT型。
 System.out.println(Integer.parseInt(s));

   

4、隨機數

第一種方式:用math.random()。產生一個0--1的隨機數。

double pa = Math.random();

第二種:Random類

//  隨機數種子,種子相同產生的隨機數都相同
Random random = new Random(6);
//  產生什麼型別的隨機以及範圍
System.out.println(random.nextInt(6));
System.out.println(random.nextBoolean());

5、簡單的日期格式 SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒 E");  格式
String string = sdf.format(date);   //將日期格式化自定義好的格式,也可以用於檢查格式,不符合,會拋異常
sdf.parser(String)//解析一個字串的日期格式,不符合就丟擲異常

6、Stringbuffer:佔記憶體小。stringbuffer 才有revers,insert之類的方法。賦值以後無法改變,也無法判斷兩個字串是否相等

7、 getter、setter:Java的setter和getter,類似python的__setattr__,__getattr__。

public class Main {
    public static void main(String[] args){
        Student s1 = new Student();
        s1.setName("Jax");
        System.out.println(s1.getName());
        s1.setAge(19);
        System.out.println(s1.getAge());
        s1.setAge(2);
        System.out.println(s1.getAge());
    }
}
class Student{
    private int age;
    private String name;
    public String getName(){
        return this.name;
    }
// 獲取姓名
    public int getAge(){
        return this.age;
    }
    public void setName(String name){
        this.name = name;
    }

// 設定名字
    public void setAge(int age){
//   可以對傳進來的值進行判斷加工。
        if(age<10){
            System.out.println("年齡不符合");
        }
        this.age = age;
    }
}

:通過呼叫共有的setRp方法來給Rp賦值

8、構造方法:沒有返回值,如果想返回錯誤,就只能丟擲一個異常。

public class Main {
    public static void main(String[] args){
//  傳遞初始化引數
        Student s1 = new Student("Jax",19);

    }
}
class Student{
    String name;
    int age;
    public Student(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println("successful");
    }
}

9、陣列 ArrayList:ArrayList<String> list = new ArrayList<>();  String 就是泛型,這個陣列只允許存String型別。

ArrayList<String> list = new ArrayList<>();
// 新增元素
list.add("1");
list.add("2");
// 通過索引刪除
list.remove(1);
// 陣列的長度
System.out.println(list.size());

10、迭代器:省記憶體。iteration。

ArrayList<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
// 建立一個迭代器
Iterator<String> iter = list.iterator();
//是否有下一個節點
while (iter.hasNext()){
     System.out.println(iter.next());
 }

11、addfirst()、removefirst() 、getFirst()這些都是LinkedList特有的方法,但也有add()和remove()方法。isEmpty()是否為空.

// 連結串列 類似棧
LinkedList<String> linkedlist=new LinkedList<>();
// 在第一個位置新增元素
linkedlist.addFirst("1");
linkedlist.addFirst("2");
linkedlist.addFirst("3");
// 刪除第一個元素
linkedlist.removeFirst();
// 獲得第一個元素
System.out.println(linkedlist.getFirst());

12、加強for迴圈:for(型別   變數:遍歷的物件)  類似 for i in list    型別要與可遍歷物件型別一致。

for(String i:linkedlist){
            System.out.println(i);
        }

13、雜湊Set:  Set<e> set=new HashSet<e>(),用的不多。set是無序的。

14、Map:由鍵值對組成,類似python字典。雜湊Map:Map<String, String> set = new HashMap<String, String>(); 

// 指定key、value 的型別。
Map<String,Integer> a1 = new HashMap<>();
// 通過put新增值
a1.put("jax",19);
a1.put("asche",18);
a1.put("yi",23);
a1.put("vn",19);
// 值集
System.out.println(a1.values());
//  鍵集
System.out.println(a1.keySet());
// 鍵值對
System.out.println(a1.entrySet());
//通過remove key刪除元素
a1.remove("asche");
System.out.println(a1);

15、JDBC:Java與資料庫互動的方式

連線資料庫的五步:

public static void main(String[] args) throws ClassNotFoundException, SQLException {
//		載入驅動,不同資料庫驅動不同
Class.forName("com.mysql.jdbc.Driver");
//		獲得URL
String url = "jdbc:mysql://localhost:3306/new";
//		登入、連結資料庫
Connection con = DriverManager.getConnection(url, "root", "zyz521");
//		建立一個語句執行物件
Statement st = con.createStatement();
//		執行語句
//        st.execute("delete from student where id=1");
//		所有的結果放入ResultSet
        ResultSet rs = st.executeQuery("select * from person");
//		判斷是否有下一個
        while(rs.next()){
//			可以通過id或者欄位名得到資料,必須要以型別定義一樣
            int id = rs.getInt("id");
            String name = rs.getString(2);
            int age = rs.getInt(4);
            String sex = rs.getString(3);
            System.out.println(id+":"+name+":"+age+":"+sex);
        }
//		關閉連線,反著關
        rs.close();
        st.close();
        con.close();
    }

查詢單一元素:

// 返回Person物件,類繼承BaseDao
public Person get_Person(int n){
super.connect();
        Person p = new Person();
        try {
            // 通過預編譯可以防止惡意的sql注入
            String sql = "select * from person where id=?";
            pstmt = conn.prepareStatement(sql);
            設定引數(index,value)
            pstmt.setInt(1,n);
            // 放到結果集,Query返回一個表
            rs = pstmt.executeQuery();
            // 檢查是否還有下一個元素
            while (rs.next()){
                // rs.getInt(index[colunm_name])
                p.setId(rs.getInt(1));
                p.setName(rs.getString(2));
                p.setPass(rs.getString(3));
                p.setBirth(rs.getString(4));
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            super.closeAll();
        }

        return p;

查詢全部/多個元素:

public ArrayList<Person> get_Allperson(){
Person p = null;
// 通過定義陣列來儲存元素
ArrayList<Person> list = new ArrayList<>();
super.connect();
try {
      String sql = "select * from person";
//    防止sql注入
      pstmt = conn.prepareStatement(sql);
      rs = pstmt.executeQuery();
      while (rs.next()){
          p = new Person();
          p.setId(rs.getInt(1));
          p.setName(rs.getString(2));
          p.setPass(rs.getString(3));
          p.setBirth(rs.getString(4));
          list.add(p);
       }
     }catch (Exception e){
            e.printStackTrace();
     }finally {
            super.closeAll();
     }
        return list;
    }

插入:呼叫時先通過呼叫實體類的setter方法進行賦值,然後呼叫該方法。

public Integer insert(Person p){
super.connect();
int row = 0;
try {
        // ? 是佔位符
     String sql = "insert into person(name,pass,birth) values(?,?,?)";
     pstmt = conn.prepareStatement(sql);
     pstmt.setString(1,p.getName());
     pstmt.setString(2,p.getPass());
     pstmt.setString(3,p.getBirth());
     row = pstmt.executeUpdate();
}catch (Exception e){
     e.printStackTrace();
}finally {
     super.closeAll();
}
   return row;
}

 

刪除:

public Integer delete(int n){
int row = 0;
super.connect();
try {
      String sql = "delete from person where id=?";
      pstmt = conn.prepareStatement(sql);
      pstmt.setInt(1,n);
      //  Update 返回受影響的行數
      row = pstmt.executeUpdate();
}catch (Exception e){
    e.printStackTrace();
}finally {
    super.closeAll();
}
    return row;
}

更新:先獲取要修改物件的全部值,然後通過setter方法進行修改,防止部分修改導致資料庫出現空值的情況。

public Integer update(Person p){
super.connect();
Integer row = 0;
try {
     String sql = "update person set pass=? where id=?";
     pstmt = conn.prepareStatement(sql);
     pstmt.setString(1,p.getPass());
     pstmt.setInt(2,p.getId());
     row = pstmt.executeUpdate();
}catch (Exception e){
    e.printStackTrace();
}finally {
    super.closeAll();
}
     return row;
}