JAVASE01---Unit01: API文檔 、 字符串基本操作


用戶看見的和你沒有關系。客戶端主要用來展現的,服務端(后台)。程序員是內在美,和外在美沒有關系。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
項目經理給的賬號

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM