ITform java应该注意的问题

来源:互联网 发布:知悉还是悉知 编辑:程序博客网 时间:2024/05/21 10:26

目录

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    mainnew B()时,A先加载,A的构造方法中调用printFields(),调用了子类的printFields()方法(父类调用子类方法),System.out.println 执行,输出int 类型的xy,此时由于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


0 0
原创粉丝点击