目录
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