ITform java应该注意的问题

目录

1.getClass 的应用,

2.关于怎么画类图,非常详细实用

3 字符串中含有汉字,求字符串长度时,汉字跟英文字符等同

4.体现多态性的地方, 函数为静态函数时,要根据引用声明的时候的类型,不是对象的实际类型

5,构造函数调用其他函数,实现的多态性。。(不同于C++)

6 类中的静态模块,只加载一次,不论有多少个实例

7,关于抽象类和接口

7,要正确的理解抽象类和接口

抽象类:

(1)抽象类,一个类中,即使所有的方法都实现了,只要在类的前边加上abstract,,它依然是抽象类;就是说,只要有abstract,即使一个抽象方法没有也是可以的。即,抽象类中可以含有非抽象方法,且可以不含有任何抽象方法。

(2)抽象类如果含有抽象的变量或值,则它们要么是null类型,要么包含了对非抽象类的实例的引用。

(3)抽象类不能同时又是final的。如果一个非抽象类从抽象类继承而来,则其必须通过覆盖实现所有继承的抽象成员。如果没有实现全部的,则它自己必须定义成抽象类。

(4)任何含有一个或者多个抽象方法的类都必须声明成抽象类。但是不能定义抽象构造函数和抽象静态方法。

接口:

(1)接口的访问修饰符要么是public(如果接口本身定义成public,则所有方法和变量都是public),要么是默认的。与抽象类不同,接口中的方法都是没有方法体的,参数表后面就是分号作为结束符,它们本质上都是抽象方法。

(2)与抽象类相同的是,如果一个类实现接口,若它实现了接口中定义的全部方法,则它可以是非抽象类(不是必须);但是,如果它没有实现全部方法,则它必须是一个抽象类。

(3)其实接口没有能力代替多重继承,也没有这个义务;接口的作用,就是标志类的类别。把不同类型的类归于不同的接口,可以更好的管理它们。使用接口,可以指定一个类必须做什么,而不是规定他如何去做。

(4)接口中可以声明变量,它们一般都是final和static的,还必须以常量值初始化。

(5)类继承类,用extends;接口继承接口,也是用extends;如果是类实现接口,用implements;

类的声明用class, 接口的声明用 interface。类只能继承自一个父类,但是它可以实现多个接口。

1.getClass 的应用,

class A{}class B extends A{}public class cvte1 { public static void main(String args[]) {A a1=new A();B b1=new B();A a2=b1;System.out.print(a2.getClass().getName());System.out.print(b1.getClass().getName()); }}

输出结果:BB

2.关于怎么画类图,非常详细实用

UML类图几种关系的总结 – OPEN 开发经验库(复制网址时,前面加http:)[//www.open-open.com/lib/view/open1328059700311.html】

3 字符串中含有汉字,求字符串长度时,汉字跟英文字符等同

java中char类型是两个字节,

public class cvte4 {public static void main(String args[]){String ss="北京欢饮你welc";System.out.println(ss.length());}}

输出结果为 9

4.

体现多态性的地方, 函数为静态函数时,要根据引用声明的时候的类型,不是对象的实际类型

class AA{public void M(){System.out.println("A");}}class BB extends AA{public void M(){System.out.println("B");}}class CC extends BB{public static void M2(){System.out.println("C");}}class DD extends CC{public static void M2(){System.out.println("D");}}public class methodm {public static void main(String args[]){DD d=new DD();CC c=d;BB b=c;AA a=b;d.M2();c.M2();b.M();a.M();}}

输出结果为:DCBB

5,构造函数调用其他函数,实现的多态性。。(不同于C++)

class MYA{public MYA(){PrintField();}public void PrintField(){System.out.println("A");}}class MYB extends MYA{int x=1;int y;public MYB(){y=-1;}public void PrintField(){System.out.println("x="+x+"y="+y);}}public class MYconstructor {public static void main(String args[]){MYB b=new MYB();}}

x=0,y=0 main中new B()时,A先加载,A的构造方法中调用printFields(),调用了子类的printFields()方法(父类调用子类方法),System.out.println执行,输出int类型的x、y,此时由于B类构造方法还没执行,x也还没有被赋值,就输出了int类型的默认值0.(这和在C++中是不同的,在构造函数中,C++无法实现多态性了)

6 类中的静态模块,只加载一次,不论有多少个实例

class A1{static int a=0;static{a++;}A1(){a++;}}public class Mystatic { public static void main(String args[]){A1 aa1=new A1();A1 aa2=new A1();System.out.println(A1.a); }}

结果为3

只要有信心,人永远不会挫败

ITform java应该注意的问题

相关文章:

你感兴趣的文章:

标签云: