第一篇:Java登陸驗(yàn)證模塊的實(shí)現(xiàn)及小結(jié)
登陸驗(yàn)證模塊的實(shí)現(xiàn)
登陸頁面驗(yàn)證首先是驗(yàn)證賬號(hào), 驗(yàn)證碼是否填寫,密碼長度是否符合要求,驗(yàn)證碼是否正確。這幾個(gè)驗(yàn)證是通過自定義的幾個(gè)$.fn擴(kuò)展函數(shù)實(shí)現(xiàn)的($.fn.remote=Function(url,msg, msgCnt){})實(shí)現(xiàn)的,一般將這些自定義的函數(shù)放在一個(gè)js文件中,便于維護(hù)。
自定義函數(shù)一般包含相應(yīng)的提示字符串,及節(jié)點(diǎn)對(duì)象$(“#id”)等參數(shù)。通過函數(shù)對(duì)節(jié)點(diǎn)的var value = this.val();value是否為空或空字符串的判斷,相應(yīng)的改變節(jié)點(diǎn)text屬性的值。1驗(yàn)證碼正確驗(yàn)證
1)驗(yàn)證碼正確與否的驗(yàn)證是通過采用了Ajax技術(shù)的函數(shù)實(shí)現(xiàn)的。對(duì)應(yīng)的action的result的屬性為json(result要配置
ok的參數(shù)),action類要有布爾類型的名為ok的屬性,通過返回值ok,更改相應(yīng)的改變節(jié)點(diǎn)text屬性的值。
如:
$.fn.remote=function(url,msg,msgCnt){ var value=this.val();//獲得表單提交的數(shù)據(jù),如你所填入的驗(yàn)證碼/資費(fèi)名稱
var name=this.attr(“name”);//獲得表單名稱,如驗(yàn)證碼文本框的name:verifiCode
var b=false;$.ajax({url:url+“?”+name+“=”+value,dataType:“json”,async:false,success:function(data){
if(data){
$(msgCnt).text(“");
b=true;
}else{
$(msgCnt).text(msg);
}
}
});return b;};2)驗(yàn)證碼的點(diǎn)擊更新是利用了result=stream的屬性(要配置name=”inputName“,name=”contentType“的參數(shù)),點(diǎn)擊發(fā)送請(qǐng)求,對(duì)應(yīng)的action(該類必須有InputStream類的屬性,且名字要和result相應(yīng)參數(shù)的屬性值相同)生成驗(yàn)證碼并存入session。
2賬戶和密碼的驗(yàn)證
當(dāng)前面一系列的驗(yàn)證結(jié)果都滿足條件時(shí),才能提交表單。可定義一個(gè)函數(shù)實(shí)現(xiàn): if(b1 && b2 && b4){$(”#loginForm“).submit();} 相應(yīng)action 接受到數(shù)據(jù)后,根據(jù)賬戶和密碼調(diào)用DAO的相關(guān)方法,查詢返回admin。
如果admin存在則轉(zhuǎn)發(fā)到主頁面(通過result在admin的不同狀態(tài)下返回的字符串實(shí)現(xiàn)不同的type=”redirectAction“),此時(shí)將admin存入session。為后面的登陸檢查驗(yàn)證做準(zhǔn)備。
session.put(KEY_ADMIN, admin);如果不存在就,還是停留在登陸頁面。
3檢查登陸驗(yàn)證。
為了防止未登錄而訪問數(shù)據(jù),通過struts2的自定義攔截器功能實(shí)現(xiàn)登陸檢查驗(yàn)證。
可通過實(shí)現(xiàn)接口Interceptor或者抽象類AbstractInterceptor,我選擇繼承AbstractIntercepto,相對(duì)較簡潔。在接口定義的方法intercept(ActionInvocation in)實(shí)現(xiàn)驗(yàn)證邏輯。
通過ActionInvocation的getInvocationContext()方法獲得action上下文對(duì)象ActionContext。通過action上下問對(duì)象獲得session對(duì)象,在session對(duì)象中獲取admin對(duì)象:
Admin admin =(Admin)session.get(Constants.KEY_ADMIN);如果admin為空,則通過return 返回字符串及全局result回到登陸頁面。如果admin不為空,則通過ActionInvocation對(duì)象調(diào)用invoke()方法,調(diào)用后面的action。
權(quán)限管理:
每個(gè)用戶具有不同的角色,不同的角色具有不同的權(quán)限。當(dāng)用戶登陸的時(shí)候,根據(jù)用戶對(duì)象取得用戶所具有的角色,根據(jù)角色id在privileges.xml(通過privilegereader類)文件中獲得用戶具有的所有權(quán)限,然后將此所有權(quán)限的集合存入session。當(dāng)用戶每一次發(fā)送請(qǐng)求時(shí)都要通過攔截器,在攔截器中截取用戶的請(qǐng)求路徑(request.getServletPath()),并檢查是否存在于session中的用戶所具有權(quán)限中。如果沒有就返回到提示頁面,如果有就調(diào)用invoke()方法執(zhí)行后面的action,result。
攔截器的配置:
1.首先注冊(cè)攔截器
2.然后定義攔截器棧,將默認(rèn)攔截器棧也加進(jìn)來。
資費(fèi)管理模塊:
資費(fèi)管的功能主要有資費(fèi)信息的增加、管理、刪除和修改等功能。采用三大框架整合技術(shù)實(shí)現(xiàn)的。
在applicationContext.xml文件中配置連接池(用戶名、密碼、驅(qū)動(dòng)包、連接路徑),將連接池注入SessionFactory中,在SessionFactory中配置Hibernate框架參數(shù):如方言dialect,show_sql等,指定映射描述。然后開啟組件掃描:
關(guān)于事務(wù):
在applicationContext.xml文件中定義事務(wù)管理Bean,然后定義通知
將dao用@Respository掃描進(jìn)組件。
第二篇:flex整合Java登陸總結(jié)
Flex結(jié)合java實(shí)現(xiàn)一個(gè)登陸功能
1、環(huán)境的搭建:
對(duì)message-congig.xml配置如下:
Web.xml的配置如下: class=“flex.messaging.services.remoting.adapters.JavaAdapter” default=“true” />
services.configuration.file
/WEB-INF/flex/services-config.xml
這些xml文件基本固定。
2、創(chuàng)建Bean類User和Login類
public class Login {
} 啟動(dòng)tomcat,至此myeclipse里的配置結(jié)束。
3、在flah builder里創(chuàng)建一個(gè)flex項(xiàng)目。public String login(String name, String psw){
} public String login(User user){
}
public User login(){ } return new User(“wang”,“aaa”,33);if(“sss”.equals(user.getName())&&
} return “good”;return “sorry”;if(“aa”.equals(name)&& “123”.equals(psw)){
} return “ok”;return “error”;} else {
“123”.equals(user.getPwd())){ }else{
應(yīng)用服務(wù)器技術(shù)類型選:j2ee BalzeDS 下一步之后配置服務(wù)器位置:
點(diǎn)擊完成。
4、對(duì)index.mxml的編寫:
首先要在fx:Decaration中配置destination對(duì)應(yīng)于message-congig.xml中的id Result是回調(diào)函數(shù),
endpoint=“/flexApp01/messagebroker/amf”>
Fx:script中的代碼如下:
import com.wang.asclass.User;
import mx.controls.Alert;import mx.rpc.events.ResultEvent;protected function huidiao1(event:ResultEvent):void { // TODO Auto-generated method stub
var result:String =event.result as String;
]]> } Alert.show(result,“結(jié)果”);protected function huidiao2(event:ResultEvent):void { // TODO Auto-generated method stub
var result:User = event.result as User;Alert.show(result.name);trace(result.name);} protected function senddata(event:MouseEvent):void //按確認(rèn)按鈕時(shí) {
} protected function canceldata(event:MouseEvent):void //按取消按鈕時(shí) {
}
protected function showdata(event:MouseEvent):void{ //按查詢按鈕
} loginClientTag2.login();// TODO Auto-generated method stub
var name:String=this.nametext.text;var psw :String=this.pswtext.text;var user :User = new User();user.name=name;user.pwd=psw;loginClientTag.login(user);
// TODO Auto-generated method stub
this.nametext.text=“";this.pswtext.text=”“;
視圖:
可創(chuàng)建一個(gè)名為User的as類 package com.wang.asclass {
}
[Bindalbe] [RemoteClass(alias=”com.wangkun.User")] public class User {
} public function User(){ } public var name : String;public var pwd : String;public var age : int;
第三篇:java小結(jié)
//1.累加 public class 累加 {
}
//2.階乘
public class 30的階乘 {
} public static void main(String[] args){
} int product=1;for(int i=1;i<=30;i++){ product=*i;} public static void main(String[] args){
} int i=1;for(int counter=1;counter<=100;counter++){ } System.out.println(i);i+=counter;
//3.倒序輸出
法1 用char數(shù)組思想 import java.util.Scanner;public class 逆序輸出 {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);// String input[]=new String[4];input=scan.nextLine();// huiche
// String result=“";char[] Array=input[4].toCharArray();for(int i=Array.length-1;i>=0;i--){
} result+=Array[i];} System.out.println(result);} //倒序輸出 法2 用reverse()方法 import javax.swing.JOptionPane;public static void main(String[] args){
}
String a = null;StringBuffer b;//輸入
a=JOptionPane.showInputDialog(a);StringBuffer c1=new StringBuffer(a);b=c1.reverse();System.out.println(b);
//4.輸出100 121 144...361 public class平方輸入數(shù)組 {
}
//5.求最大公約數(shù)
private static int gys(int m,int n)
{
if(n==0)
return m;else public static void main(String[] args){
} int[] array=new int[10];for(int i=0;i<10;i++){ } array[i]=Math.pow((i+10),2.0);
for(int k=0;k return gcd(n,m%n); } //6.求最小公倍數(shù) public static int gbs(int n1,int n2){ int a =(n1>n2)? n1 : n2; for(int j=a;j<=n1*n2;j++) { if(j%n1==0 && j%n2==0) { return j; } } return 0;} //7.1)十進(jìn)制整數(shù)轉(zhuǎn)化為二進(jìn)制整數(shù)采用“除2取余,逆序排列” import java.util.Scanner;public class Main { public static void main(String[] args){ //第一行輸入要幾組測試數(shù)據(jù) int N=0,a;//N為輸入幾組數(shù)據(jù),a為輸入的十進(jìn)制數(shù)字 } String b = null;Scanner scan=new Scanner(System.in);N=scan.nextInt();Main num=new Main();for(int i=1;i<=N;i++){ } a=scan.nextInt();b=num.deimalBinary(a);int d=num.Calcute(b);if(d%2==0)System.out.println(”Even“);else System.out.println(”O(jiān)dd“); /*一個(gè)方法得到二進(jìn)制數(shù),用遞歸 *用2去除十進(jìn)制整數(shù),可以得到一個(gè)商和余數(shù); *再用2去除商,又會(huì)得到一個(gè)商和余數(shù),} *如此進(jìn)行,直到商為零時(shí)為止,*然后把先得到的余數(shù)作為二進(jìn)制數(shù)的低位有效位,*后得到的余數(shù)作為二進(jìn)制數(shù)的高位有效位,依次排列起來 */ public String deimalBinary(int a){ } public int Calcute(String b){ } char[] Array=b.toCharArray();for(int i=0;i } if(Array[i]=='1'){ } counter+=1;return counter; //7.2)十進(jìn)制小數(shù)轉(zhuǎn)換為二進(jìn)制小數(shù)采用“乘2取整,順序排列” /*用2乘十進(jìn)制小數(shù),可以得到積,*將積的整數(shù)部分取出,再用2乘余下的小數(shù)部分,//8.矩陣運(yùn)算(加減乘)//矩陣運(yùn)算 *又得到一個(gè)積,再將積的整數(shù)部分取出,*如此進(jìn)行,直到積中的小數(shù)部分為零,*或者達(dá)到所要求的精度為止。 *然后把取出的整數(shù)部分按順序排列起來,*先取的整數(shù)作為二進(jìn)制小數(shù)的高位有效位,后取的整數(shù)作為低位有效位。*/ import java.util.Scanner;public class Main { public static void main(String[] args){ int N1,M1,N2,M2,K;Scanner scan=new Scanner(System.in);N1=scan.nextInt();M1=scan.nextInt();int[][] a=new int[N1][M1];for(int i=0;i for(int j=0;j N2=scan.nextInt();M2=scan.nextInt();int[][] b=new int[N2][M2];for(int i=0;i { } b[i][j]=scan.nextInt();} K=scan.nextInt();if(K==1)//加法 { int[][] c=new int[N1][M1];for(int i=0;i } { for(int j=0;j } System.out.println();} } if(K==2)//減法 { int[][] c=new int[N1][M1];for(int i=0;i } for(int j=0;j for(int j:i){ System.out.print(j+” “);} System.out.println();} } if(K==3)//乘法 { int[][] c=new int[N1][M2];for(int i=0;i } { for(int j=0;j } for(int p=0;p c[i][j]+=a[i][p]*b[p][j];for(int[] i:c)for(int j:i){ System.out.print(j+” “);} System.out.println();} } } } 9.//保留確定位數(shù)輸出 import java.text.DecimalFormat;//非四舍五入 DecimalFormat myformat=new DecimalFormat(”#0.00"); myformat.format(double num);//四舍五入,例為保留2位 double f=3.1415926; BigDecimal a=new BigDecimal(f); double af=a.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); 一、實(shí)驗(yàn)?zāi)康?/p> (1)使用Java編寫五子棋程序 (2)掌握編寫過程的一些類和類成員的使用,并且了解五子棋制作過程的一些步驟和了解一些算法。 二、實(shí)驗(yàn)環(huán)境 在電子樓2樓,裝有My Eclipse 的計(jì)算機(jī)上進(jìn)行 三、實(shí)驗(yàn)內(nèi)容 編寫一個(gè)五子棋程序。程序主要實(shí)現(xiàn)以下功能: 1.實(shí)現(xiàn)五子棋界面,要求人性化界面簡潔美觀; 2.實(shí)現(xiàn)黑白色輪流下棋功能,能提示下棋方; 3.實(shí)現(xiàn)連成五子自動(dòng)判斷功能; 4.實(shí)現(xiàn)時(shí)間設(shè)置功能,認(rèn)輸功能; 核心代碼如下: 1.我的第一步是設(shè)計(jì)界面。在這個(gè)過程的要使用到以下的步驟: 1.使用MyEclipse 創(chuàng)建一個(gè)Project關(guān)于這個(gè)工程,加入兩個(gè)類,分別是ChessFrame和Chess,而ChessFrame是這個(gè)工程中最重要的一個(gè)部分。創(chuàng)建過程中要繼承JFrame類,并且要繼承Runnable 和 MouseListener 這兩個(gè)接口,分別是用來監(jiān)聽鼠標(biāo)的移動(dòng)和時(shí)間的變化。2.在給這個(gè)JFrame設(shè)置大小和顏色等一些東西。這里最主要的是使用了兩個(gè)函數(shù),是以前沒見過的: 1.這個(gè)是用來設(shè)置默認(rèn)的窗口關(guān)閉事件的 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);2.這兩個(gè)是用來獲得屏幕的大小的 Toolkit.getDefaultToolkit().getScreenSize().height;Toolkit.getDefaultToolkit().getScreenSize().width; 3.把本地的背景圖片加到這個(gè)窗口中,作為這個(gè)窗口的背景圖: 使用的到的類有BufferedImage和 ImageIO這兩個(gè)類,這兩個(gè)類是專門用來處理這種功能的。主要的代碼如下: BufferedImage bg = null;bg = ImageIO.read(new File(“e:/background.jpg”));g.drawImage(bg,0,0,this);這樣這個(gè)圖片就加到了這個(gè)窗口的背景去了。 這里有一個(gè)改進(jìn)就是雙緩沖技術(shù),可以防止閃屏。這個(gè)技術(shù)就是在界面和內(nèi)存都有一幅圖,我們的改動(dòng)不是直接畫界面,而是內(nèi)存中先畫好然后把內(nèi)存中直接顯示出來,那樣就沒有了一前一后的,那就沒有了閃屏的事情發(fā)生了。 4.就是畫棋盤和寫一些游戲信息: 這步比較簡單,也沒什么可以說的,用到的一些畫線的函數(shù),和寫String的一些函數(shù)。 以上做完以后就可以出現(xiàn)以下的界面: 1.我的第二步就是增加對(duì)mouse的點(diǎn)擊和移動(dòng)的處理,這樣以后就可以用來下棋。在這個(gè)過程的要使用到以下的步驟: 1.增加對(duì)mouse的監(jiān)視,然后重寫它的一些函數(shù): 1.我們?cè)贑hessFrame的構(gòu)造函數(shù)中加入了addMouseListener()函數(shù),然后重寫關(guān)于這個(gè)的四個(gè)函數(shù),我們這這里不重寫所有的函數(shù),就改寫一個(gè)MousePress函數(shù)就可以了。改寫的代碼如下: public void mousePress(MouseEvent arg0){ this.x = arg0.getX();this.y = arg0.getY();if(this.canplay) } this.repaint();現(xiàn)在要處理的就是加上棋子了,我在這個(gè)做了一下小改動(dòng)可以更加準(zhǔn)確的定位下棋的位置: if(x >= 10 && x <= 374 && y >= 72 && y <= 450){ int sx1 =(this.x72)/ 20;int yx1 =(this.x72)% 20;if(yx1 >= 10){ } if(yy2 >= 10){ } sy2++;sx1++;就是這個(gè),我們通過監(jiān)控鼠標(biāo)的就可以得到點(diǎn)擊的X,Y坐標(biāo),我在這里通過對(duì)它求余,假如余數(shù)大于10(就是一個(gè)格子的一半)那就給+1,不然不變。后面的畫棋子是很簡單的一個(gè)過程,使用的是現(xiàn)成的函數(shù)(drawoval) 2.這部要做的就是記錄棋子和五子連的判斷: 1.我們通過一個(gè)數(shù)組int給保存棋子,如果是0就是沒子,1表示是黑子,2表示白子。在每次重繪的時(shí)候遍歷這個(gè)數(shù)組顯示,這樣就可以保存棋子了。2.判斷五子連起來然后獲勝的算法: 這個(gè)算法是鑒戒例子上的: private boolean isline(int x, int y, int xchange, int ychange, int color){ int tempx = xchange;int tempy = ychange;int count = 1;while(x + xchange >= 0 && y + ychange >= 0 && color == chess1[x + xchange][y + ychange]){ count++;if(xchange!= 0){ } if(ychange!= 0){ if(ychange < 0){ xchange++; } } } } ychange--;ychange++;} else { xchange = tempx;ychange = tempy;while(xychange >= 0 } if(count >= 5){ } return true;return false;} else { && color == chess1[xychange]){ count++;if(xchange!= 0){ } if(ychange!= 0){ } if(ychange < 0){ } ychange--;ychange++;} else { xchange++;中心思想就是要判斷就要判斷8個(gè)方向,其中有的只是相反的方向,我們使用關(guān)于X,Y的相對(duì)的變化來判斷,并且使用count來計(jì)數(shù),如果到了5個(gè)就可以判斷勝利啦。 1.我的第三步就是時(shí)間的變化和一些鍵的設(shè)置 1.關(guān)于時(shí)間的變化主要是在于線程的使用,這里我們這個(gè)JFrame它繼承了Runnable 這個(gè)接口,不過我們要重寫Run函數(shù),這個(gè)run函數(shù)的代碼如下: public void run(){ if(this.second > 0){ while(true){ this.repaint();if(this.isblack){ this.ss1--; if(this.ss1 == 0){ JOptionPane .showMessageDialog(this, “黑方超時(shí)~~~~?¤游戲結(jié)束”); this.message1=“0:0:0”; { “白方超時(shí)~~~~?¤?¤游戲結(jié)束”);this.message2=“0:0:0”;this.canplay = false; { { } this.ss2--; if(this.ss2 == 0){ this.message1 = this.ss 1/ 3600 + “ : ” +(this.ss1 / 60this.ss1 / 60 * this.ss1=-1; this.canplay = false; }else if(this.ss1>0)3600 * 60)60this.ss2 / 3600 + “ : ” +(this.ss2this.ss2 / 3600 * 60 * 60); this.repaint();}else { } try { } Thread.sleep(1000);e.printStackTrace();} catch(InterruptedException e){ 這個(gè)函數(shù)是用來事時(shí)間的變化,所以每操作以后就讓線程sleep(1000)就可以了,那樣就是一秒鐘。這樣就可以倒計(jì)時(shí)了。2.現(xiàn)在我們要點(diǎn)擊一個(gè)按鈕要它有響應(yīng)。 這里我們其實(shí)就沒用到什么button,那為什么會(huì)有反應(yīng)呢,因?yàn)槲覀兺ㄟ^鼠標(biāo)的點(diǎn)擊范圍來確定要響應(yīng)什么函數(shù),這就是這里面的秘密.在public void mouseClicked(MouseEvent arg0)函數(shù)里有下面這些if的判斷 if(x1 >= 404 && x1 <= 473 && y1 >= 74 && y1 <= 103)if(x1 >= 404 && x1 <= 473 && y1 >= 127 && y1 <= 155)if(x1 >= 404 && x1 <= 473 && y1 >= 179 && y1 <= 208)if(x1 >= 404 && x1 <= 473 && y1 >= 286 && y1 <= 316)if(x1 >= 404 && x1 <= 473 && y1 >= 338 && y1 <= 367)if(x1 >= 404 && x1 <= 473 && y1 >= 390 && y1 <= 419)這就是為了確定鼠標(biāo)的范圍,然后相對(duì)調(diào)用函數(shù)。 其他還有就是一些Debug處理,在程序已經(jīng)處理了,結(jié)果的還是蠻可以處理的,不過只能是人人對(duì)戰(zhàn)。 四、實(shí)驗(yàn)心得與小結(jié) 這次試驗(yàn)總的來說沒有想像中那么難,還有視屏的幫助,感覺起還是很容易動(dòng)手的,不過由于自己沒上心,沒有做比較大的改動(dòng),最主要的人機(jī)的對(duì)戰(zhàn)沒做出來是滿遺憾的,不過通過這個(gè)試驗(yàn),讓我學(xué)習(xí)了不少的知識(shí),比如雙緩沖,mouselistener 等許多許多的知識(shí),還有關(guān)于五子棋算法的設(shè)計(jì)也是一部分。不管怎么說還是有學(xué)到知識(shí)的,沒什么改動(dòng),但對(duì)現(xiàn)有的知識(shí)的掌握還是很可以的。 五、指導(dǎo)教師評(píng)議 成績?cè)u(píng)定: 指導(dǎo)教師簽名: java重要知識(shí)點(diǎn)總結(jié)如下: 1,抽象,封裝,繼承,多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)中得四個(gè)特點(diǎn).2,面向?qū)ο蟮密浖_發(fā)大體分為:面向?qū)ο蟮姆治?,面向?qū)ο蟮脑O(shè)計(jì),面向?qū)ο蟮膶?shí)現(xiàn).可概括為如下過程:分析用戶需求,從問題中抽取對(duì)象模型;細(xì)化模型,設(shè)計(jì)類,包括類的屬性和類間的 相互關(guān)系,同時(shí)觀察是否有可以直接引用的已有類或部件;選定一種面向?qū)ο蟮木幊陶Z言,具體編碼實(shí)現(xiàn) 上一階段類的設(shè)計(jì),并在開發(fā)過程中引入測試,完善整個(gè)解決方案.3,面向?qū)ο蟪绦蛟O(shè)計(jì)方法的優(yōu)點(diǎn)是:可重用性,可擴(kuò)展性,可管理性.4,類的定義:class前的修飾符分為訪問控制符和非訪問控制符兩大類.訪問控制符包括public和private.非訪問控制符包括abstract(抽象),final(最終).5,final類是最終類,是不能有子類的類.abstract和final不能同時(shí)修飾一個(gè)類,因?yàn)槌橄箢惐旧頉]有具體對(duì)象,需要派生出子類后在創(chuàng)建子類的對(duì)象.而最終類不可能有子類.6,創(chuàng)建對(duì)象的格式為: 類名 對(duì)象名=new 構(gòu)造方法(參數(shù));注意前面是類名后面是構(gòu)造方法.注意構(gòu)造方法沒有返回類型,也不能寫void,主要用于完成類對(duì)象的初始化工作,一般不能直接由編程 直接調(diào)用,而是用new運(yùn)算符來調(diào)用.7,如果class前面由public修飾符,則默認(rèn)構(gòu)造方法的前面也應(yīng)該有public修飾符.8,類中有static修飾的域或方法,可用類名或?qū)ο竺L問,否則只能用對(duì)象名訪問.9,修飾域的訪問控制符可以是:public,private,protected,private protected.非訪問控制符可以是: static,final,volatile(易失域) 10,類變量的最本質(zhì)的特點(diǎn)是:他們是類的域,不屬于任何一個(gè)類的具體對(duì)象實(shí)例.不是保存在某個(gè)對(duì)象實(shí)例的內(nèi)存空間中,而是保存在類的內(nèi)存區(qū)域的公共存儲(chǔ)單元中.11,局部變量是在方法體內(nèi)聲明的,只有當(dāng)方法被調(diào)用時(shí)他們才存在,因而只能在本方法內(nèi)使用,不存在訪問控制符,也不能聲明為靜態(tài)變量(static),但可以聲明為final變量.局部變量必須初始化.12,修飾方法的訪問控制符可以是:public,private,protected,private protected,修飾方法的非訪問控制符可以是:static,final,abstract,native(本地方法),synchronized(同步方法)。 13,用static修飾的變量或方法都為類成員,類成員可以用類名或?qū)嵗L問,實(shí)例成員只能用實(shí)例名來訪問。 14,如果一個(gè)類中含有抽象方法,則此類必須為抽象類,如果抽象類的子類不為抽象類,則子類必須實(shí)現(xiàn)父類的所有抽象方法。抽象方法不能用靜態(tài)方法和最終方法。抽想方法只有函數(shù)頭的聲明,而用分號(hào)來替代方法體,沒有大括號(hào)。如abstract void abstractmethod(); 15,this變量用在一個(gè)方法的內(nèi)部,指向當(dāng)前對(duì)象,當(dāng)前對(duì)象指的是調(diào)用當(dāng)前正在執(zhí)行的方法的那個(gè)對(duì)象。super變量是直接指向父類的構(gòu)造方法,用來引用父類種的變量和方法。(由于他們指的是對(duì)象,所以不能通過它來引用類變量和類方法) 16,如果要引用一個(gè)包中的多個(gè)類,可以用星號(hào)來代替。使用星號(hào)只能表示本層次的所有類,而不包括子層次下的類。所以經(jīng)常需要用兩條語句來引入兩個(gè)層次的類:import java.awt.*;import java.awt.event.*; 17,訪問修飾符: --類中限定為public的成員可以被所有的類訪問。 --類中先定位private的成員只能被這個(gè)類本身訪問。同一個(gè)類的不同對(duì)象可以訪問對(duì)方的private域變量或調(diào)用對(duì)方的域方法,這是因?yàn)樵L問保護(hù)控制在類的級(jí)別上,而不是對(duì)象的級(jí)別上。 --類中限定為protected的成員可以被這個(gè)類本身,它的子類(包括同一個(gè)包中和不同包中的子類),以及同一個(gè)包中的其他類訪問。 --用private protected修飾的成員可以被該類本身訪問,也可以被該類的所有子類訪問。 --默認(rèn)訪問控制符規(guī)定只能被同一個(gè)包中的類訪問和引用,而不能被其他包的類訪問。即他的訪問權(quán)限是friendly。 18,注意: ----abstract和private,static,final,native不能并列修飾同一個(gè)方法。 ----abstract類中不能有private修飾的域和方法 ----static方法不能處理非static的域。 19,重載方法的參數(shù)必須不同,或者是參數(shù)個(gè)數(shù)不同,或者是參數(shù)類型不同。重載的多個(gè)方法必須返回相同的數(shù)據(jù)類型。 20,在java中,一個(gè)類獲取某一接口定義的功能并不是通過直接繼承這個(gè)接口的屬性和方法來實(shí)現(xiàn)的。因?yàn)榻涌谥械膶傩远际浅A?,接口的方法都是沒有方法體的抽象方法,沒有具體定義操作。第四篇:Java五子棋實(shí)現(xiàn)報(bào)告
第五篇:java知識(shí)點(diǎn)小結(jié)