Java学习记录

2015年6月5日(第一章)

1.面向对象相对于面向过程编程更简单,可以增加代码的复用,面向对象并没有减少实现过程,只是将过程包装成了方法.

2.构造方法的重载在于可以为其输入变量,不同种变量可以用不同的方法重载.

	Circle c1 = new Circle(5);//最后的Circle即为构造方法

3.this是一个对象,可以在类里面引用类的成员变量和方法.

4.static关键字,可以允许变量不实例化修改,只存一份,每个对象的static变量都相同,节约空间.

2015年6月8日

1.package的作用是防止java类重名,导致调用出错.约定俗成的规则是域名倒写(如com.baidu.www)

2015年7月21日

1.不同的项目需要不同的classpath,以避免包的冲突问题.

2.使用jar -cvf .jar *.可以打包class文件,便于引用.

3.java只支持单继承(C++允许多继承).

4.继承的子类大于等于父类(子类含有父类方法等).

5.继承所有的变量,但是不能修改只能访问.(protected,public)

-------------------------------------------------
|   修饰符  | 类内部 | 同一个包  | 子类 | 任何地方 |
-------------------------------------------------
|  private  |  Yes  |          |      |         |
-------------------------------------------------
|  default  |  Yes  |    Yes   |      |         |
-------------------------------------------------
| protected |  Yes  |    Yes   |  Yes |         |
-------------------------------------------------
|   public  |  Yes  |    Yes   |  Yes |   Yes   |
-------------------------------------------------

6.super引用指向当前对象的父类,this引用指向对象自身.

7.子类构造过程中必须调用父类的构造方法.super的调用必须是构造函数的第一个语句.

2015年7月22日

1.lang中的equals当且仅当指向同一对象,才返回true.但是各个包可能会重写equals.

2.动态绑定(多态)是面向对象的核心,执行期间判断所引用对象的实际类型,根据其实际类型调用其相应的方法.

3.抽象方法用于被重写,方法是抽象的则类也是抽象的,无法被实例化,用于继承.

4.final关键字,不能重写,不能继承.

5.interface属于特殊的抽象类,只包含常量和方法的定义,无实现.接口之间可以相互继承.

2015年7月23日

1.多维数组相当于其低维数组的数组.

2015年10月15日

1.容器是装其它东西的器皿(数组),装其它各种对象.

        Collection(interface)                                         Map(interface)
         |                 |                                                 |
    Set(interface)  List(interface)                                          |  
         |            |        |                                             |
      HashSet     LinkedList  ArrayList                                   HashMap 

2.装在Set中无顺序不可重复,List中有顺序可重复,Map中两两存取.(重复是指两个对象互相equals)

3.Collection中装的(add,remove)必须是对象.

4.容器类对象在调用remove,contains等方法时需要比较对象是否相等,会涉及到对象类型的equals方法和hashCode方法,相等的对象具有相等的hashCode.

5.Iterator为容器的迭代器,用于实现对容器内元素的遍历操作.

6.hashSet无顺序,所以经过iterator迭代后输出顺序不定

2015年10月16日

1.List中元素都对应一个整数型序号记载在其容器的位置,可以根据序号存取容器元素(像数组),List的长度可以根据需要改变.

2.Array读快改慢,Linkded改快读慢,Hash在两者之间.

3.Map接口实现类有HashMap和TreeMap,用来存储Key-Value对,通过Key来标示,不能重复.

4.自动打包:自动将基础类型转换为对象.自动解包:自动将对象转换为基础类型.

5.泛型Generic,创建按类型进行参数化的类,避免类型转换.

6.通过流(Stream)的方式读取数据.

7.system.in接受键盘输入.

2015年10月17日

1.线程是一个程序内部的顺序控制流.

2.创建线程的方法:1)定义线程类实现Runnable接口.2)定义Thread的子类并重写其run方法.一般用第一种,便与实现多重继承.

3.sleep线程睡眠,join线程合并,yield线程让出.

4.TestSync运行若未加锁可能出现冲突,sleep时间越长可能性越大.

2015年10月18日

1.wait()和sleep()的区别: 1)wait属于object类的方法,sleep属于Thread类. 2)wait需要用notify或者notifyAll来唤醒,sleep时间过后自动唤醒. 3)wait后不再拥有锁,sleep仍保持锁.

2.网络通信协议:计算机网络中实现通信必须有一些约定即通信协议,对码率,传输代码,代码结构.传输控制步骤.出错控制等制定标准.

3.端口号来区分数据传输到目标电脑的应用程序接受位置.

2015年11月15日

1.当有指定构造方法,无论它是有参还是无参的构造方法,则系统都不会自动添加无参的构造方法.

2.Java 中被 static 修饰的成员称为静态成员或类成员.它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享.使用 static 可以修饰变量、方法和代码块.

3.静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员.(如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量.)

public class HelloWorld{
	String name = "爱慕课";
	static String hobby = "imooc";
	public static void main(String[] args){
		System.out.println(name);//不能直接调用非静态成员变量
		System.out.println(hobby);//可以直接调用静态成员变量
	}
}

4.在普通成员方法中,则可以直接访问同类的非静态变量和静态变量.

5.静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。

public class HelloWorld {

    String name; // 声明变量name
	String sex; // 声明变量sex
	static int age;// 声明静态变量age
    
    // 构造方法
	public HelloWorld() { 
		System.out.println("通过构造方法初始化name");
		name = "tom";
	}
    
    // 初始化块
	{ 
		System.out.println("通过初始化块初始化sex");
		sex = "男";
	}
    
    // 静态初始化块
    static{ 
		System.out.println("通过静态初始化块初始化age");
		age = 20;
	}
    
	public void show() {
		System.out.println("姓名:" + name + ",性别:" + sex + ",年龄:" + age);
	}
    
	public static void main(String[] args) {
	
	// 创建对象
		HelloWorld hello = new HelloWorld();
		// 调用对象的show方法
	hello.show();
	HelloWorld hello2 = new HelloWorld();
	}
}

6.内部类的主要作用如下: 1)内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2)内部类的方法可以直接访问外部类的所有数据,包括私有的数据 3)内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便

7.外部类不能直接使用内部类的成员和方法,需要使用外部类对象来创建内部类对象,然后通过内部类的对象来访问其成员变量和方法.

内部类 内部对象名 = 外部类对象名.new 内部类构造方法

8.如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字.

9.静态内部类的特点: 1)静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 2)如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员 3)创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();