这个学期开的安卓课 所以还是自学了java
下面是自己的总结 基本是和自己以前学过的语言做比较 (c c++)
System.out.println("hello wolrd");输出
int a=System.in.read(); 输入
数组的表示
int []num={1,2,3,4,5};
int []x=new int[100];
int []x=new int[]{1,2,3,4,5};
int[] a;
a=new int[5]; //正确,同(2)一样
int []x=new int[5]{1,2,3,4,5};//错误,如果提供了数组初始化操作,则不能定义维表达式 貌似c#可以
int[5];不能指定长度 编译时会出错 c、c++ 可以定义
*****java也可以 int abc[]=new int[5]; 于c c++类似 ******
String 字符串类
比较的eg.
String str1=new String("abc");
str1.equals(str2); //c++ ansi strcmp unicode wcscmp
*********面向对象************
有构造函数 无返回(带形参) 支持重载
没有析构函数 finalize()类似
System.gc 通知他垃圾回收
规定 只能有一个public 去修饰
也是有static
内部类
1:类包含的一个类
2:外部应用内部类
Outer outer=new Outer();
OutClass.NeiClass inner=outer.new NeiClass(); 同时可以嵌套类
同时也支持“单”继承
用法 class Student extends Person
只支持单继承
当子类实例的时候,在子类构造的函数 应该用super关键字
public Student()
{
super(x,y);
}
*如果有this(x,y)调用 则调用相应的重载构造方法
子类和父类之间的同名函数 、java是直接覆盖 (c++是加关键字 virtual )
也可以
--子类
fun(){
xxx
super.FuFun();
}
----------
final关键字可以修饰类,属性和方法时
final标记的类不能被继承
final标记的方法不能被子类重写
final标记的变量()既成为产量 只能赋值一次(要么在定义 要么在构造函数中)
抽象类
abstract 只要有一个方法是抽象的 这个类必须是抽象类
抽象类不能被实例化
父类只需声明 无需实现
子类去实现 覆盖父类的方法才能被实例化 否则子类都是抽象类
interface A
{
}
用extends 关键字去继承已有的接口
用implements 关键字实现一个接口的所以方法,我们还需要去定义一个抽象类用
implements关键字去实现一个接口中定义的部分方法
try
catch
***线程***
java运行至少两个线程 一个是main 一个是垃圾回收
java实现多线程有两种手段 第一是继承Thread类 第二是实现Runnable接口
eg1. MyThread t=new MyThread(); t.start(); 继承 覆盖run方法 实现线程
eg2. MyRunnable run=new MyRunnable(); new Thread(run); 一样覆盖run方法
1: 只要有一个前台线程在运行 程序还是不会退出(经过main函数执行结束)
2: 创建后台线程 new thread().setDeamon(true); new thread().start();
3: 合并加入线程 th.join(); 执行之后合并到主线程中了 使用try th.join(); catch
关于java的线程同步
String str= new String("");
run
synchronised(str)
{
保护同步
}
也可以用在函数定义上 public synchronised void sale();
1.5新特征
import static java.lan.Max.* 静态导入 可以省略类名 调用 比如abs(x,x)
可变参数
int add(int x,int ...args)
{
int sum=x;
for(int i=0;i<args.length;i++)
sum+=args[i];
}