您的位置:首页 > 编程语言 > Java开发

ITform java应该注意的问题

2014-06-11 20:00 267 查看
目录

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: