Java基础(备忘录)

一、

1.成员函数被重载的特征:

(1)相同的范围(在同一个类中)

(2)函数名相同

(3)参数不同

(4)virtual关键字可有可无

2.覆盖的特征:

(1)不同的范围(分别位于派生类与基类)

(2)函数名相同

(3)参数相同

(4)基类函数必须有virtual关键字

3.静态方法不能被覆盖成非静态的方法

 

二、

class Parent {
    public static String staticname = "parentStaticname";
    public String name = "Parent";
    public String getName(){
    return name;
    }
}

class Child extends Parent {
    public static String staticname = "childStaticname";
    public String name = "child";
    public String getName(){
    return name;
    }
    public String getchildName(){
    return name;
    }
}


public class Test {
    public static void main(String[] args) {
    Parent parent;
    Child child;
    child = new Child();
    parent = (Child)child;

    System.out.println(child.getClass());
    System.out.println(child.name);
    System.out.println(child.getName());

    System.out.println(parent.getClass());
    System.out.println(parent.name);
    System.out.println(parent.getName());

    System.out.println(child.staticname);
    System.out.println(parent.staticname);

    }
}

 

运行结果:

class qg.java.Child
child
child
class qg.java.Child
Parent
child
childStaticname
parentStaticname

 

 

三、

1.匿名内部类是没有名字的内部类,不能继承其它类,但可以作为一个接口,由另一个内部类实现

2.final类是不可以被继承,不可以子类化,没有更多的限制,所有方法都默认为final,为方法添加final没有意义

3.抽象类是可以声明,但不可以实例化;

4.被abstract修饰的方法为抽象方法,抽象方法是不可以有实体的;

5.抽象类中可以有非抽象的方法,非抽象的方法是必须有实体的;

6.抽象类中如果全是抽象方法,就变成了接口

7.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

8 .接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

9.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
10.接口中的方法默认都是 public,abstract 类型的。

 

四、

定义在类中的变量会被赋予一个默认的值

下面代码是正确的:

public class Pvf {

       static boolean Paddy;

 

       public static void main(String argv[]) {

               System.out.println(Paddy);

       }

}

输出结果是:false

 

如果Paddy没有static修饰,则编译出错。

 

 

五、

1.String 与 char 之间的转换

String s = "hello";

char c[] = {'h','e','l','l','o'};

// String 转换成char

char ch[] = s.toCharArray();

// char 转换为string

String str = new String(c);

 

2.StringBuffer跟String

(1)String的创建

String str = "Hello";

JVM先根据内容"Hello"查找对象,如果没有找到,则在堆(heap)上创建新对象,并赋予str,否则使用已经存在的对象

 

String s = new String("Hello");

JVM直接在heap上创建新的对象,所以在heap中会出现内容相同,地址不同的String对象

 

(2)String的比较

”==“比较的是地址

”equal“比较的是内容

 

(3)intern()方法:查找内容相同的字符串

String s1 = "Hello";// 创建对象(1)

String s2 = new String("Hello");  // 将pool中的”Hello“对象复制一份放到heap中,再赋给s2

s2 = s2.intern(); // 找到对象(1),并赋给s2

s1 == s2;  // true 此时s1,s2同指对象(1)

 

3.String与StringBuffer效率比较

String s = "s1";

s += "s2";

s += "s3";

因为String是不可变对象,每次”+=“操作都会构造新的String对象

 

String str = "hello" + "world";  // 只创建一个String对象

 

StringBuffer内部实现是char数组,默认初始化长度是16,每当字符串长度大于char数组长度时,JVM会构造更大的新数字,并将原先的数组内容复制到新数组。

 

4.下面代码创建了几个对象?

String A,B,C;

A = "a";  // 1个(1)

B = "b";  // 1个

A = A + B;  // (1)成为垃圾,被回收    1个  ”ab“

StringBuffer D = new StringBuffer("abc");  // 2个  "abc"和”abc“的复制

D = D.append("567");  // 1个  ”567“  StringBuffer的特点是改变对象本身而不是创建新的对象,append是对同一个对象进行处理

 

 

 

 

 

 

你可能感兴趣的:(Java基础)