类与对象动手动脑
1.总结这个方法的与众不同
public Mytextclass(int initvalue)
{
value=initvalue;
}
(1) 方法名与类名相同
(2) 方法名的第一个字母大写了
2.为什么以下代码会出现错误,分析原因
public class Text {
public static void main(String[] args)
{
Foo obj1=new Foo();
}
}
class Foo
{
int value;
public Foo(int initvalue)
{
value=initvalue;
}
}
此代码出现错误的原因:如果类中提供了一个自定义的构造方法,将导致系统不再提供默认构造函数的方法。在类class中创建了一个含一个参数的构造函数,而在主函数中却调用了无参的构造函数。
3.
public class Text { public static void main(String[] args) { InitializeBlockClass obj=new InitializeBlockClass(); System.out.println(obj.filed); obj=new InitializeBlockClass(300); System.out.println(obj.filed); } } class InitializeBlockClass { { filed=200; } public int filed=100; public InitializeBlockClass(int value) { this.filed=value; } public InitializeBlockClass() { } }
实验截图
java进行初始化的地方有两个,初始化块和构造函数。其中初始化块分为静态初始化块和实例初始化块,静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句。如果在主函数中创建对象时没有形参时,如果在类中定义了公共的变量并给与了赋值,那么就会把值赋给主函数中的变量,再调用类中的默认构造函数,如果在主函数中创建对象时有形参,则调用类中对应的构造函数。
4.
public class TestStaticInitializeBlock { public static void main(String[] args) { new Leaf(); } } class Root { static{ System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参数的构造器"); } } class Mid extends Root { static{ System.out.println("Mid的静态初始化块"); } { System.out.println("Mid的普通初始化块"); } public Mid() { System.out.println("Mid的无参数的构造器"); } public Mid(String msg) { //通过this调用同一类中重载的构造器 this(); System.out.println("Mid的带参数构造器,其参数值:" + msg); } } class Leaf extends Mid { static{ System.out.println("Leaf的静态初始化块"); } { System.out.println("Leaf的普通初始化块"); } public Leaf() { //通过super调用父类中有一个字符串参数的构造器 super("Java初始化顺序演示"); System.out.println("执行Leaf的构造器"); } }
实验截图
总结“静态初始化块的执行顺序”:静态的初始化块都优先执行,其次才是非静态的初始化块和构造函数,它们的执行顺序是(1)父类的静态初始化块(2)子类的静态初始化块(3)父类的初始化块(4)父类的构造函数(5)子类的初始化块(6)子类的构造函数
5.在静态方法中访问类的实例首先进行类的实例化,在类的静态方法中可以直接访问类的静态变量
public class Exemple { int x=3;//类的实例变量初始化为3 static int y=4;//类的静态变量初始化为4 public static void main(String[] args) { Exemple.method(); Exemple ex=new Exemple(); System.out.println("x="+ex.x); } public static void method()//静态方法 { System.out.println("实例变量x="+new Exemple().x);//在静态方法中访问类的实例需首先进行类的实例化 System.out.println("静态变量y="+y);//在类的静态方法中可以直接访问类的静态变量 } }
实验截图
6.两个整数明明一样,为什么一个输出true,一个输出false?
public class text { public static void main(String[] args) { Integer i1=100; Integer j1=100; System.out.println(i1==j1); Integer i2=129; Integer j2=129; System.out.println(i2==j2); } }
输出结果表明i1和j1指的是同一个对象,而i2和j2指的是不同的对象。在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。