码迷,mamicode.com
首页 > 编程语言 > 详细

Java笔记

时间:2015-08-30 23:23:15      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:interface   abstract   continue   private   package   

与C++不同,Java不支持多重继承。即Java一个类只能有一个直接父类。

1.关键字

  访问修饰关键字:public protected private

  类、方法、变量修饰关键字:class interface implement extends  abstract static new

  流控制关键字:if-else switch-case-default for while do-while break continue return instanceof

  异常处理关键字:try-catch-catch-finally throw throws assert

  包控制关键字:import(将包导入到程序中) package(用于定义包,并将类定义到包中)

  数据类型关键字:boolean char byte short int long flort double

  特殊类型和方法关键字:super(用于引用父类) this(用于引用当前对象)


2.一些与C++不太相同的定义

定义一个常量 final double PI=3.14;

字符串相加   string s="lg"+"lk"; s=s+30; //字符可以与数字相加

<< 左移运算符

>> 右移运算符(如果为负数,最高位填充1)

>>> 无符号右移运算符(最高位始终填充0)


3.{} 块控制符号,决定了变量的使用范围

4.数组

Java的数组是一种特殊的对象

声明数组:int array[];或 int[] array;//但是没有分配内存还不能使用

array=new int[5];//为数组分配内存

int[] array={1,2,3,4};//直接初始化


string[]用于接收命令行参数: public static void main(String args[])

数组的拷贝属于浅拷贝: int a[]={1,2,3};int[] b={4,5,6}; a=b;//则a,b指向同一个内存空间{4,5,6} ;可以使用system.arraycopy()进行数组的深度拷贝

Java中的多维数组又一维数组组成,所以支持不规则数组。

int[][]twod=new int[4][];

twod[0]=new int[1];

twod[1]=new int[4];

twod[2]=new int[5];

twod[3]=new int[7];

for-each语句: int[] intarray={1,2,3};for(int i:intarray){...}


5.java函数的入参是引用的浅拷贝(入参没有深度拷贝)。


6.Java的包

包通过目录树来管理源代码,使得当前.Java源代码文件位于哪一个层级下。


7.继承

与C++不同,Java中默认变量和函数的属性是包内继承访问为public,包外继承访问为private(C++默认为private)

与C++不同,Java中重载、覆盖、多态的实现中,子类和父类都不需要任何关键字(C++实现多态需要virtual)

final class CM{...}  :指明该类不能被再被继承

final void func(..){} :指明子类中不能再复写基类中声明为final的函数

final int var; :指明该变量为常量


8.abstract类和abstract方法(除了方法没有实现外,没有其它特殊的用途)

类中没有实现的方法必须声明为abstract方法,含有abstract方法的类必须声明为abstract类

继承abstract类的子类一定要实现所有的abstract方法,否则该子类也应该声明为abstract类

abstract类中可以包含已经实现的函数。


9.Object类

Object类是所有类的基类,如果Java中某一个类没有继承任何类,那么它默认继承了Object类。

于是Object类可以存储任何类的引用。

Object obj=new Fish();

((Fish)obj).eat(); //类型提升


object类中实现了boolean equals(Object obj){return this==obj}方法,判断2个引用的是否指向同一个对象。该方法可以重载

if (obj instanceof Fish){...} 判断Object指针是否保存的是Fish类型的对象


10.Interface(纯抽象类)

与C++不同,Java不支持多重继承。即Java一个类只能有一个直接父类。所有JAVA解决复杂问题显得力不从心。Interface类可以解决这个多重继承问题。

一个类可以继承多个接口,继承了接口的类必须实现接口中的所有方法。

*Interface中可以声明变量,但被自动设置为public static final属性

*Interface中的方法全部是abstract的

*Interface修饰符可以没有货为public。“没有”表明该接口只能在该报中使用;public表明任何类都可以使用该接口。

*不能有构造函数


public interface animal{

int bit_type=5; //==public static final int bit_type=5;

void sleep();  

void eat();  //== abstract void eat();

}


接口的实现:

class 类名 implements 接口1,接口2{

方法1(){..}

方法2(){..}

}


11.内部类

*内部类定义在一个类的内部,只能被宿主类使用。于是可以很好的控制类的可见性。

*内部类分为2中:静态内部类和非静态内部类。非静态内部类可以访问宿主类的所有变量和方法;静态内部类中不能直接问宿主成员,可以隔离宿主类(如果在内部类中需要可以构造宿主对象访问)

*局部内部类:定义在方法中的类。

*匿名内部类



12.对象克隆(深度复制)

*Java色深度复制可以继承接口Clonable,并实现 public Object clone(){}方法,在该方法中可以调用object类的super.clone()实现。

super.clone()也只能复制当前继承关系类中的基本类型的变量,对当前类中的组合形式的复制对象(自定义类然后再该类中实例化的对象)也只是浅复制(复制引用,因为组合对象在该类中保存的就是引用)


13.异常

Java中所有的异常都是内置类Throwable的子类,所以Throwable在异常类型层次结构的顶部。Throwable有2个子类,形成了2个不同的分支Exception和Error。


try{

class.forname("");

}catch(ClassNotFoundException e){

system.out.println("将异常再次抛出");

throw e;

}finally{

close...

}


14.thread

(1)创建线程的方法

Java中有2中方法创建线程:一种是对Thread类进行派生并覆盖run方法;一种是通过实现runnable接口创建。

第一种:继承Thread类创建线程

Thread类的run方法是空的,直接创建thread对象不能完成任何事,所以必须继承Thread类并重写run方法。

class Threaddemo extends Thread{

Threaddemo(){}

Threaddemo(string szname){

super(szname);

}

public void run()//重载run方法

{

  while(true)

{...}

}

public static void main(string argc[])

{

 Threaddemo td1=new Threaddemo();

 td1.start();

Threaddemo td2=new Threaddemo();

 td2.start();

}

}


第二种:Runnable接口创建线程


class Threaddemo implements Runnable{

 public void run()//重载run方法

{

  while(true)

   {...}

}

public static void main(string argc[])

{

Runnable rb1=new Threaddemo();

 Thread td1=new Thread(rb1);

 td1.start();

Runnable rb2=new Threaddemo();

 Thread td2=new Thread(rb2);

 td2.start();

}

}

(2)线程周期控制:

Thread类封装了对线程周期的控制函数

.start()   启动一个线程

.stop() 结束一个线程

.sleep(long) 暂停long-ms

.suspend() 挂起执行

.resume() 恢复执行

.yield() 明确放弃执行

.wait() 进入阻塞状态

.notify() 使一个线程阻塞状态解除


.isAlive() 判断线程是否结束,非阻塞

.join() 等待线程结束,阻塞



(3)线程调度

.setPriority() 设置优先级

.getPriority 获取优先级


(4)线程同步-同步代码块synchornized

当把一个语句块声明为synchornized,所有的线程将互斥访问该代码块。

有2中形式:

声明一个函数为需要互斥的函数

public synchornized funcname(){...} //则run中调用该函数将是互斥的

声明一个代码块或变量需要互斥

synchornized(obj){...} obj可以写任意对象,可以用this代替都行,把需要互斥的代码写在{}中


(5)线程通信

Java中的线程通信通过wait() notify() notifyall()等完成,可以解决生产者/消费者模型

Java笔记

标签:interface   abstract   continue   private   package   

原文地址:http://a1liujin.blog.51cto.com/5519498/1689965

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!