生活随笔
收集整理的這篇文章主要介紹了
Forth Week :快速上手一门编程语言
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
快速上手一門編程語言 概述 學習路徑 一 掌握該語言的背景 - 2h 二 掌握該語言的基本程序邏輯語法 - 1h 1、順序結構 2、分支結構 1)if語句 2)switch ... case多分支語句 3、循環結構 1)while 2)do......while 3)for 4)foreach 【java5的新特征之一】 三 掌握該語言的變量 - 2h 1 明確語言的類型 2 基本類型和封裝類型 1)基本數據類型 (1)內置數據類型 (2)引用數據類型 (3)常量 (4)特殊轉義字符 (5)類型轉換 運算符 1)算數運算符 2)關系運算符 3)位運算符 4)邏輯運算符 5)賦值運算符 6)其他運算符 3 時間和日期的類型和處理 四 容器對象學習 - 1h 五 實現抽象的方法、類、接口與函數的實現、使用 - 2h - coder 六 函數式編程的支持 七 依賴與項目管理工具與生態支持 - developer 八 內置高級功能 - professional 九 文件讀取和寫入
概述
圖靈完備性語言
圖靈完備的語言,有循環執行語句,判斷分支語句等。理論上能解決任何算法。但有可能進入死循環而程序崩潰。 Pyhton java php等都是圖靈完備的
識別類型
https://blog.csdn.net/sinat_38682860/article/details/86492429?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control 四個概念: 強類型 & 弱類型 動態類型 & 靜態類型 因此: Python是動態強類型語言 編程語言環境幫助我們判斷類型 Java是靜態強類型的 C是靜態弱類型的 char a -> %c顯示a %d顯示65 人來判斷是什么類型 (PHP也是弱類型) 強弱是指本身能夠判斷這個變量是什么類型 動靜是指聲明變量時指定變量類型是靜態類型(有強制類型轉換),不需要指定的是動態類型(可以自動轉換)。
學習路徑
一 掌握該語言的背景 - 2h
二 掌握該語言的基本程序邏輯語法 - 1h
1、順序結構
2、分支結構
1)if語句
if ( 表達式
) { 語句塊;
}
else if ( 表達式
) { 語句塊;
}
else { 語句塊;
}
2)switch … case多分支語句
switch ( 表達式
) { case 常量
1 :
{ 語句塊;
break ;
} case 常量
2 :
{ 語句塊;
break ;
} [ default : { 語句塊;
} ]
}
3、循環結構
break和continue語句:break是終止本層循環,跳到外層繼續執行代碼;continue終止本次循環,繼續下一次循環;
1)while
public static void main ( String args
[ ] ) { int result
= 0 ; int i
= 0 ; while ( i
<= 100 ) { result
+= i
; i
++ ; } System
. out
. println ( "result = " + result
) ;
}
2)do…while
public static void main ( String args
[ ] ) { int result
= 0 ; int i
= 0 ; do { result
+= i
; i
++ ; } while ( i
<= 100 ) ; System
. out
. println ( "result = " + result
) ;
}
3)for
public static void main ( String args
[ ] ) { for ( int i
= 0 ; i
< 10 ; i
++ ) { if ( i
== 3 ) break ; System
. out
. println ( "i = " + i
) ; } System
. out
. println ( "Game over!" ) ;
}
4)foreach 【java5的新特征之一】
for(元素類型t 元素變量x:遍歷對象obj){ 引用了x的java語句;
}
public void test ( ) { int arr
[ ] = { 2 , 3 , 4 } ; System
. out
. println ( "-----排序前一維數組-----" ) ; for ( int x
: arr
) { System
. out
. println ( x
) ; } Arrays
. sort ( arr
) ; System
. out
. println ( "-----排序后一維數組-----" ) ; for ( int x
: arr
) { System
. out
. println ( x
) ; } int arr2
[ ] [ ] = { { 1 , 2 , 3 } , { 4 , 5 , 6 } } ; System
. out
. println ( "二維數組輸出測試" ) ; for ( int x
[ ] : arr2
) { for ( int e
: x
) { System
. out
. println ( e
) ; } } int arr3
[ ] [ ] [ ] = { { { 1 , 2 } , { 3 , 4 } } , { { 5 , 6 } , { 7 , 8 } } } ; System
. out
. println ( "三維數組輸出測試" ) ; for ( int [ ] [ ] a2
: arr
) { for ( int [ ] a1
: a2
) { for ( int x
: a1
) { System
. out
. println ( x
) ; } } }
}
三 掌握該語言的變量 - 2h
1 明確語言的類型
靜態?動態? 強 or 弱 ?
2 基本類型和封裝類型
變量類型是值 or 引用類型? C、C++ - 值類型(保存地址) Python、Javascrip - 引用類型(保存指針 判斷時用equal判斷,否則判斷指針指的是否是同一個地址了) Java 兩者都有
1)基本數據類型
(1)內置數據類型
八種基本類型:六種數字類型(四種整數型、兩個浮點型),一種字符類型,一種布爾類型。
byte:8位,有符號 short:16位,有符號 int:32位,有符號 long:64位,有符號 float:單精度、32位 double:雙精度、64位 boolean:表示一位的信息,取值true和false char:單個的16位Unicode字符
(2)引用數據類型
類似于C/C++的指針,引用類型指向一個對象,指向對象的變量是引用變量。這些變量在聲明時被指定為一個特定的類型(Employee,Puppy),變量一旦聲明后,類型就不能改變了。
對象、數組都是引用數據類型。 array.clone() 否則傳過去的是地址 所有引用類型的默認值都是null。 一個引用類型可以用來引用任何與之兼容的類型。
Site site
= new Site ( "Jacob" )
(3)常量
常量在程序運行時不能被修改,使用final關鍵字來修飾,聲明方式和變量類似,變量名常使用大寫字母:
final double PI
= 3.14159 ;
(4)特殊轉義字符
(5)類型轉換
運算符
1)算數運算符
符號含義 + 加 – – - 減 – – * 乘 – – / 除 – – % 求余 – – ++ 自增 – – – 自減
2)關系運算符
符號含義 == 判斷是否相等 – – != 判斷是否不等 – – > 大于? – – < 小于? – – >= 大于等于? – – <= 小于等于?
3)位運算符
符號含義 & 與 – – – – ^ – – ~ 按位取反 – – << 按位左移 – – >> 按位右移
4)邏輯運算符
5)賦值運算符
6)其他運算符
泛型
* * 自定義泛型
* 泛型字母:T Type
* K V key value
* E Element
* 泛型類:只能用在成員變量上,只能使用引用類型
* 泛型接口:只能用在抽象方法上
* 泛型方法:返回值前加上
* * / *
public class GenericMethodTest { public static < E> void printArray ( E
[ ] inputArray
) { for ( E x
: inputArray
) { System
. out
. printf ( "%s " , x
) ; } System
. out
. println ( ) ; } public static void main ( String
[ ] args
) { Integer
[ ] intArray
= { 1 , 2 , 3 , 4 , 5 } ; Double
[ ] doubleArray
= { 1.1 , 1.2 , 1.3 , 1.4 } ; Character
[ ] charArray
= { 'a' , 'b' , 'c' , 'd' } ; System
. out
. println ( "整型數組元素為:" ) ; printArray ( intArray
) ; System
. out
. println ( "浮點型數組元素為:" ) ; printArray ( doubleArray
) ; System
. out
. println ( "字符串型數組元素為:" ) ; printArray ( charArray
) ; }
}
public static < T
extends Comparable < T> > T
maximum ( T x
, T y
, T z
) { T max
= x
; if ( y
. compareTo ( max
) > 0 ) { max
= y
; } if ( z
. compareTo ( max
) > 0 ) { max
= z
; } return max
; } public static void main ( String
[ ] args
) { Scanner scan
= new Scanner ( System
. in
) ; System
. out
. println ( "請輸入三個整型數字:" ) ; int a
= scan
. nextInt ( ) ; int b
= scan
. nextInt ( ) ; int c
= scan
. nextInt ( ) ; System
. out
. println ( "最大的數為:" + maximum ( a
, b
, c
) ) ; System
. out
. println ( "請輸入三個浮點型數字:" ) ; float d
= scan
. nextFloat ( ) ; float e
= scan
. nextFloat ( ) ; float f
= scan
. nextFloat ( ) ; System
. out
. println ( "最大的數為:" + maximum ( d
, e
, f
) ) ; }
3 時間和日期的類型和處理
保存時間1970年格林威治到現在的時間戳 Date類
public static void main ( String
[ ] args
) { Date date
= new Date ( ) ; System
. out
. println ( date
. toString ( ) ) ; SimpleDateFormat ft
= new SimpleDateFormat ( "yyyy-MM-dd" ) ; String input
= args
. length
== 0 ? "1818-11-11 " : args
[ 0 ] ; System
. out
. print ( input
+ "Parse as " ) ; Date t
; try { t
= ft
. parse ( input
) ; System
. out
. println ( t
) ; } catch ( ParseException e
) { System
. out
. println ( "Unparseable using" + ft
) ; } try { System
. out
. println ( new Date ( ) + "\n" ) ; Thread
. sleep ( 3 * 1000 ) ; System
. out
. println ( new Date ( ) + "\n" ) ; } catch ( Exception e
) { System
. out
. println ( "GOT an exception!" ) ; } }
Calendar類
4 字符串的實現和種類
可變 or 不可變? 字符串常量池 :String創建的字符串存儲在公共池中,而new創建的字符串對象在堆上
String s1
= "runoob" ;
String s2
= "runoob" ;
String s3
= s2
; String s4
= new String ( "runoob" ) ;
String s5
= new String ( "runoob" ) ;
char [ ] helloArray
= new char [ ] { 'h' , 'e' , 'l' , 'l' , 'o' } ;
String helloSrting
= new String ( helloArray
) ;
char [ ] arr
= helloString
. toCharArray ( ) ;
1. 連接
concat ( ) 或者
+
2. equals ( ) compareTo ( Object o
)
equalsIgnoreCase ( )
compareTo ( String otherstring
)
contentEquals ( StringBuffer sb
)
length ( )
replace ( oldChar
, newChar
) replaceAll ( ) replaceFirst ( )
split ( ) trim ( )
startsWith ( ) endsWith ( )
toUpperCase ( ) toLowerCase ( )
indexOf ( ) contains ( ) subString ( )
isEmpty ( )
StringBuffer類、StringBuilder比StringBuffer速度快 使用stringBuffer類時,每次都會對Stringuffer對象本身進行操作,而不是生成新的對象,要求線程安全的情況下,必須使用StringBuffer類
StringBuffer sBuffer
= new StringBuffer ( "cainiaoguanwang:" ) ;
sBuffer
. append ( "www" ) ;
sBuffer
. append ( ".runoob" ) ;
sBuffer
. append ( ".com" ) ;
System
. out
. println ( sBuffer
) ; StringBuilder sb
= new StringBuilder ( 10 ) ;
sb
. append ( "Runoob...." ) ;
System
. out
. println ( sb
) ;
sb
. append ( "!" ) ;
sb
. insert ( 8 , "java" ) ;
sb
. delete ( 5 , 8 ) ;
System
. out
. println ( sb
) ;
正則表達式函數 Matcher類 特殊點: 在 Java 中,\ 表示:我要插入一個正則表達式的反斜線,所以其后的字符具有特殊的意義。正常反斜杠表示:\\
String line
= "This line is a test!" ;
String pattern
= "(\\D*)(\\d+)(.*)" ; Pattern r
= Pattern
. compile ( pattern
) ;
Match m
= r
. matcher ( line
) ;
if ( m
. find ( ) ) { System
. out
. println ( m
. group ( 0 ) ) ; System
. out
. println ( m
. group ( 1 ) ) ; System
. out
. println ( m
. group ( 2 ) ) ; } else { System
. out
. println ( "No match!" ) ; }
四 容器對象學習 - 1h
Hash map、字典、數組等等 Java - C++ 導入模板庫 1、容器對象的種類和實現原理 2、遍歷 3、深淺復制 4、序列化和反序列化 5、查閱手冊,了解全部容器支持的函數并掌握常用容器操作函數
public static void main ( String args
[ ] ) { Enumeration
< String> days
; Vector
< String> dayNames
= new Vector < String> ( ) ; dayNames
. add ( "Sunday" ) ; dayNames
. add ( "Monday" ) ; dayNames
. add ( "Tuesday" ) ; dayNames
. add ( "Wednesday" ) ; days
= dayNames
. elements ( ) ; while ( days
. hasMoreElements ( ) ) { System
. out
. println ( days
. nextElement ( ) ) ; } BitSet bits1
= new BitSet ( 16 ) ; BitSet bits2
= new BitSet ( 16 ) ; for ( int i
= 0 ; i
< 16 ; i
++ ) { if ( ( i
% 2 ) == 0 ) bits1
. set ( i
) ; if ( ( i
% 5 ) != 0 ) bits2
. set ( i
) ; } System
. out
. println ( "bits1: " + bits1
) ; System
. out
. println ( "bits2: " + bits2
) ; Vector v
= new Vector ( 3 , 2 ) ; System
. out
. println ( "Initial Size:" + v
. size ( ) ) ; v
. addElement ( new Integer ( 1 ) ) ; v
. addElement ( new Integer ( 2 ) ) ; v
. addElement ( new Integer ( 3 ) ) ; System
. out
. println ( v
) ; System
. out
. println ( "Initial capacity:" + v
. capacity ( ) ) ; Stack st
= new Stack ( ) ; st
. push ( new Integer ( 1 ) ) ; st
. push ( new Integer ( 2 ) ) ; st
. push ( new Integer ( 3 ) ) ; st
. push ( new Integer ( 4 ) ) ; Integer x
= ( Integer
) st
. pop ( ) ; System
. out
. println ( x
) ; x
= ( Integer
) st
. pop ( ) ; System
. out
. println ( x
) ; x
= ( Integer
) st
. pop ( ) ; System
. out
. println ( x
) ; x
= ( Integer
) st
. pop ( ) ; System
. out
. println ( x
) ; Map m1
= new HashMap ( ) ; m1
. put ( "zhang" , 18 ) ; m1
. put ( "gao" , 22 ) ; m1
. put ( "li" , 23 ) ; m1
. put ( "han" , 31 ) ; System
. out
. println ( m1
. size ( ) ) ; System
. out
. println ( m1
. get ( "gao" ) ) ; System
. out
. println ( m1
. hashCode ( ) ) ; System
. out
. println ( m1
. remove ( "gao" ) ) ; System
. out
. println ( m1
. values ( ) ) ;
List
< String> list
= new ArrayList < String> ( ) ; list
. add ( "hello" ) ; list
. add ( "world" ) ; list
. add ( "hahahah" ) ; for ( String str
: list
) { System
. out
. println ( str
) ; } String
[ ] strArray
= new String [ list
. size ( ) ] ; list
. toArray ( strArray
) ; for ( int i
= 0 ; i
< strArray
. length
; i
++ ) { System
. out
. println ( strArray
[ i
] ) ; } Iterator
< String> ite
= list
. iterator ( ) ; while ( ite
. hasNext ( ) ) { System
. out
. println ( ite
. next ( ) ) ; } }
深淺復制
序列化和反序列化
transient 關鍵字修飾的變量不能夠被序列化
public class Employee implements java. io. Serializable { public String name
; public String address
; public transient int SSN
; public int number
; public void mailCheck ( ) { System
. out
. println ( "Mailing a check to " + name
+ " " + address
) ; }
}
public class SerializeDemo { public static void main ( String
[ ] args
) { Employee e
= new Employee ( ) ; e
. name
= "a" ; e
. address
= "absn" ; e
. SSN
= 123454 ; e
. number
= 101 ; File file
= new File ( "./employ.ser" ) ; try { if ( ! file
. exists ( ) ) { file
. createNewFile ( ) ; } FileOutputStream fout
= new FileOutputStream ( file
) ; ObjectOutputStream o
= new ObjectOutputStream ( fout
) ; o
. writeObject ( e
) ; o
. close ( ) ; fout
. close ( ) ; } catch ( IOException i
) { i
. printStackTrace ( ) ; } }
}
public class SerializeDemo2 { public static void main ( String
[ ] args
) { Employee e
= new Employee ( ) ; String fileName
= "./employ.ser" ; File file
= new File ( fileName
) ; try { FileInputStream fin
= new FileInputStream ( file
) ; ObjectInputStream o
= new ObjectInputStream ( fin
) ; e
= ( Employee
) o
. readObject ( ) ; System
. out
. println ( e
. name
) ; System
. out
. println ( e
. address
) ; System
. out
. println ( e
. SSN
) ; System
. out
. println ( e
. number
) ; o
. close ( ) ; fin
. close ( ) ; } catch ( IOException
| ClassNotFoundException i
) { i
. printStackTrace ( ) ; } }
}
五 實現抽象的方法、類、接口與函數的實現、使用 - 2h - coder
1、函數的定義與調用 2、參數使用與傳遞方式 3、類和對象的實現方式 - 封裝繼承多態 4、多繼承還是接口 5、常見的設計模式的實現,單例模式、代理模式(委托),觀察者模式
六 函數式編程的支持
1、高階函數對象 2、語法特性與編程習慣(如鏈式語法、閉包等)
七 依賴與項目管理工具與生態支持 - developer
java的maven、gradle
八 內置高級功能 - professional
并發模型、多線程,多進程,系統調用,磁盤管理,數據庫管理,網絡支持等特性 至少要會查看手冊
任務: 1、完成一個支持消息循環的交互程序 開始運行之后不結束 while循環之類的 通過輸入某個命令,再退出 rpg小程序 完成六步以上的劇情?? 精細的控制 二進制位進行操作 交互應用程序 凱撒密碼對數據進行加密 加密前選擇位移的序號 在輸入一串字符串 回車后輸出加密字符串 放到文本 在解密程序 導入標準輸入流 輸入一個序號 破解 不知道加密序號 導入文本中數據 找到加密序號 找出加密前的 正確的字符串需要人為判斷 機器只是工具 人才知道要的是什么
public class HomeWork1 { public static void jiami ( ) { Scanner scan
= new Scanner ( System
. in
) ; System
. out
. println ( "請輸入待編碼的數據(英文):" ) ; String data1
= scan
. nextLine ( ) ; System
. out
. println ( "請輸入位移位數:" ) ; int number
= scan
. nextInt ( ) ; int i
= 0 ; char [ ] data_arr
= data1
. toCharArray ( ) ; for ( i
= 0 ; i
< data_arr
. length
; i
++ ) { if ( data_arr
[ i
] >= 'a' && data_arr
[ i
] <= 'z' ) { data_arr
[ i
] += number
; if ( data_arr
[ i
] >= 'z' ) { data_arr
[ i
] -= 26 ; } } else if ( data_arr
[ i
] >= 'A' && data_arr
[ i
] <= 'Z' ) { data_arr
[ i
] += number
; if ( data_arr
[ i
] >= 'Z' ) { data_arr
[ i
] -= 26 ; } } } System
. out
. println ( ) ; System
. out
. println ( "加密結果:" ) ; System
. out
. println ( data_arr
) ; } public static void jiemi ( ) { Scanner scan
= new Scanner ( System
. in
) ; System
. out
. println ( "請輸入待解密的數據(英文):" ) ; String data1
= scan
. nextLine ( ) ; System
. out
. println ( "請輸入秘鑰:" ) ; int number
= scan
. nextInt ( ) ; int i
= 0 ; char [ ] data_arr
= data1
. toCharArray ( ) ; for ( i
= 0 ; i
< data_arr
. length
; i
++ ) { if ( data_arr
[ i
] >= 'a' && data_arr
[ i
] <= 'z' ) { data_arr
[ i
] -= number
; if ( data_arr
[ i
] < 'a' ) { data_arr
[ i
] += 26 ; } } else if ( data_arr
[ i
] >= 'A' && data_arr
[ i
] <= 'Z' ) { data_arr
[ i
] -= number
; if ( data_arr
[ i
] < 'A' ) { data_arr
[ i
] += 26 ; } } } System
. out
. println ( ) ; System
. out
. println ( "解密結果:" ) ; System
. out
. println ( data_arr
) ; } public static char [ ] jie ( char [ ] data_arr
, int key
) { int i
= 0 ; for ( i
= 0 ; i
< data_arr
. length
; i
++ ) { if ( data_arr
[ i
] >= 'a' && data_arr
[ i
] <= 'z' ) { data_arr
[ i
] -= key
; if ( data_arr
[ i
] < 'a' ) { data_arr
[ i
] += 26 ; } } else if ( data_arr
[ i
] >= 'A' && data_arr
[ i
] <= 'Z' ) { data_arr
[ i
] -= key
; if ( data_arr
[ i
] < 'A' ) { data_arr
[ i
] += 26 ; } } } return data_arr
; } public static void pojie ( ) { Scanner scan
= new Scanner ( System
. in
) ; System
. out
. println ( "請輸入待破解的數據(英文):" ) ; String data1
= scan
. nextLine ( ) ; char [ ] data2
= data1
. toCharArray ( ) ; for ( int i
= 0 ; i
< 26 ; i
++ ) { char [ ] temp
= data2
; temp
= jie ( temp
, i
) ; System
. out
. println ( "key #:" + i
) ; System
. out
. println ( temp
) ; } } public static void main ( String
[ ] args
) { while ( true ) { System
. out
. println ( "*****凱撒密碼******" ) ; Scanner scan
= new Scanner ( System
. in
) ; System
. out
. println ( "請輸入想要進行的功能:" ) ; System
. out
. println ( "***1.加密功能***" ) ; System
. out
. println ( "***2.解密功能***" ) ; System
. out
. println ( "***3.破解功能***" ) ; System
. out
. println ( "***0.退出***" ) ; int choose1
= scan
. nextInt ( ) ; switch ( choose1
) { case 0 : return ; case 1 : jiami ( ) ; break ; case 2 : jiemi ( ) ; break ; case 3 : pojie ( ) ; break ; default : break ; } } }
}
九 文件讀取和寫入
1、文件類繼承關系 2、文件讀取 (2)按行讀取 使用BufferedReader中的readLine()方法。無參數,返回包含改行的內容字符串,不包含任何行終止符,如果已經到達流末尾,則返回null。
int position
= 0 ;
String
[ ] bufstring
= new String [ 1024 ] ;
BufferedReader br
= new BufferedReader ( new FileReader ( "text.txt" ) ) ;
String line
= null
;
while ( ( line
= br
. readLine ( ) ) != null
) { bufstrig
[ position
] = line
; positon
++ ;
}
br
. close ( ) ;
for ( int i
; i
< position
; i
++ ) { System
. out
. println ( bufstring
[ i
] ) ;
}
(3)自動換行寫入 利用OutputStream中的Println()方法
int number
= 1 ;
OutputStream os
= new FileOutputStream ( "output.txt" ) ;
PrintWriter pw
= new PrintWriter ( os
) ;
for ( int i
= 0 ; i
< 10 ; i
++ ) { String s
= "" + number
; pw
. println ( s
) ; number
++ ;
}
pw
. close ( ) ;
os
. close ( ) ;
總結
以上是生活随笔 為你收集整理的Forth Week :快速上手一门编程语言 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。