??xml version="1.0" encoding="utf-8" standalone="yes"?>国产剧情在线观看,香蕉久久夜色精品国产更新时间,heyzo中文字幕在线 http://www.aygfsteel.com/lcgg110/java zh-cn Tue, 17 Jun 2025 06:23:18 GMT Tue, 17 Jun 2025 06:23:18 GMT 60 java---final 关键??static 用法 http://www.aygfsteel.com/lcgg110/archive/2008/07/02/212072.html 凡 凡 Wed, 02 Jul 2008 02:27:00 GMT http://www.aygfsteel.com/lcgg110/archive/2008/07/02/212072.html http://www.aygfsteel.com/lcgg110/comments/212072.html http://www.aygfsteel.com/lcgg110/archive/2008/07/02/212072.html#Feedback 0 http://www.aygfsteel.com/lcgg110/comments/commentRss/212072.html http://www.aygfsteel.com/lcgg110/services/trackbacks/212072.html final 关键??static 用法
一、final
ҎE序上下文环境,Java关键 字final?#8220;q是无法改变?#8221;或?#8220;l态的”含义Q它可以修饰非抽象类、非抽象cL?nobr oncontextmenu="return false;" onmousemove="kwM(3);" id="key2" onmouseover="kwE(event,3, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">Ҏ和变量。你可能Z两种理解而需要阻止改变:设计或效率?/p>
finalcM能被l承Q没有子c,finalcM的方法默认是final的?
finalҎ不能被子cȝҎ覆盖Q但可以被ѝ?
final成员变量表示帔RQ只能被赋gơ,赋值后g再改变?
final不能用于修饰构造方法?
注意Q父cȝprivate成员Ҏ是不能被子类Ҏ覆盖的,因此privatecd的方法默认是finalcd的?
1、finalc?/strong>
finalcM能被l承Q因此finalcȝ成员Ҏ没有Z被覆盖,默认都是final的。在设计cL候,如果q个cM需要有子类Q类的实?
l节 不允许改变,q且信q个cM会蝲被扩展,那么p计ؓfinalcR?
2、finalҎ
如果一个类不允许其子类覆盖某个ҎQ则可以把这个方法声明ؓfinalҎ?
使用finalҎ的原因有二:
W一、把Ҏ锁定Q防止Q何承类修改它的意义和实现?
W二、高效。编译器在遇到调用finalҎ时候会转入内嵌机制Q大大提高执行效率?
例如Q?
public class Test1 {
public static void main(String[] args) {
// TODO 自动生成Ҏ存根
}
public void f1() {
System.out.println("f1");
}
//无法被子c覆盖的Ҏ
public final void f2() {
System.out.println("f2");
}
public void f3() {
System.out.println("f3");
}
private void f4() {
System.out.println("f4");
}
}
public class Test2 extends Test1 {
public void f1(){
System.out.println("Test1父类Ҏf1被覆?");
}
public static void main(String[] args) {
Test2 t=new Test2();
t.f1();
t.f2(); //调用从父cȝ承过来的finalҎ
t.f3(); //调用从父cȝ承过来的Ҏ
//t.f4(); //调用p|Q无法从父类l承获得
}
}
3、final变量Q常量)
用final修饰的成员变量表C常量,g旦给定就无法改变Q?
final修饰的变量有三种Q静态变量、实例变量和局部变量,分别表示三种cd的常量?
从下面的例子中可以看出,一旦给final变量初值后Q值就不能再改变了?
另外Qfinal变量定义的时候,可以先声明,而不l初|q中变量也称为finalI白Q无Z么情况,~译器都保I白final在用之前必被初始化。但是,finalI白在final关键字final的用上提供了更大的灉|性,为此Q一个类中的final数据 成员可以实C对象而有所不同Q却有保持其恒定不变的特征?/p>
package org.leizhimin;
public class Test3 {
private final String S="final实例变量S";
private final int A=100;
public final int B=90;
public static final int C=80;
private static final int D=70;
public final int E; //finalI白,必须在初始化对象的时候赋初?
public Test3(int x){
E=x;
}
/**
* @param args
*/
public static void main(String[] args) {
Test3 t=new Test3(2);
//t.A=101; //出错,final变量的g旦给定就无法改变
//t.B=91; //出错,final变量的g旦给定就无法改变
//t.C=81; //出错,final变量的g旦给定就无法改变
//t.D=71; //出错,final变量的g旦给定就无法改变
System.out.println(t.A);
System.out.println(t.B);
System.out.println(t.C); //不推荐用对象方式讉K静态字D?
System.out.println(t.D); //不推荐用对象方式讉K静态字D?
System.out.println(Test3.C);
System.out.println(Test3.D);
//System.out.println(Test3.E); //出错,因ؓE为finalI白,依据不同对象值有所不同.
System.out.println(t.E);
Test3 t1=new Test3(3);
System.out.println(t1.E); //finalI白变量E依据对象的不同而不?
}
private void test(){
System.out.println(new Test3(1).A);
System.out.println(Test3.C);
System.out.println(Test3.D);
}
public void test2(){
final int a; //finalI白,在需要的时候才赋?
final int b=4; //局部常?-final用于局部变量的情Ş
final int c; //finalI白,一直没有给赋?
a=3;
//a=4; 出错,已经l赋qg.
//b=2; 出错,已经l赋qg.
}
}
4、final参数
?nobr oncontextmenu="return false;" onmousemove="kwM(6);" id="key5" onmouseover="kwE(event,6, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">函数参数为finalcdӞ你可以读取用该参数Q但是无法改变该参数的倹{?/p>
public class Test4 {
public static void main(String[] args) {
new Test4().f1(2);
}
public void f1(final int i){
//i++; //i是finalcd?g允许改变?
System.out.print(i);
}
}
二、static
static表示“全局”或?#8220;静?#8221;的意思,用来修饰成员变量和成员方法,也可以Ş成静态static代码块,但是Java语言中没有全局变量的概c?br />
被static修饰的成员变量和成员Ҏ独立于该cȝM对象。也是_它不依赖cȝ定的实例Q被cȝ所有实例共享。只要这个类被加载, Java虚拟机就能根据类名在q行时数据区的方法区内定扑ֈ他们。因此,static对象可以在它的Q何对象创Z前访问,无需引用M对象?
用public修饰的static成员变量和成员方法本质是全局变量和全局ҎQ当声明它类的对象市Q不生成static变量的副本,而是cȝ所有实例共享同一个static变量?
static 变量前可以有private修饰Q表C个变量可以在cȝ静态代码块中,或者类的其他静态成员方法中使用Q当然也可以在非静态成员方法中使用--废话Q,但是不能在其他类中通过cd来直接引用,q一点很重要。实际上你需要搞明白Qprivate是访问权限限定,static表示不要实例化就可以使用Q这样就Ҏ理解多了。static前面加上其它讉K权限关键字的效果也以此类推?
static修饰的成员变量和成员Ҏ习惯上称为静态变量和静态方法,可以直接通过cd来访问,讉K语法为:
cd.静态方法名(参数列表...)
cd.静态变量名
用static修饰的代码块表示静态代码块Q当Java虚拟机(JVMQ加载类Ӟ׃执行该代码块Q用处非常大Q呵呵)?
1、static变量
按照是否静态的对类成员变量q行分类可分两种Q一U是被static修饰的变量,叫静态变量或cd量;另一U是没有被static修饰的变量,叫实例变量。两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存Q,JVM只ؓ静态分配一ơ内存,在加载类的过E中完成静态变量的内存分配Q可用类名直接访问(方便Q,当然也可以通过对象来访问(但是q是不推荐的Q?
对于实例变量Q没创徏一个实例,׃为实例变量分配一ơ内存,实例变量可以在内存中有多个拷贝,互不影响Q灵z)?
2、静态方?/strong>
静态方法可以直接通过cd调用QQ何的实例也都可以调用Q因此静态方法中不能用this和super关键字,不能直接讉K所属类的实例变量和实例Ҏ(是不带static的成员变量和成员成员Ҏ)Q只能访问所属类的静态成员变量和成员Ҏ。因为实例成员与特定的对象关联!q个需要去理解Q想明白其中的道理,不是记忆Q!Q?
因ؓstaticҎ独立于Q何实例,因此staticҎ必须被实玎ͼ而不能是抽象的abstract?
3、static代码?/strong>
static 代码块也叫静态代码块Q是在类中独立于cL员的static语句块,可以有多个,位置可以随便放,它不在Q何的Ҏ体内QJVM加蝲cL会执行这些静态的代码块,如果static代码块有多个QJVM按照它们在cM出现的先后顺序依ơ执行它们,每个代码块只会被执行一ơ。例如:
public class Test5 {
private static int a;
private int b;
static{
Test5.a=3;
System.out.println(a);
Test5 t=new Test5();
t.f();
t.b=1000;
System.out.println(t.b);
}
static{
Test5.a=4;
System.out.println(a);
}
public static void main(String[] args) {
// TODO 自动生成Ҏ存根
}
static{
Test5.a=5;
System.out.println(a);
}
public void f(){
System.out.println("hhahhahah");
}
}
q行l果Q?
3
hhahhahah
1000
4
5
利用静态代码块可以对一些static变量q行赋|最后再看一D些例子,都一个static的mainҎQ这样JVM在运行mainҎ的时候可以直接调用而不用创建实例?
4、static和final一块用表示什?/strong>
static final用来修饰成员变量和成员方法,可简单理解ؓ“全局帔R”Q?
对于变量Q表CZ旦给值就不可修改Qƈ且通过cd可以讉K?
对于ҎQ表CZ可覆盖,q且可以通过cd直接讉K?br />
http://www.aygfsteel.com/hongzionline/archive/2007/09/19/146392.html
]]>
Java中参C递是传D是传址Q? http://www.aygfsteel.com/lcgg110/archive/2008/06/27/211118.html 凡 凡 Fri, 27 Jun 2008 05:55:00 GMT http://www.aygfsteel.com/lcgg110/archive/2008/06/27/211118.html http://www.aygfsteel.com/lcgg110/comments/211118.html http://www.aygfsteel.com/lcgg110/archive/2008/06/27/211118.html#Feedback 0 http://www.aygfsteel.com/lcgg110/comments/commentRss/211118.html http://www.aygfsteel.com/lcgg110/services/trackbacks/211118.html 什么是g?什么是引用传?
g递是要传递的gZ副本传??
int i=4;
int j=i;
q里相当于把14复制了一个副本给j,l果是i=4,j=4
引用传?传递的是引用对象的内存地址
int *p,*p1;
int j=5; *p=j; //q里是把j在内存当中的地址赋给了指针p
p1=p; //q里是把指针p中保存的地址(是j的地址)赋给了指针p1
j=4; //q里改变j的?输出l果?j=4 , *p=4 , *p1=4 //因ؓp和p1指向的都是j 所以他们的值随j值改?
(以上说明和代码来自http://zhidao.baidu.com/question/31191252.html)
Java中函数参数的传递是g递还是引用传递?
Java中参C递时传递到函数中的参数都是原变量的一份拷贝,对于非类cd如intQfloat{,q䆾拯自然和原变量q了关p,q不隄解;
而对于类的实例而言Q这份拷贝恰巧是实例引用的拷贝,它(参数Q指向的实例地址和原实例引用指向的实例地址都是一LQ因此对参数的修Ҏ时也会媄响到实例本nQ故此造成了Java传递类实例是传递的引用卛_址的假象,如下面例子中的changeMemberField函数Q但是我们把参数指向的地址改到别的实例上时Q如changeMember函数Q我们会发现参数和原实例引用再也不会发生关系了,q里证明Java中参C递是完完全全是传D不是传址?
例子代码Q?br />
代码Q?br />
package com.sitinspring;
public class ChangeClass{
public void changeInt( int i){
i = 5 ;
}
public void changeLong( long i){
i = 555 ;
}
public void changeString(String str){
str = " 5555 " ;
}
public void changeMember(Member member){
member = new Member( " Cindy " , 35 );
}
public void changeMemberField(Member member){
member.setAge( 20 );
member.setName( " Andy " );
}
public static void main(String[] args){
ChangeClass changeClass = new ChangeClass();
int intValue = 10 ;
changeClass.changeInt(intValue);
System.out.println(intValue);
long longValue = 10 ;
changeClass.changeLong(longValue);
System.out.println(longValue);
String stringValue = " 1234 " ;
changeClass.changeString(stringValue);
System.out.println(stringValue);
Member member2 = new Member( " Douglas " , 45 );
changeClass.changeMember(member2);
System.out.println(member2);
Member member = new Member( " Bill " , 25 );
changeClass.changeMemberField(member);
System.out.println(member);
}
}
package com.sitinspring;
public class Member{
private String name;
private int age;
public Member(String name, int age){
this .age = age;
this .name = name;
}
public String toString(){
return " Member name= " + name + " age= " + age;
}
public int getAge() {
return age;
}
public void setAge( int age) {
this .age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
}
输出 Q?br />
10
10
1234
Member name= Douglas age = 45
Member name= Andy age = 20
解释 Q?br />
W一个输?0是因为int是基本类?传递的参数是intValue的拷?Ҏ贝的修改对原值intValue没有影响.
W一个输?0和上面是一个道?
W三个输?234.׃String是类cd, str是stringValue的地址拯,参数str指向的地址和stringValue的一?但在函数changeString ?׃String的特D? str=“5555”和str=new String(“5555”)是等L, str指向了新?#8221;5555”所在的地址,此句后str׃原来的stringValuedq了联p?
W四个输出Member?name=Douglas?age=45的道理和上面相同.
W五个输出Member?name=Andy?age=20是因为changeMemberField函数中修改了参数member 的?也就是修改member指向实例的?而这个实例正是member指向的?因此member变成了name=Andy 且age=20.
l论
Java中参C递的都是?对应基本cd,传递的是原值的拯;对于cȝ?传递的是引用即地址的拷?
对于函数对参数的改变是否会媄响原值的问题:值类型自然不会媄响到原?而对于类cd要看改变的是参数的地址q是?如果是前?参数和原引用指向了不同的地址,它们自然q了关p?如果是后?修改的实例就是原引用指向的实?q当然对原D行了修改.
代码下蝲 Q?br />
http://www.aygfsteel.com/Files/sitinspring/PassValueOrReference20080116142420.rar
]]>http://www.aygfsteel.com/hadeslee 学习 http://www.aygfsteel.com/lcgg110/archive/2008/06/19/209230.html 凡 凡 Thu, 19 Jun 2008 10:29:00 GMT http://www.aygfsteel.com/lcgg110/archive/2008/06/19/209230.html http://www.aygfsteel.com/lcgg110/comments/209230.html http://www.aygfsteel.com/lcgg110/archive/2008/06/19/209230.html#Feedback 0 http://www.aygfsteel.com/lcgg110/comments/commentRss/209230.html http://www.aygfsteel.com/lcgg110/services/trackbacks/209230.html ]]>可以学习学习 http://www.aygfsteel.com/lcgg110/archive/2008/06/17/alexarchive.html 凡 凡 Tue, 17 Jun 2008 07:12:00 GMT http://www.aygfsteel.com/lcgg110/archive/2008/06/17/alexarchive.html http://www.aygfsteel.com/lcgg110/comments/208630.html http://www.aygfsteel.com/lcgg110/archive/2008/06/17/alexarchive.html#Feedback 0 http://www.aygfsteel.com/lcgg110/comments/commentRss/208630.html http://www.aygfsteel.com/lcgg110/services/trackbacks/208630.html
]]>
վ֩ģ壺
ƽ |
ɽ |
Ϫ |
|
|
|
Ž |
е |
|
|
|
|
ɽ |
ɽ |
|
|
|
|
ƽ |
̩ |
ʼ |
բ |
|
躣 |
dz |
|
|
ɽ |
|
¦ |
|
|
|
|
|
ƽ |
|
Ѯ |
|
ɽ |
㶫ʡ |