Java SE 学习笔记--Lesson 03

Java SE Lesson 3

 

1. 接口中所声明的方法都是抽象方法。接口中的方法都是public的。

 

2. 接口中也可以定义成员变量。接口中的成员变量都是publicfinalstatic的。

 

public interface InterfaceTest

{

       int a = 1;

}

 

3. 一个类不能既是final,又是abstract的。因为abstract的主要目的是定义一种约定,让子类去实现这种约定,而final表示该类不能被继承,这样abstract希望该类可以被继承而final明确说明该类不能被继承,两者矛盾。因此一个类不能既是final的,又是abstract的。

 

public abstract final Test//编译错误,一个类不能既是final,又是abstract

{

 

}

 

4. Design Pattern(设计模式)。单例模式(Singleton):表示一个类只会生成唯一的一个对象。

 

public class SingletonTest

{

       public static void main(String[] args)

       {

              Singleton singleton = Singleton.getInstance();

              Singleton singleton2 = Singleton.getInstance();

 

              System.out.println(singleton == singleton2);

       }

}

 

 

class Singleton

{

       private static Singleton singleton  = new Singleton();;

      

       private Singleton()

       {

             

       }

 

       public static Singleton getInstance()   //因为private,使用static让外部可以直接用类名调用

       {

              return singleton;

       }

 

 

}

 

5. 包(package)。用于将完成不同功能的类分门别类,放在不同的目录(包)下。包的命名规则:将公司域名反转作为包名。www.shengsiyuan.comcom.shengsiyuan(包名),对于包名:每个字母都需要小写。如果定义类的时候没有使用package,那么Java就认为我们所定义的类位于默认包里面(default package)。

 

package com.shengsiyuan;  //包名

 

public class PackageTest

{

       public static void main(String[] args)

              {

                     System.out.println(“hello word!”);

}

}

 

6. 编译带有package声明的Java源文件有两种方式:

a) 直接编译,然后根据类中所定义的包名,逐一手工建立目录结构,最后将生成的class文件放到该目录结构中(很少使用,比较麻烦)。

b) 使用编译参数–d,方式为javac d . 源文件.java这样在编译后,编译会自动帮助我们建立好包所对应的目录结构。

 

7. 有两个包名,分别是aa.bb.ccaa.bb.cc.dd,那么我们称后者为前者的子包。

 

 

8. 导入(import,将使用package分离的各个类导入回来,让编译器能够找到所需要的类。

 

9. import的语法import  com.shengsiyuan.PackageTest;

 

10. import com.shengsiyuan.*,表示导入com.shengsiyuan包下面的所有类。

 

11. import aa.bb.*并不会导入aa.bb.cc包下面的类。这时需要这样写:

import aa.bb.*;

import aa.bb.cc.*;

 

例:

Import com.shengsiyuan.test.*;

 

public class ImportTest

{

       public static void main(String[] args)

       {

              System.out.println(PackageTest.i);

       }

}

 

12. 关于packageimportclass的顺序问题:

a) 首先需要定义包(package),可选

b) 接下来使用import进行导入,可选

c) 然后才是classinterface的定义。

 

13. 如果两个类在同一个包下面,那么则不需要导入,直接使用即可。

 

 

14. 访问修饰符(access modifier)。

1 public(公共的):被public所修饰的属性和方法可以被所有类访问。

2 protected(受保护的):被protected所修饰的属性和方法可以在类内部、相同包以及该类的子类所访问。

3 private(私有的):被private所修饰的属性和方法只能在该类内部使用

4)默认的(不加任何访问修饰符):在类内部以及相同包下面的类所使用。

 

 

15.  instanceof:判断某个对象是否是某个类的实例。语法形式:引用名 instanceof 类名(接口名),返回一个boolean值。

 

public class InstanceofTest

{

       public static void main(String[] args)

       {

              People people = new Man();

 

              System.out.println(people instanceof People); //结果为true,因为ManPeople的子类,根据继承,子类就是父类,因此Man也可以看作是People的实例。

 

       }

}

 

class People

{

 

}

 

class Man extends People

{

 

}

 

 

16. People people = new Man();

 

17.  System.out.println(people instanceof People); //结果为true,因为ManPeople的子类,根据继承,子类就是父类,因此Man也可以看作是People的实例。

 

 

18. 相等性的比较(==

 

1)对于原生数据类型来说,比较的是左右两边的值是否相等。

2)对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同。

 

 

19.  java.lang.Object类。java.lang包在使用的时候无需显式导入,编译时由编译器自动帮助我们导入。

 

20. API Application Programming Interface),应用编程接口。

 

21. 当打印引用时,实际上会打印出引用所指对象的toString()方法的返回值,因为每个类都直接或间接地继承自Object,而Object类中定义了toString(),因此每个类都有toString()这个方法。

 

22. 关于进制的表示:16进制,逢16进一,16进制的数字包括:09A,B,C,D,E,F

 

public class ObjectTest

{

       public static void main(String[] args)

       {

              Object object = new Object();

 

              System.out.println(object);

              System.out.println(object.toString());

 

              String str = "aaa";

 

              System.out.println(str);

              System.out.println(str.toString());

 

              Student student = new Student();

 

              System.out.println(student);

              System.out.println(student.toString());

 

       }

}

 

class Student extends Object

{

       public String toString()

       {

              return "Hello World";

       }

}

 

 

 

 

23. equals()方法,该方法定义在Object类当中,因此Java中的每个类都具有该方法,对于Object类的equals()方法来说,它是判断调用equals()方法的引用与传进来的引用是否一致,即这两个引用是否指向的是同一个对象。对于Object类的equals()方法来说,它等价于==

 

24.对于String类的equals()方法来说,它是判断当前字符串与传进来的字符串的内容是否一致。

 

25. 对于String对象的相等性判断来说,请使用equals()方法,而不要使用==

 

public class StringTest

{

       public static void main(String[] args)

       {

              String str = new String("aa");

              String str2 = new String("aa");

 

              System.out.println(str.equals(str2));

 

              String str3 = "aa";

              String str4 = "aa";

 

              System.out.println(str3.equals(str4));

 

              System.out.println("-----------------");

 

              Object object = new Object();

              Object object2 = new Object();

 

              System.out.println(object.equals(object2));

              System.out.println(object.equals(object));

 

              System.out.println("-----------------");

 

 

       }

}

 

 

 

­

 

public class EqualsTest

{

       public static void main(String[] args)

       {

              Student s1 = new Student("zhangsan");

              Student s2 = new Student("zhangsan");

 

              System.out.println(s1 == s2);

              System.out.println(s1.equals(s2));             

       }

}

 

class Student

{

       String name;

 

       public Student(String name)

       {

              this.name = name;

       }

      

       public boolean equals(Object anObject)

       {

              if(this == anObject)

              {

                     return true;

              }

 

              if(anObject instanceof Student)

              {

                     Student student = (Student)anObject;

                    

                     if(student.name.equals(this.name))

                     {

                            return true;

                     }

              }

 

              return false;

       }

 

}

 

 

26. String是常量,其对象一旦创建完毕就无法改变。当使用+拼接字符串时,会生成新的String对象,而不是向原有的String对象追加内容。

 

public class StringTest2

{

       public static void main(String[] args)

       {

              String s1 = "hello";

              String s2 = " world";

              String s3 = s1 + s2;

 

              System.out.println(s3);

       }

}

 

 

27. String Pool(字符串池)

 

28. String s = aaa;(采用字面值方式赋值)

1) 查找String Pool中是否存在“aaa”这个对象,如果不存在,则在String Pool中创建一个“aaa”对象,然后将String Pool中的这个“aaa”对象的地址返回来,赋给引用变量s,这样s会指向String Pool中的这个“aaa”字符串对象

2) 如果存在,则不创建任何对象,直接将String Pool中的这个“aaa”对象地址返回来,赋给s引用。

 

 

29. String s = new String(“aaa”);

1) 首先在String Pool中查找有没有“aaa”这个字符串对象,如果有,则不在String Pool中再去创建“aaa”这个对象了,直接在堆中(heap)中创建一个“aaa”字符串对象,然后将堆中的这个“aaa”对象的地址返回来,赋给s引用,导致s指向了堆中创建的这个“aaa”字符串对象。

 

2) 如果没有,则首先在String Pool中创建一个“aaa“对象,然后再在堆中(heap)创建一个”aaa“对象,然后将堆中的这个”aaa“对象的地址返回来,赋给s引用,导致s指向了堆中所创建的这个”aaa“对象。

 

public class ObjectTest2

{

       public static void main(String[] args)

       {

              Object object = new Object();

              Object object2 = new Object();

 

              System.out.println(object == object2);//false

 

              System.out.println("----------------");

 

 

              String str = new String("aaa");

              String str2 = new String("aaa");

 

              System.out.println(str == str2);//false

 

              System.out.println("----------------");

 

              String str3 = "bbb";

              String str4 = "bbb";

 

              System.out.println(str3 == str4);//true

             

              System.out.println("----------------");

 

              String str5 = new String("ccc");

              String str6 = "ccc";

 

              System.out.println(str5 == str6);//lse

 

              System.out.println("----------------");

 

              String s = "hello";

              String s1 = "hel";

              String s2 = "lo";

 

              System.out.println(s == s1 + s2);//lse

 

              System.out.println("----------------");

 

              System.out.println(s == "hel" + "lo");//true

 

 

       }

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值