用戶看見的和你沒有關系。客戶端主要用來展現的,服務端(后台)。程序員是內在美,和外在美沒有關系。UI賦予你內在美,程序賦予你外在美和靈魂。java學完之后做的是服務端開發,以及Android的工作。服務端開發分為兩個分支,最主流做的是商業級的服務器(公司及企業的管理系統、OA系統,例如銀行操作系統后台都是java的工作),其次就是游戲,端游等等。大部分工作做傳統的javaEE工作,商業級的東西。
C語言是出現比較早的高級語言,它現在基本上做的都是底層的操作。比如,驅動的開發,內核的開發。和操作系統底下掛鈎的東西,做移植和嵌入式。上層看不到,它是滲透最廣、面最大的,java離不開C語言,沒有C語言沒有java,java的虛擬機運行的是class文件,虛擬機就是拿c語言寫的。家里面的電視,機頂盒的開發,用的就是c語言。面向過程而非面向對象,寫復雜程序不合適。C++就是面向對象語言,本地運用程序就是用C++寫的。windows是.net框架。
Lnuix開元,內核越來越完善,到公司用的比較多。
************************************************************************************************
API---庫library
在eclipse下面新建一個項目,project name:JSD1701_SE
src下新建一個包:Name:day01
一個方法,一個類。
java class
Name:APIDocDemo
==================================================================
package day01;
/**
 * 當前類是用來測試文檔注釋使用的
 * 
 * 文檔注釋只在三個地方定義:
 * 類,常量,方法(靜態方法,成員方法,構造方法)
 * @author adminitartor
 * @version 1.0
 * @see java.lang.String
 * @since JDK1.0
 *
 */
public class APIDocDemo{
 /**
 * sayHello方法中使用的問候語
 */
 public static final String INFO = "你好!";
 /**
 * 為給定用戶添加一個問候語
 * @param name 給定的用戶的名字
 * @return 含有問候語的字符串
 */ 
 public static String sayHello(String name){
 return INFO + name; 
 }
}
=======================================================================
導出文檔
在項目名---Export(導出)---Select:Java(Javadoc)---
doc.tedu.cn
java文檔---6是中文版文檔、7、8是英文版
javaSE中最長見的String這個類的字符串
字符串是只要寫程序,一定用的。文字是和計算機直接交互的方式。字符串在java中的地位,是非常重要的。重要到java虛擬機的優化,編譯器開一些特權,可以逾越一些java的語法。
String 是被final修飾的
1)類;--- 被類修飾,類不能被繼承;不能被擴展
2)屬性; ---被屬性修飾,值不能被修改;
3)方法; ---不能被重寫。
計算機的編碼和二進制:
《數字電子技術》、《模擬電子技術》 計算機只認識0和1,標識的兩個數字。有電和沒有電。
0-9 拉位數 1010反轉進位
存二進一
0
1
10 ---2
11 ---3
100 ---4
101
110
111
1000
8421
1111 ---15
0100 ---4
0111 ---7
10111 ---16
byte:規定一個8位二進制就是一個字節
11111111 ---256
125 64 12 16 8 4 2 1
abc asc編碼
hello ---40個字節
h 輸到了內存里的編碼
00000000 a
00000001 b
asc編碼
asc編碼用一個字節表示文字,英語是非常適合計算機的語言。
內存:256G 能保存多少個1010?
1比特是一個字,1和0。
1KB=1024*8=8192
1byte=1個字節(8位二進制)
1MB=8192*1024=8388608
1GB=8388608*1024=8589934592(80多億個1010二進制)
中文應該怎么表達?
你好
英文保留,
兩個字節
你好
ab ,, GBK國標編碼
若訪問島國網站,日本有自己的文字。
我國計算機用JDK讀取,亂碼的原因是兩個不是使用了同一個字符集,導致編解碼出現了錯誤。
編碼?
---把文字轉化為二進制,這個過程叫做編碼。
解碼?
---計算機的二進制還原為人類認識的文字,叫解碼。
解碼器
MP3用文檔打開,有亂碼存在。
編解碼
Unicode編碼,唯一編碼二進制。Unicode組織的偉大志向。
UTF-8(常用的)
a 97(二進制是一樣的)
00101001
字符串的特性及方法
String是不可變對象
新建StringDemo1.java
****************************************************************************
package day01;
/**
 *字符串是不可變對象,即:字符串對象一旦創建,內容不可改變,若改變一定創建新對象
 * @author adminitartor
 */
public class StringDemo1{
 public static void main(String[] args){
 //java推薦使用字面量形式創建字符串對象
 String s1="123abc";
 //字面量對象一旦發現曾經創建過就重用
 String s2="123abc";
 //s2重用s1創建的字符串對象
 System.out.println(s1==s2);//true 雙等於比的是這兩個變量的值相等 引用類型地址一樣,存的指向的是同一個對象
 System.out.println(s1.equals(s2));//true
 //new操作一定創建新對象
 String s3 = new String("123abc");
 System.out.println("s3:"+s3);
 System.out.println(s1==s3);//false
 System.out.println(s1.equals(s3));//true
 /*
 * java編譯器有一個優化措施,即:
 * 當一個計算表達式參與運算的值都是字面量,那么直接計算,並將結果編譯到.class文件中
 *所以下面的代碼在class文件中的樣子為:
 * String s4 ="123abc";
 */
 String s4 ="123"+"abc";
 System.out.println(s1==s4);//true
 String s5 ="123";
 String s6 = s5+"abc"; //一方是變量,編譯時就不計算
 System.out.println(s5==s6);//false
 int a=1000*60*60*24*365;
 }
 }
***************************************************************************
雙等於不是恆等成立的,只是在這種情況下成立。此地方為什么一樣?原因是用到java對字符串的優化措施,java是從c語言進化過來的,在開發java這幫程序員來講,他們是c語言高手,他們用c語言寫虛擬機寫java。這幫人以前曾有過很多很多開發經驗的,開發軟件的時候字符串難免會用,在一個程序中會大量重復的使用同一個字符串內容。例如,上網,我寫的是一個服務端,今天出了一萬字的新聞,
****************************************************************************
創建 String_length.java
package day01;
/**
 * int length()
 * 返回當前字符串的長度,即:字符個數
 * 無論中英文,每個字符1個長度
 * @author adminitartor
 */
public class String_length{
 public static void main(String[] args){
 String str = "你好java";
 int len = str.length();
 System.out.println("len:"+len); //6
 }
}
****************************************************************************
package day01;
/**
 * int indexOf(String str)
 * 查找給定字符串在當前字符串中的位置
 * @author adminitartor
 */
public class String_indexOf{
 public static void main(String[] args){
 // 0123456789012345
 String str ="thinking in java";
 /*
 * 找第一次出現"in"的位置
 */
 int index=str.indexOf("in");
 System.out.println(index);//2 嚴格區分大小寫,若是"In",則值為-1。沒有給的內容
 /*
 * 從下標3處開始查找第一次出現"in"的位置
 */
 index = str.indexOf("in",3);
 System.out.println(index);//5
 /*
 * 查找最后一次出現"in"的位置
 */ 
 index = str.lastIndexOf("in");
 System.out.println(index);//9
 
 }
 }
****************************************************************************
package day01;
/**
 * int indexOf(String str)
 * 返回給定字符串在當前字符串中的位置,若當前
 * 字符串不含有給定字符串則返回-1
 * @author Daisy.yang
 *
 */
public class String_indexOf2 {
 public static void main(String[] args) {
 // 0123456789012345
 String str="thinking in java";
 int index = str.indexOf("in");
 System.out.println(index); //2
 //如果在寫郵箱的時候,
 index=str.indexOf("in",3);
 System.out.println(index); //5
 
 index=str.lastIndexOf("in");
 System.out.println(index); //9
 }
}
****************************************************************************
《java編程思想》身份的象征,看不看無所謂。哈哈哈哈,用為工具。
****************************************************************************
package day01;
/**
 * int substring(int start,int end)
 * 截取當前在字符串指定范圍內的字符串內容並返回。
 * 在java api中通常使用兩個數字表示范圍時,都是"含頭不含尾"的。
 * @author adminitartor
 */
public class String_substring{
 public static void main(String[] args){
 // 01234567890123
 String str ="www.oracle.com";
 /*
 * 截取域名:
 * 通常用兩個數字表示范圍時,都是含頭不含尾的
 */
 String sub = str.substring(4,10); //寫到10,含頭不含尾
 System.out.println(sub);//oracle
 sub = str.substring(4);
 System.out.println(sub);//oracle.com
 
 /*
 * http://www.oracle.com
 * www.oracle.com
 */
// String host ="http://www.oracle.com.cn";
 //截取域名?
// int start = host.indexOf(".")+1;
// int end = host.lastIndexOf(".",start);
// sub = host.substring(start,end);
// System.out.println(sub); //oracle
 
 String host=getHostName("http://www.baidu.com");
 System.out.println(host); //baidu
 host = getHostName("www.oracle.com");
 System.out.println(host); //oracle
 host =getHostName("www.tedu.com.cn");
 System.out.println(host); //tedu
 }
/**
* 獲取給定地址中的域名
* @param host
* @return
*/
public static String getHostName(String host){
int start = host.indexOf(".")+1; //第一個點之后的第一個字符
int end= host.indexOf(".",start);
return host.substring(start,end);
}
}
*******************************************************************************
創建 String_trim.java
*******************************************************************************
package day01;
/**
 * String trim()
 * 去除一個字符串兩邊的空白字符(空白不等同於空格,只能說,空格只是空白的一種)
 * @author adminitartor
 */
public class String_trim{
 public static void main(String[] args){
 String str =" hello ";
 String s = str.trim();
 System.out.println(str);// hello
 System.out.println(s); //hello
 }
 }
*******************************************************************************
創建 String_charAt.java
*******************************************************************************
package day01;
/**
 * String charAt(int index)
 * 返回當前字符串中指定下標處對應的字符
 * @author adminitartor
 */
public class String_charAt{
 public static void main(String[] args){
 // 0123456789012345
 String str ="thinking in java";
 
 char c = str.charAt(9);
 System.out.println(c);//i
 /*
 * 查看一個字符串是否為"回文"
 * 上海自來水來自海上
 */
 String info="上海自來來水自海上";
// String info = "上海自來水來自海上";
 for(int i=0;i<info.length()/2;i++){
 if(info.charAt(i)!=info.charAt(info.length()-1-i)){
 System.out.print("不");
// System.out.println("不是回文");
// return; //此方法結束,若是break只是跳出for循環。結果就是兩種。
 //若加上else,輸出三種,是回文是回文不是回文。
 //開關?
 //return是結束方法。
 break;
 }
 }
 System.out.println("是回文");
 }
 }
******************************************************************************
package day01;
public class String_charAtHui {
 public static void main(String[] args) {
 //查看字符串是否為回文
 String info="上海自來來水自海上";
 /**
 * 此時會出現兩種情況:即輸出 不是回文,又輸出 是回文。
 * 因為for循環輸出后,是回文 一定會輸出的。即使循環停了,是回文還是要輸出。
 * 若加else,就變成摸着石頭過河,走一步判斷一次。
 * 此時,會有很4種情況。
 * 開關:
 */
// String info="上海自來水來自海上";
 for(int i=0;i<info.length()/2;i++){
 if(info.charAt(i)!= info.charAt(info.length()-1-i)){
 System.out.println("不是回文");
 break;
 }else{
 System.out.println("是回文");
 
 }
 }
 }
}
*******************************************************************************
package day01;
public class String_charAtKai {
 public static void main(String[] args) {
 //查看字符串是否為回文
 String info="上海自來來水自海上";
 /**
 * 開關
 */
// String info="上海自來水來自海上";
 boolean flag =true;
 for(int i=0;i<info.length()/2;i++){
 if(info.charAt(i)!= info.charAt(info.length()-1-i)){
 System.out.println("不是回文");
 flag=false;
 break;
 } 
 }
 if(flag){
 System.out.println("是回文"); 
 }
 }
}
******************************************************************************
*******************************************************************************
*******************************************************************************
package day01;
/**
 * boolean startWith(String str)
 * boolean endWith(String str)
 * 判斷一個字符串是否是以給定字符串開始或結尾的
 * @author adminitartor
 */
public class String_startsWith{
 public static void main(String[] args){
 String str ="thinking in java";
 boolean starts = str.startsWith("thin");
 System.out.println("starts:"+starts); //true
 boolean ends = str.endsWith("ava");
 System.out.println("ends:"+ends); //true
 }
 }
*******************************************************************************
創建 String_toUpperCase_toLowerCase.java
*******************************************************************************
package day01;
/**
 * String toUpperCase()
 * String toLowerCase()
 * 將當前字符串中的英文部分轉換為全大寫或全小寫
 * @author adminitartor
 */
public class String_toUpperCase_toLowerCase{
 public static void main(String[] args){
 String str ="你好Java";
 
 String upper = str.toUpperCase();
 System.out.println(upper);
 
 String lower = str.toLowerCase();
 System.out.println(lower); 
 }
 }
*******************************************************************************
創建 String_valueOf.java
*******************************************************************************
package day01;
/**
 * Static String valueOf(...)
 * String提供了一組重載的靜態方法valueOf
 * 作用是將java其他類型轉換為字符串
 * 常用於將基本類型轉換為字符串
 * @author adminitartor
 */
public class String_valueOf{
 public static void main(String[] args){
 int w =123;
 String wstr = String.valueOf(w); //字符串"123",效率更高。
 System.out.println(wstr+4); //字符串"1234"
 double d=123.123;
 String dstr = String.valueOf(d);
 System.out.println(dstr+4);//"123.1234"
 wstr= w+ ""; //任何內容和字符串連接,結果都是字符串。這里要做計算。
 }
 }
*******************************************************************************
*******************************************************************************
創建 StringDemo2.java
package day01;
/**
 * 頻繁修改字符串帶來的性能問題
 * @author adminitartor
 */
public class String_substring{
 public static void main(String[] args){
 String str ="a";
 for(int i=0;i<100000;i++){
 str+="a";
 }
 }
 }
*******************************************************************************
GC淚奔了!
直徑內存溢出。內存釋放完全聽GC的。不管內存怎么回收的。
int a = 1;(java,用完GC會收的。)
int a = maloc1;(C語言)---開啟四個字節的空間。若邏輯寫的非常復雜的時候,有一段忘了。內存將永遠被占用不被釋放。你也不使用,也不讓別人使用。(內存泄漏)
GC垃圾回收器,java閑置的內存不如c強,這也是c程序員嫌棄java的地方。哈哈哈哈。你們java什么玩意,自己內存都控制不了,我們說對啊。自己控制不了性能何在?對啊,沒有啊。那你們有什么好牛的?我們沒有內存泄漏啊。你們呢?啊!
內存泄漏?本身內存條每次想定義一個變量,不管是定義int型string型什么型,都得要開一段空間的,在真正在使用c語言的時候,比如想定義一個int變量,想調用一個myloge函數,跟內存申請四個字節的空間,內存說行,你在里面隨便使,隨便復制隨便改可以。變量用完了,要出方法之前,跟內存說這段空間不用了釋放。別的空間要使用,也能開辟。但是,如果你忘了,這段空間開了用完了,沒和內存說,那好別人也不能使用,你這一輩子也不用,這段空間永遠被占用,這就叫做內存泄漏。這種事情越來越多的話,你會發現你的可用內存會越來越少。
所以電腦使用一段時間不關機,速度越來越慢的原因。然后硬盤發現讀寫數字越來越頻繁。原因在於當我們發現硬件使用內存不足的時候,Windows會做一個很奇葩的事情,在你的硬盤上開一段空間做臨時內存,在上面玩命讀寫,硬盤讀寫速度奇慢無比。
這就是c語言的問題,你有內存泄漏,一旦程序員忘了。。。c語言程序員(素質好,煙頭隨手丟垃圾桶)java程序員(隨手丟地上)GC(掃地大爺)
創建 StringDemo2.java
**************************************************************************************************
package day01;
/**
 * 頻繁修改字符串帶來的性能問題
 * @author adminitartor
 */
public class StringDemo2{
 public static void main(String[] args){
 String str ="a";
 for(int i=0;i<100000;i++){
 str+=str; //一個變兩個,2變4,4變8...16...32..
 }
 }
 }
**************************************************************************************************
一運行,干脆利索,outofmemoryerror內存溢出了,內存裝不下爆了,宕機。c語言不會出現 這種問題,除非你開的空間確實超過內存了,那確實沒有辦法。否則人家隨時用隨時刪。。。不會出現這個問題,但java就不行,內存不歸我們控制,是GC說的算,而GC的工作我們又沒有辦法限制,所以說內存使用率沒有c語言那么高效,原因就體現在這里。關鍵是咋整?
這個時候我們就回過來埋怨java啦,你為字符串做的這個優化,對我頻繁修改字符串來講沒有任何好處,你想想你要求我改變一次字符串內容你就要新建一個新對象,那如果我頻繁創建就會有內存溢出風險了。重用性確實很高但是不得不考慮這種需求,一旦我有這種需求,隨便一操作就有溢出。
java就說字符串我就這樣了。給你
3:21:30
java中用1.0版本,專門用一個類來頻繁操作字符串的,於是SB就誕生了。專門用來頻繁操作字符串的,全稱叫做:StringBuilder
用這個類可以在一個字符串中,去修改。不是所有修改都需要創建新對象,就在一個對象里。修改內容時,就往char數組里面添加就行。
char數組用完后就可以擴容。
增刪改插
*******************************************************************************
package day01;
/**
 * java.lang.StringBuilder
 * StringBuilder是為了解決頻繁字符串對系統資源開銷問題。
 * StringBuilder內部是一個可變的字符數組,可以通過擴容來實現長度變換,而不是每次創建新對象。
 * StringBuilder提供了方便修改字符串內容的方法。
 * 
 * 由於String的特性不適合頻繁修改內容(內存開銷大),所以頻繁修改字符串時應當使用StringBuilder來完成。
 * StringBuilder內部維護一個可變的字符數組,所有修改都是基於該數組完成的。
 * @author adminitartor
 */
public class StringBuilderDemo1{
 public static void main(String[] args){
 String str ="好好學習java";
 StringBuilder builder = new StringBuilder(str);
 /*
 * StringBuilder append(String str)
 * 向當前字符串末尾追加給定內容
 * append()方法用於將給定內容拼接到當前字符串末尾。
 */
 //好好學習java,為了找個好工作!
 builder.append(",為了找個好工作!"); 
 
 //獲取StringBuider內部修改好的字符串
// str = builder.toString();
// System.out.println(str);
 System.out.println(builder.toString());
 
 /*
 * StringBuilder replace(int s,int e,String str)
 * 將指定范圍內的字符串替換為給定字符串
 * replace():將當前字符串中指定范圍內的內容替換為給定內容
 */ 
 //換頭不換尾
 //好好學習java,為了找個好工作!
 //好好學習java,就是為了改變世界!
 builder.replace(9,16,"就是為了改變世界");
 System.out.println(builder.toString());
 
 /*
 * StringBuilder delete(int s,int e)
 * 刪除指定范圍內的字符串
 * delete():刪除指定范圍內的內容
 * 
 * 好好學習java,就是為了找個好工作!
 * ,就是為了找個好工作!
 */
 builder.delete(0,8);
 System.out.println(builder.toString());
 /*
 * StringBuilder insert(int index,String str)
 * 將給定字符串插入到指定位置
 * insert():在當前字符串指定位置插入指定字符串內容
 * 
 * ,就是為了改變世界!
 * 活着,就是為了改變世界!
 */
 builder.insert(0,"活着");
 System.out.println(builder.toString());
 
 /*
 * reverse():翻轉字符串
 * 當用回文的時候,就不用一個一個判斷了。 
 */
 builder.reverse();
 System.out.println(builder.toString());
 }
 }
*******************************************************************************
*******************************************************************************
package day01;
/**
 * java.lang.StringBuilder
 * StringBuilder是為了解決頻繁字符串對系統資源開銷問題。
 * StringBuilder內部是一個可變的字符數組,可以通過擴容來實現長度變換,而不是每次創建新對象。
 * StringBuilder提供了方便修改字符串內容的方法。
 * 
 * 由於String的特性不適合頻繁修改內容(內存開銷大),所以頻繁修改字符串時應當使用StringBuilder來完成。
 * StringBuilder內部維護一個可變的字符數組,所有修改都是基於該數組完成的。
 * 
 * StringBuffer和StringBuilder
 * -StringBuffer是線程安全的,同步處理的,性能稍慢(多線程時使用)JDK1.0
 * -StringBuilder是非線程安全的,並發處理的,性能稍快(單線程時使用)JDK1.5出現
 * 執行的效果一樣。
 * 
 * @author adminitartor
 */
public class StringBufferDemo1{
 public static void main(String[] args){
 String str ="好好學習java";
 StringBuffer builder = new StringBuffer(str);
 /*
 * StringBuilder append(String str)
 * 向當前字符串末尾追加給定內容
 * append()方法用於將給定內容拼接到當前字符串末尾。
 */
 //好好學習java,為了找個好工作!
 builder.append(",為了找個好工作!"); 
 
 //獲取StringBuider內部修改好的字符串
// str = builder.toString();
// System.out.println(str);
 System.out.println(builder.toString());
 
 /*
 * StringBuilder replace(int s,int e,String str)
 * 將指定范圍內的字符串替換為給定字符串
 * replace():將當前字符串中指定范圍內的內容替換為給定內容
 */ 
 //換頭不換尾
 //好好學習java,為了找個好工作!
 //好好學習java,就是為了改變世界!
 builder.replace(9,16,"就是為了改變世界");
 System.out.println(builder.toString());
 
 /*
 * StringBuilder delete(int s,int e)
 * 刪除指定范圍內的字符串
 * delete():刪除指定范圍內的內容
 * 
 * 好好學習java,就是為了找個好工作!
 * ,就是為了找個好工作!
 */
 builder.delete(0,8);
 System.out.println(builder.toString());
 /*
 * StringBuilder insert(int index,String str)
 * 將給定字符串插入到指定位置
 * insert():在當前字符串指定位置插入指定字符串內容
 * 
 * ,就是為了改變世界!
 * 活着,就是為了改變世界!
 */
 builder.insert(0,"活着");
 System.out.println(builder.toString());
 
 /*
 * reverse():翻轉字符串
 * 當用回文的時候,就不用一個一個判斷了。 
 */
 builder.reverse();
 System.out.println(builder.toString());
 }
 }
*************************************************************************************************
SVN賬號 每天寫一寫作業。
SVN:版本控制軟件,是一個項目團隊共同配合完成一個項目使用的。
有一台服務器,項目經理會在服務器上創建一個項目,剛開始只有框架,里面只有包,甚至連類都沒有。
這時候,要做的是,有幾台計算機,都連上服務器。
把項目檔到本地每台計算機里,每個人負責一個模塊,就只寫自己的模塊,其他人的不管。
每天上傳,與服務器同步,服務器上的項目就會檢測其他人的與你的不同,不同的相互拼接。
跟新項目,直到同步為止。
要求代碼不能報錯。保證有效代碼。
***********************************************************************************************
鼠標右鍵--->other--->往下找SVN--->從SVN檢出項目--->創建新的資源庫位置--->
URL:http://svn.tedu.cn/svn/1703se/stuxxxxxxx (輸入服務器的地址)
stuxxxxxx
項目經理給的賬號
