标签: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()等完成,可以解决生产者/消费者模型
标签:interface abstract continue private package
原文地址:http://a1liujin.blog.51cto.com/5519498/1689965