2019/0507/Java 物件導向_類別+函式觀念&階段性作業三
#java
類別&函式
前情提要陣列的運算 (矩陣相乘是典型的方式
等等要做作業
會使用到多階層for與while迴圈
##字串類別class
String
Stringbuffer
內建類別庫 一堆寫好的函式庫
字串很像字元型別的一維陣列
利用建構元(建構式)產生字串物件
字串類別庫提供許多方法可以操控物件
包含
取得字串長度
擷取字元
擷取子字串
將字串串接
字串的搜尋與取代
字串的大小寫轉換
完整的可以在文件裡面查詢
string一旦被指定值除非值接指定,不可以局部改變它的值
例如 abcd 想改成 accd 那就要重新指定
但stringbuffer可以
底層操作其實是abcd其實還在只是空在那邊
然後創造了一個新的accd指給舊的string
但是要連續做個幾萬次才會有差異
但是如果執行一兩次反而stringbuffer效能耗的更多
Replace取代insert插入
##建構元constructor建構子?建構式
和類別名稱相同的方法(函式)
專門產生屬於該類別的物件
( new 在產生時做一些屬性內容的重新初始化配置
一個類別可以擁有許多建構元
( 沒有參數的版本 一個兩個三個…的版本 (類似多型
Public string ()
Public string (byte[]bytes)
Public string (byte[]asci,inthibyte)
.
.
.
Ex
String str;
Str = sc.nextline()
有很多應用可以看文件(看與使用的環境相容的版本
https://Docs.oracle.com/javase/8/docs/api/java/lang/String.html
https://docs.oracle.com/javase/8/docs/api/index.html?java/lang/String.html
裡面包含
Constructors建構子多載
Methods方法
.
.
.
String A=XX
其實就跟
String A = New Srting(XX)
這裡要去看一下PPT剛剛走神 …
然後是一些string物件常用的方法
像是
GetChars charAt
與需要輸入的參數
接著是
###例子java12_4.java
宣告配置字串(物件)s1利用字串(物件)s1操作(方法)charAt擷取字元放入字元陣列c1(物件)中,在利用字串(物件)s1操作(方法)toCharArray字串轉字元並塞入字元陣列c2(物件)中,操控字串(物件)s1操作(方法)getChars擷取字元(起始值,結束值,塞入哪裡c3字元陣列,索引直偏移量看要從原來的哪開始塞從0開始則會覆蓋)
C3[0]=’a’;C3[1]=’b’
如果是1則C3=ajava
如果是0則C3=java
###例子java12_5.java
宣告配置s1字串(物件)與s2字串(物件)並給定某值
操控System.out (靜態方法)println(方法)印出一行值
然後用此方式在印出 呼叫s1s2與呼叫s1s2做(方法)length顯示其長度值
System.out.println(s1 + s1.length()+s2+s2.length());
###主字串擷取子字串
子字串=主字串.Substring(開始索引,結束索引)有很多多型
###字串串接字串
Concat(用法可以去看官方文件
###例子 java12_6.java
宣告s1字串物件給值
利用s1字串物件操作擷取字串方法並把產值給予s2字串物件
宣告s3字串物件給值
利用s3字串物件操作擷取字串方法並把產值給予s4字串物件
System.out(靜態方法編譯的時候就建構好的類別可以直接使用)物件println
Concat(方法)也是類似方式
###字串搜尋
indexOf()頭到尾
lastIndexOf()尾到頭
找到時回傳1
找不到回傳-1
有很多型 ( 有找字元的或從哪個位指找 等等
###字串大小寫轉換
toLowerCase()
toUpperCase()
也是有很多型
###字串取代
Replace()
也是有很多型
###例子 java12_7.java
宣告s1字串給值
宣告s2字串並將s1字串重置值並把值給s2
宣告s3字串不給值
宣告5個int
並把s1(方法)搜尋值的結果存入第一個int
並把s1(方法)搜尋值的結果存入第二個int
並把s1(方法)反向搜尋值的結果存入第三個int
並把s1(方法)搜尋值的結果存入第四個int
並把s1(方法)反向搜尋值的結果存入第五個int
System.out(靜態方法)println(方法)印出剛剛宣告的五個int值
重新指定s3為s1重置值(方法)replace
System.out(靜態方法)println(方法)印出s1s2s3
宣告s4值為s1方法字串變大touppercase
System.out(靜態方法)println(方法)印出s4
接著介紹
##Stringbuffer類別
用來產生字串緩衝器
與
String
差別為
Mether
字詞都修改意涵而不是查詢等等
類別方法
append 將值插入字串緩衝區的尾端
insert 將字串插入字串緩衝區某個位置
delete 將字串
replace
查文件有更多 更詳細
###案例 java12_8.java
宣告字串緩衝器s1
System.out(靜態方法)println(方法)印出 s1 + s1(物件)((方法)查詢長度)
S1(物件)操控增加字串apend(方法)在字串尾加入
使用方法 insert
印出
S1重置 new 值
印出
Replace取代方法
印出
Delete 刪除方法
印出
###\” 為跳脫字元 顯示的是 一個雙引號 避免使用到保留字
#下午物件導向函式觀念
##先弄java 迴圈作業
第一題 多for則複雜度(Time complexity)越高
感覺要挑戰4層比較猛,不過老師的是兩層第二層內做運算
第二題老師用break做停止 好像也是低複雜度的
第三題這次用!= 不等於然後有用while
階段性作業3
利用課堂教學之IO輸出與輸入、邏輯控制敘述、迴圈結構等Java語法,完成所要求之程式功能設計:
1. For 迴圈,達成列印 99 乘法表的功能
使用For 迴圈,列印出99乘法表
自行設定迴圈所需的控制變數與條件關係式
參考輸出格式如下圖
2. 使用 for 迴圈,算出小於等於 N 的所有質數
需利用輸出與輸入功能提示使用者輸入變數N
使用For 迴圈,依據變數N列印出乘法表
自行設定迴圈所需的控制變數與條件關係式質數指在大於1的数中,除了1和該数自身外,無法被其他自然数整除
參考輸出格式如下圖
3. 使用 while 迴圈,算出小於等於 N 的所有質數
需利用輸出與輸入功能提示使用者輸入變數N
使用while迴圈,依據變數N列印出乘法表
自行設定迴圈所需的控制變數與條件關係式
質數指在大於1的数中,除了1和該数自身外,無法被其他自然数整除
參考輸出格式如下圖
#函式
成員函數 物件導向內稱為 方法 method
##優點
模組化 可重複呼叫 節省成本
只需要給參數即可達到那個函數的結果
不用知道函數的內容
簡化程式碼
容易除錯維護(因為呼叫的功能是人家除錯完畢的,只要注意自己的程式碼即可
光是多型內就有很多不同參數版本原因是本來就
底層需要考慮字串串不同型態的資料
但藉由函式不同的多型即可已簡化很多行底層程式碼
充分發揮資訊隱藏
(可以自己決定是否隱藏具有類似權限的功能
除非將二進位碼反組譯否則隱藏性很高
、多載
、改寫
然後因為以上特性所以一定有文件可以看,否則其他人根本不知道怎用
Override等物件導向特性
以前不是物件導向時就有函數了稱為funtion
##函式存取概念 ( 類似權限
Public公開
內部外部任一個class皆可存取
Private私有
同一個內部class才可存取
Protected保護
同一個package內部的class才可存取,不同的package要有繼承才可存取
Last updated