程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java基礎語法筆記,java語法筆記

java基礎語法筆記,java語法筆記

編輯:JAVA綜合教程

java基礎語法筆記,java語法筆記


這段時間看了一些java,急了一些筆記,記下一遍以後復習用!

2016-07-24 15:12:40

java很多語法都跟C#類似,下面列舉一些不同的地方******注意***** java中的系統方法首字母都是小寫的,而C#中首字母都是大寫的
1、java中繼承的用法
  class children extends parent
  {
  }
而c#中:
  class children :parent
  {
  }

java中繼承接口的用法
  class children implements parent
  {
  }
而c#中:
  class children :parent
  {
  }
2、還有一點很重要的事java中的main函數所在的類名必須和文件名相同。
  其次是在一個文件中只能main函數所在的類是public修飾的,其他不能帶public ,一個文件中只能有一個public類。
  java中的靜態成員既可以實例化對象調用,也可以類名來點出來,非靜態成員只能實例化對象調用。****沒有靜態類

  而在C#中靜態成員不能實例化對象調用


3、java中方法的重寫就方法的覆蓋,貌似真的是覆蓋,就是重新寫一遍

  而C#中的重寫要用關鍵字override,並且只能是抽象和虛方法或者標記為override才能重寫。

4、java中有一個特殊的static語句塊功能,static語句塊中的語句在構造函數之前執行且只執行一次

5、java和C#中初始化類的時候都是先初始化變量後執行函數代碼

6、java中final的用法:
  不想讓類中的成員被子類修改
  修飾類的時候,被修飾的類不能被繼承
  變量被final修飾的時候,必須賦初值
  final和const類似(只是類似)
  C#中不行讓類被繼承可以用關鍵字sealed修飾(密封)
  不能讓子類修改,不知道用什麼方法

7、java中的集合
  java中的ArraList集合跟C#中很相似,兩者都是同樣的聲明方式。
  一、List類型的集合
    都是用的add方法(不同的事C#中的系統方法一般首字母大寫)

  有一個不同的地方是java中集合的取值方式用的事get("這裡是對應的坐標")方法來取。而C#用的事跟數組一樣的方法用下標取值:a[0]。
  C#中的鍵值對集合有兩種取值方法,一種是下標取值,一種是下標加鍵取值
  java中獲取集合中數量的方法是size(),而C#中用的是count()方法。
  刪除都是用的remove()方法,清空用的都是clear()方法。

  LinkedList集合比ArrayList多了addFirst()和addLast()方法,分別指的是每次都添加在最前面或者最後面。(在有些需求的時候很有用)
  vector和ArrayList的用法基本上一樣
  stack和ArrayList的用法也是基本上一樣(但是值得注意的事stack因為棧的特點,所以每次插入新值的時候都是插在最前面的)
二、Map類型的集合(帶有鍵值對的集合,類似於C#中的鍵值對集合)
  主要有Hashmap,Hashtable等
  添加鍵值對用put()方法。

  讀取方法:
  //取出鍵的視圖
  Iterator<String > iterator=hashMap.keySet().iterator();
  //遍歷所有鍵
  while (iterator.hasNext()) {
    String string = (String) iterator.next();
    ((animal)hashMap.get(string)).sayhi();//讀取並調用方法
  }
三、總結
  1、如果要求線程安全,應該使用Vector、Hashtable
  2、如果不要求線程安全,應該使用ArrayList、LinkedList、HashMap
  3、如果要求鍵值對,則使用HashMap,Hashtable
  4、如果數據量很大,又要線程安全考慮Vector
  Java中兩個字符串比較值是否相等一定要用 s1.equals(s2)方法,不能直接用==來比較,這樣比較的只是字符串的引用地址。

四、java中子類構造函數中調用父類的構造函數用super();只能在子類的構造函數中寫

  而C#中直接在子類構造函數後面寫:base()

  例如:public son:father

  {
    son():base()
    {
  
    }
  }


五、swing主要布局方式
  flowLayout(流式布局)、borderLayout(邊界布局)、GridLayout(網格布局)等


六、java多線程
  要使用多線程的類需要繼承Thread,需要繼承其他類的時候,要繼承Runnable接口
  繼承Thread的時候,啟用線程的方法:
  類名(繼承了Thread的) th=new 類名();
  th.start();
  繼承了Runnable接口的時候,啟用線程的方法:
  類名 l=new 類名();
  Thread th=new Thread(l);
  th.start();

  thread.currentThread().getName();//用於顯示當前是哪個線程在執行(顯示的事線程的下標)
  防止多線程並發的方法,加上synchronized(object){需要阻止並發的代碼段}(如同C#中的Block鎖)

  

  七、java IO流

    (1)字節流

         1 public static void main(String[] args) throws IOException { 2 File file=new File("e:\\wode.txt");//打開文件 3 if(!file.exists()){ 4 try { 5 file.createNewFile();//創建文件 6 System.out.println("創建成功!"); 7 } catch (IOException e) { 8 e.printStackTrace(); 9 } 10 } 11 12 FileOutputStream fos=new FileOutputStream(file);//寫操作 13 String string="你好啊\r\n世界!"; 14 try { 15 fos.write(string.getBytes());//寫入數據 16 } catch (IOException e) { 17 e.printStackTrace(); 18 }finally{ 19 try { 20 fos.close(); 21 } catch (IOException e) { 22 e.printStackTrace(); 23 } 24 } 25 26 FileInputStream fis=new FileInputStream(file);//讀操作 27 int n=0; 28 byte []bytes=new byte[4*1024]; 29 30 //fis.read(bytes, 0, (int) file.length());//按字節讀取(一次讀完) 31 //String s=new String(bytes,0,(int) file.length()); 32 //System.out.println(s); 33 34 while ((n= fis.read(bytes))!=-1) {//分塊讀取 35 String s=new String(bytes,0,n); 36 System.out.println(s); 37 } 38 } View Code

 

   (2)字符流

         1 public static void main(String[] args) { 2 FileReader fReader=null; //讀操作 3 FileWriter fileWriter=null; //寫操作 4 try { 5 fReader=new FileReader("e:\\wode.txt"); //直接讀取路徑 6 fileWriter=new FileWriter("e:/我的.txt"); 7 int n=0; 8 char[] c=new char[1024]; 9 while ((n=fReader.read(c))!=-1) {//循環讀取,讀到結尾返回-1(每次讀取c的大小) 10 String s=new String(c,0,n); //將字符數組轉換成字符串 11 //System.out.println(c); 12 fileWriter.write(s); //寫入數據 13 System.out.println("寫入成功"); 14 15 } 16 } catch (Exception e) { 17 e.printStackTrace(); 18 }finally{ 19 try { 20 fReader.close(); 21 fileWriter.close(); 22 } catch (IOException e) { 23 e.printStackTrace(); 24 } 25 } 26 } View Code     

   ----------------------------------
     按行讀寫文件(提高效率)

         1 public static void main(String[] args) { 2 BufferedReader bfr=null; 3 BufferedWriter bfw=null; 4 5 FileReader fileReader; 6 try { 7 fileReader = new FileReader("e:/wode.txt"); //讀操作(作為 BufferedReader的構造參數) 8 bfr=new BufferedReader(fileReader); // 按行讀操作 9 FileWriter fileWriter=new FileWriter("e:/我的.txt"); //寫操作(作為BufferedWriter的構造參數) 10 bfw=new BufferedWriter(fileWriter); //按行寫操作 11 String string=null; 12 while ((string=bfr.readLine())!=null) { //循環讀每一行,讀到末尾返回null 13 System.out.println(string); 14 bfw.write(string+"\r\n"); //按行寫 15 } 16 } catch (Exception e) { 17 e.printStackTrace(); 18 }finally{ 19 try { 20 bfr.close(); 21 bfw.close(); 22 } catch (IOException e) { 23 e.printStackTrace(); 24 } 25 26 27 } 28 29 } View Code   

八、數據庫
  (1)開發時數據庫的選擇條件:
    <1>成本
    <2>功能多少
    <3>並發性(最終用戶多少)
    <4>安全性

  (2)基本查詢
    <1> sal between 100 and 200 //表示 sal>=100 and sal<=200
    <2>like(模糊查詢)
    %:表示0到多個模糊字符 _;表示單個模糊字符
    例如:1、查詢姓李的人的名字
    select name from emp where name like '李%';
  2、查詢名字的第二個字為明的人的名字
    select name from emp where name like '_明%';
  <3>查詢條件是一個字段符合多個條件的時候,一般用in(批量查詢)
    例如:查詢員工的年齡是22,25,31歲的員工的姓名
      select name fron emp where age in(22,25,31);

  <4>判斷字段內容為null時返回指定的信息用isnull()函數
      isnull(age,0); //這句話表示當age不為null時就返回實際的值,當為null時就返回0
  <5>使用 Oder by 進行排序
    order by age asc //默認升序
    order by age desc //降序排列

    例子:按照部門號升序,工資降序排列
      select * from emp order by dempno asc ,sal desc;

  <6> group by having
    having 是用來篩選group by 分組後的數據
      **在選擇列中如果有列、表達式、分組函數,那麼這些列和表達式必須有一個出現在group by子句中,否則就會出錯!

  <7>經典案例
      --顯示公司每個員工的名字和她的上級的名字
      //這裡可以把emp表看成兩張表,分別是worker、boss
        select worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno

  <8>分頁查詢
    //這裡的num1指的是每一頁顯示的行數,num2指的是第幾頁
      select top num1 * from emp where empno not in (select top num1*num2 from emp);
  <8>***瘋狂在一個表中插入數據
      insert into test(name,pass) select name,pass from test
    insert into test select name,pass from test
  <9>刪除表中的重復記錄
      select distinct * into #temp from testTable
      delete from tsetTable
      insert into tsetTable select * from #temp
      drop table #temp
      <unique>唯一約束,不能重復,可以為null
      <check>范圍約束
      <default>默認值
      <foreign key>外鍵 用法:foreign key reference table2(id)

  (3)備份、恢復數據庫
      備份:
        backup database 要備份的數據庫名字 to disk='路徑';
      恢復:
        restore database 數據庫名 from disk='路徑'

九、JDBC

  (1)演示使用JDBC-odbc橋接方式連接數據庫cakesales
    <1>配置數據源(在控制面板→管理工具→odbc配置工具裡面)
    <2>在程序中去連接數據源

*************1、使用Statement的方式*************************************
    ***代碼如下****

             1 Connection con=null; 2 Statement sm=null; 3 ResultSet rSet=null; 4 try { 5 // 1、加載驅動(作用是把需要的驅動程序加入內存) 6 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 7 //2、得到連接 8 con=DriverManager.getConnection("jdbc:odbc:MySqlSever", "sa", "920606"); 9 10 //3、創建Statement或者PreparedStatement[區別] 11 //Statement用處是:主要用於發送sql語句到數據庫 12 sm=con.createStatement(); 13 14 //4、執行crud(增刪改查) 15 16 //增加 17 //int i=sm.executeUpdate("insert into cakecategory values('小蛋糕',1)"); 18 19 //刪除 20 //int i=sm.executeUpdate("delete from cakecategory where CGname='小蛋糕'"); 21 22 //更新 23 //int i=sm.executeUpdate("update cakecategory set CGname='蛋糕' where CGname='小蛋糕'"); 24 25 //System.out.println(i); 26 27 28 //查詢表信息 29 rSet=sm.executeQuery("select * from cakecategory"); 30 while (rSet.next()) { 31 int id=rSet.getInt(1); 32 String name=rSet.getString(2); 33 int state=rSet.getInt(3); 34 System.out.println(id+"\t"+name+"\t"+state); 35 } 36 37 } catch (Exception e) { 38 // TODO Auto-generated catch block 39 e.printStackTrace(); 40 }finally{ 41 try { 42 if(rSet!=null) 43 rSet.close(); 44 if(sm!=null) 45 sm.close(); 46 if(con!=null) 47 con.close(); 48 } catch (SQLException e) { 49 // TODO Auto-generated catch block 50 e.printStackTrace(); 51 } View Code

 

*************1、使用PreparedStatement的方式*************************************

    ****此方法有以下有點
      1>效率有所提高(因為對sql語句進行了預編譯)
      2>防止sql注入

    ***代碼如下****

           1 Connection connection=null; 2 PreparedStatement ps=null; 3 ResultSet rSet=null; 4 5 try { 6 //1、引入驅動 7 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 8 //2、創建連接 9 connection=DriverManager.getConnection("jdbc:odbc:MySqlSever", "sa", "920606"); 10 //3、創建PreparedStatement對象 11 ps=connection.prepareStatement("select * from cakecategory where CGname=?"); 12 ps.setString(1, "蛋糕"); 13 14 //4、獲取結果集 15 rSet=ps.executeQuery(); 16 17 //5、循環讀取 18 while (rSet.next()) { 19 int id=rSet.getInt(1); 20 String name=rSet.getString(2); 21 int state=rSet.getInt(3); 22 System.out.println(id+"\t"+name+"\t"+state); 23 } 24 } catch (Exception e) { 25 // TODO: handle exception 26 e.printStackTrace(); 27 }finally{ 28 try { 29 if(rSet!=null) 30 rSet.close(); 31 if(ps!=null) 32 ps.close(); 33 if(connection!=null) 34 connection.close(); 35 } catch (SQLException e) { 36 // TODO Auto-generated catch block 37 e.printStackTrace(); 38 } 39 } View Code

 

 

(2)演示使用JDBC直接連接數據庫cakesales
  1>不用配置數據源,直接代碼連接
  2>此種方法需要引入外部的三個jar包,操作如下:
    選中項目 右鍵-> 選擇屬性->選擇java構建路徑->選擇 庫 ->選擇添加 然後導入三個驅動文件即可(msbase.jar 、 mssqlserver.jar 、 msutil.jar)
  3>遇到幾個典型的錯誤,如下
    1)java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
      這個原因是因為沒有打開sqlserver的監聽端口導致的,解決方法如下:
        *****選中計算機右鍵—>管理—>服務和應用程序—>sql server管理器—>sql server 網絡配置—>MSSQLSERVER協議—>TCP/IP—>IP 地址 就可以看見了
    2)java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]對象名 'cakecategory' 無效。
        這是由於SQLSERVER帳號的默認數據庫導致的。如果使用的庫不是當前帳號的默認庫的話,就會找不到表
        解決方法:一、把帳號的默認數據庫改為要查詢的庫
                  修改方法:打開數據庫,在左側菜單欄->安全性->登錄名->sa 右鍵 屬性 找到下面的默認數據庫修改成要用的就行了
             二、在執行查詢前先執行“use xxx”語句
        *****推薦使用第二種解決方法!


*********************實例代碼如下**********************************

              1 Connection con=null; 2 PreparedStatement ps=null; 3 ResultSet rSet=null; 4 5 6 try { 7 //1、引入驅動 8 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 9 //2、創建連接 10 con=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;database=CakeSales","sa","920606"); 11 12 //3、創建preparedStatement對象 13 ps=con.prepareStatement("use CakeSales select * from cakecategory"); 14 //ps.setString(1, "蛋糕"); 15 16 //4、接收結果集 17 rSet=ps.executeQuery(); 18 //5、循環讀取數據 19 while (rSet.next()) { 20 int id=rSet.getInt("CGid"); 21 String name=rSet.getString(2); 22 int state=rSet.getInt(3); 23 System.out.println(id+"\t"+name+"\t"+state); 24 } 25 } catch (Exception e) { 26 // TODO Auto-generated catch block 27 e.printStackTrace(); 28 }finally{ 29 try { 30 if(rSet!=null) 31 rSet.close(); 32 if(ps!=null) 33 ps.close(); 34 if(con!=null) 35 con.close(); 36 } catch (SQLException e) { 37 // TODO Auto-generated catch block 38 e.printStackTrace(); 39 } 40 } View Code

 

 

(3)演示使用JDBC直接連接數據庫進行ddl操作(也就是新建,刪除,備份,恢復數據庫)

******************************實例代碼如下******************************

             1 Connection con=null; 2 PreparedStatement ps=null; 3 try { 4 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 5 //不指定數據庫連接 6 //con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;", "sa", "920606"); 7 con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;database=xinjiande", "sa", "920606"); 8 9 //新建數據庫 10 //ps=con.prepareStatement("create database xinjiande"); 11 12 //新建表 13 //ps=con.prepareStatement("use xinjiande create table users(uid int primary key identity(1,1))"); 14 15 16 //刪除表 17 //ps=con.prepareStatement("use xinjiande drop table users"); 18 19 //刪除數據庫 20 ps=con.prepareStatement("drop database xinjiande"); 21 22 //備份數據庫 23 24 //ps=con.prepareStatement("backup database xinjiande to disk='e:/xinjiande.bak'"); 25 26 //恢復數據庫 27 //ps=con.prepareStatement("restore database xinjiande from disk='e:/xinjiande.bak'"); 28 29 if(!ps.execute()){ 30 System.out.println("ok"); 31 } 32 } catch (Exception e) { 33 // TODO: handle exception 34 e.printStackTrace(); 35 }finally{ 36 try { 37 if(ps!=null){ 38 ps.close(); 39 } 40 if(con!=null){ 41 con.close(); 42 } 43 } catch (SQLException e) { 44 // TODO Auto-generated catch block 45 e.printStackTrace(); 46 } 47 } View Code

 

十、java中的可變參數
關鍵字:...(沒錯,就是三個點。好像C語言中也是三個點)
例子:下面是我下的連接數據庫的可變參數

       1 public sqlHelper(String sql,String ...strings){ 2 try { 3 this.sql=sql; 4 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 5 con=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;database=javaTset", "sa", "920606"); 6 ps=con.prepareStatement(sql); 7 if(strings!=null){ 8 int i=1; 9 for(String s:strings){ 10 ps.setString(i, s); 11 i++; 12 } 13 } 14 } catch (Exception e) { 15 // TODO: handle exception 16 e.printStackTrace(); 17 } 18 } View Code

 

****c#中的可變參數用的是parameter關鍵字

十一、java網絡編程

和C#中的網絡編程Socket差不多

1>服務器端代碼及過程如下: 先建立ServerSocket監聽->然後等待客戶端連接->之後讀取客戶端發來的消息或者向客戶端發送消息

       1 try { 2 //開始監聽 3 ServerSocket ss=new ServerSocket(9999); 4 //等待客戶端連接 5 Socket socket=ss.accept(); 6 7 //讀取客戶端發來的消息 8 BufferedReader bfr=new BufferedReader(new InputStreamReader(socket.getInputStream())); 9 10 //向客戶端發消息 11 PrintWriter pWriter=new PrintWriter(socket.getOutputStream(),true); 12 13 Scanner scanner=new Scanner(System.in); 14 while (true) { 15 16 String string=bfr.readLine();//讀取消息 17 System.out.println(string); 18 19 20 String s=scanner.next();//接收控制台輸入 21 pWriter.println(s);//發送消息 22 23 24 } 25 26 } catch (IOException e) { 27 // TODO Auto-generated catch block 28 e.printStackTrace(); 29 } View Code

 

   2>客戶端代碼及過程如下:  先連接服務器->之後讀取服務器發來的消息或者向服務器發送消息

       1 try { 2 Socket socket=new Socket("127.0.0.1", 9999);//連接服務器 3 4 //發送消息 5 PrintWriter pWriter=new PrintWriter(socket.getOutputStream(),true); 6 //讀取客戶端發來的消息 7 BufferedReader bReader=new BufferedReader(new InputStreamReader(socket.getInputStream())); 8 9 Scanner scanner=new Scanner(System.in); 10 while (true) { 11 //發送消息 12 String s=scanner.next(); 13 pWriter.println(s); 14 15 16 //讀取消息 17 String string=bReader.readLine(); 18 System.out.println(string); 19 20 } 21 22 } catch (Exception e) { 23 // TODO Auto-generated catch block 24 e.printStackTrace(); 25 } View Code

 

   3>*****對象流傳輸例子如下,發送用的是ObjectOutputStream,接收用的是ObjectInputStream

 *********************注意:對象必須要繼承Serializable序列化接口***************************************

     1 public class conSK { 2 public static Socket sk; 3 ObjectOutputStream oop; 4 public conSK(){ 5 System.out.println("gr"); 6 try { 7 sk=new Socket("127.0.0.1", 9999); 8 9 } catch (Exception e) { 10 // TODO Auto-generated catch block 11 e.printStackTrace(); 12 } 13 } 14 15 /** 16 * 向服務器發送數據 17 * @param object 18 */ 19 public void sendMsg(Object object){ 20 try { 21 oop=new ObjectOutputStream(sk.getOutputStream()); 22 oop.writeObject(object); 23 //System.out.println(((User)object).getPwd()); 24 } catch (IOException e) { 25 // TODO Auto-generated catch block 26 e.printStackTrace(); 27 } 28 } 29 30 31 /** 32 * 接收服務器發過來的消息 33 * @return 返回Object類型 34 */ 35 public Object getMsg(){ 36 Object object =null; 37 try { 38 ObjectInputStream oop=new ObjectInputStream(sk.getInputStream()); 39 object=oop.readObject(); 40 } catch (Exception e) { 41 // TODO Auto-generated catch block 42 e.printStackTrace(); 43 } 44 return object; 45 } 46 } View Code

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved