琐碎知识点总结

编程入门 行业动态 更新时间:2024-10-27 22:25:12

琐碎<a href=https://www.elefans.com/category/jswz/34/1770093.html style=知识点总结"/>

琐碎知识点总结

1.要想使用增强for 循环,要实现Iterable接口,重写iterrator()方法。这个接口的内部实质上有iterator()方法,返回一个Iterator对象。

2.匿名内部类不能访问外部类方法中的局部变量,除非该变量被声明为final类型

  1. 这里所说的“匿名内部类”主要是指在其外部类的成员方法内定义的同时完成实例化的类,若其访问该成员方法中的局部变量,局部变量必须要被final修饰。原因是编译器实现上的困难:内部类对象的生命周期很有可能会超过局部变量的生命周期
  2. 局部变量的生命周期:当该方法被调用时,该方法中的局部变量在栈中被创建,当方法调用结束时,退栈,这些局部变量全部死亡。而内部类对象生命周期与其它类对象一样:自创建一个匿名内部类对象,系统为该对象分配内存,直到没有引用变量指向分配给该对象的内存,它才有可能会死亡(被JVM垃圾回收)。所以完全可能出现的一种情况是:成员方法已调用结束,局部变量已死亡,但匿名内部类的对象仍然活着。
  3. 如果匿名内部类的对象访问了同一个方法中的局部变量,就要求只要匿名内部类对象还活着,那么栈中的那些它要所访问的局部变量就不能“死亡”。
  4. 解决方法:匿名内部类对象可以访问同一个方法中被定义为final类型的局部变量。定义为final后,编译器会把匿名内部类对象要访问的所有final类型局部变量,都拷贝一份作为该对象的成员变量。这样,即使栈中局部变量已经死亡,匿名内部类对象照样可以拿到该局部变量的值,因为它自己拷贝了一份,且与原局部变量的值始终保持一致(final类型不可变)。
  最后,Java 8更加智能:如果局部变量被匿名内部类访问,那么该局部变量相当于自动使用了final修饰

package knowledgepoint;public class FinalDEmol {public static void main(String[] args) {for(int i =0;i < 5 ;i++) {//num始终指向一个i,只要final修饰的变量始终指向一个就可final int num = i;//此处的可行性System.out.println(num);}}
}
package knowledgepoint;public class OutterAndInnear {public static void main(String[] args) {Outter.Innear in = new Outter().new Innear();in.in();Outter out = new Outter();out.test();/*Outter.Innear in =new Outter.Innear();in.in1();Outter.Innear.in();*/}
}
class Outter{private String name = "outter";static int age = 18; public void test() {new Innear().in();System.out.println(new Innear().name);System.out.println("********************");System.out.println("外部类中的非静态方法");}public static void test1() {System.out.println("外部类中的静态成员");}//非静态内部类类似成员方法class Innear{private String name = "Innear";/* static int a = 5;非静态内部类中不能有静态方法和属性public static void in() {}*/public void in() {System.out.println(Outter.age);System.out.println(Outter.this.name);}}}
/*class Outter{private String name = "outter";static int age = 18; public void test() {System.out.println("外部类中的非静态方法");}public static void test1() {System.out.println("外部类中的静态成员");//外部类中可访问静态内部类静态成员System.out.println(Innear.a);Innear.in();System.out.println(new Innear().name);//外部类可访问静态内部类私有方法及属性new Innear().in1();}//静态内部类相当于外部类的静态方法,不过它可有成员变量和方法static class Innear{private String name = "Innear";//静态内部类的成员变量static int a = 5;public static void in() {System.out.println("静态内部类的静态方法");}public void in1() {System.out.println("静态内部类的成员方法");System.out.println(Outter.age);//System.out.println(Outter.this.name);//静态内部类中不能访问外部类的成员方法及实例//Outter.this.test();Outter.test1();}}}
*/
package knowledgepoint;
//Integer中的注意点
public class IntegerDemol {public static void main(String[] args) {Integer d = 1234;//falseInteger d1 = 1234;System.out.println(d == d1);System.out.println(d.equals(d1));Integer d2 = 100;Integer d3 = 100;System.out.println(d2 == d3);//trueSystem.out.println(d2.equals(d3));//结论:【-128 - 127】之间的数仍当成基本数据类型看待}
}
public class TypeChange {public static void main(String[] args) {B b1,b2 = new B();A a1,a2;a1 = (A)b2;a2 = b2;/*a1.ma();a2.ma();*/System.out.println(a1.s);System.out.println(a2.s);b1 = (B)a1;System.out.println(b1.s);}
}class A{String s = "class:A";public void ma() {System.out.println("ma");}
}
class B extends A{String s = "class:B";public void ma() {System.out.println("mb");}
}/*public class TypeChange{
public String color;
public TypeChange(){
this.color="green";
System.out.println(this);
}
//在这里删掉父类的printColor方法public void printColor(){
System.out.println(color);
}
public static void main(String args[]){Child child = new Child();System.out.println(child);TypeChange typeChange = (TypeChange)child;System.out.println(typeChange);System.out.println(typeChange.color);
}
}
class Child extends TypeChange{
//我们在这里删掉color属性
public String color;
public Child(){System.out.println("sss");System.out.println(this);System.out.println("ass");
}
public void printColor(){
System.out.println(color);
}
}//详情见:.html*/

 

更多推荐

琐碎知识点总结

本文发布于:2024-02-26 07:16:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1701712.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:知识点   琐碎

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!