jAVA基础

JAVA的数组

声明: type var-name[];   var-name = new type[size];
      type[ ] var-name;  var-name = new type[size];
int month_days[] = new int[4];
int month_days[] = { 31, 28, 31, 30};
int twoD[][] = new int[4][];
twoD[0] = new int[5];
...
数组的声明需要使用new为其分配内存地址并把它赋值给数组变量名,使其成为实际的, 物理上存在的数组.

break/continue

代码块可以拥有名称
break lable;  可以结束任何代码块
标签label是标识代码块的标签。当这种形式的break执行时,控制被传递出指定的代码块。被加标签的代码块必须包围break语句,但是它不需要是直接的包围break的块代码块的名称实例: first: {} ,  outer: for(int i=0; i<3; i++) {}
​
非法的使用break
class BreakErr {
public static void main(String args[]) {
one: for(int i=0; i<3; i++) {
System.out.print("Pass " + i + ": ");
}
for(int j=0; j<100; j++) {
if(j == 10) break one; // WRONG
System.out.print(j + " ");
}
}
}
java的变量声明, 一定指明类型

声明类的实例时, 需要用 new 来创建类的实际物理拷贝
类的构造函数与类名相同, 可重载
定义在类中的变量被称为实例变量,这是因为类中的每个实例(也就是类的每个对象)都包含它自己对这些变量的拷贝。这样,一个对象的数据是独立的且是惟一的
static 用来显示的设置类属性和方法. 可以直接被类名访问,在实例化时不会被复制
一个变量可以声明为final,这样做的目的是阻止它的内容被修改。这意味着在声明final变量的时候,你必须初始化它(在这种用法上,final类似于C/C++中的const). final 变量名称大写

java访问修饰符, 限制属性, 方法的可访问范围

修饰符同一个类同一个包子类全局
Private
Default
Protected
Public
Private 类型只能在声明的类中访问
Protected 类型不能在其它的包下面被访问
Public 类型全局能访问
final修饰符 
final的意思是不可变,他可以修饰类、字段、方法。修饰类后类不能被扩展(extends),也就是不能被继承。修饰字段后字段的值不能被改变,因此如果有final修饰字段,应该对字段进行手动初始化。修饰方法后该方法不能被改变,也就是重写。
​
abstract修饰符 
abstract是抽象的意思,用来修饰类和方法,修饰类后,该类为抽象类,不能被实例化,必需进行扩展。修饰方法后,该方法为抽象方法必须被子类重写(override)。实例化一个抽象类是不可能的,但创建一个抽象类的引用是可行的
​
static修饰符 
static用来修饰内部类,方法,字段。修饰内部类说明该内部类属于外部类而不属于外部类的某个实例。修饰字段说明该字段属于类而不属于类实例。修饰方法说明该方法属于类而不属于类实例。
​
volatile修饰符
transient修饰符

嵌套类

在另一个类中定义的类就是嵌套类(nested classes).嵌套类的范围有装入它的类的范围限制. 如果类B被定义在类A之内, 那么B为A所知(能实例和调用), 然而不被A的外面所知. 嵌套类可以访问嵌套它的类的成员, 包括private成员, 但包围类不可以访问嵌套类的成员(与方法的作用域同).
嵌套类可在很多地方声明, 包括for 循环里

命令行参数

有时你想在运行程序时将信息传递到一个程序中。这通过将命令行参数(command-line arguments)传递给main()来实现。命令行参数是程序执行时在命令行中紧跟在程序名后的信息。在Java程序中访问命令行参数是相当容易的——它们作为字符串存储在传递给main()的String数组中
java demo this is a arguments test 100 -1

类继承

关键字声明: extends
每个子类只能继承一个超类, 构造函数以派生的次序调用,从超类到子类
变量的类型决定了它什么成员可以访问, 而不是它指向的对象决定
super关键字: super(parameter-list), 参数类型与数量决定了什么构造函数被调用.
超类的引用变量可以引用子类对象。Java用这一事实来解决在运行期间对重载方法的调用。过程如下:当一个重载方法通过超类引用被调用,Java根据当前被引用对象的类型来决定执行哪个版本的方法。如果引用的对象类型不同,就会调用一个重载方法的不同版本。换句话说,是被引用对象的类型(而不是引用变量的类型)决定执行哪个版本的重载方法。因此,如果超类包含一个被子类重载的方法,那么当通过超类引用变量引用不同对象类型时,就会执行该方法的不同版本,但只能访问超类定义过的属性和方法.
一:
BoxWeight(BoxWeight ob) { 
    // pass object to constructor
    super(ob);
    weight = ob.weight;
}
注意super( )被用一个BoxWeight类型而不是Box类型的对象调用。这仍然调用了构造函数Box(Box ob)。前面已经提醒过,一个超类变量可以引用作为任何一个从它派生的对象。因此,我们可以传递一个BoxWeight对象给Box构造函数。当然,Box只知道它自己成员的信息。
二:
    super.member来初始化属性. member既可以是1个方法也可以是1个实例变量。
Super的第2种形式多数是用于超类成员名被子类中同样的成员名隐藏的情况

接口(interface)

定义: 
access interface name {
    return-type method-name1(parameter-list);
    return-type method-name2(parameter-list);
    type final-varname1 = value;
    type final-varname2 = value;
    // ...
    return-type method-nameN(parameter-list);
    type final-varnameN = value;
}   
实现: 
access class classname [extends superclass]
    [implements interface [,interface...]] {
    // class-body
} 如果一个类包含一个接口但是不完全实现接口定义的方法,那么该类必须定义成abstract型。

 

异常捕获

try{} catch{} finally{}
​
throw
​
throws: 当前方法可能会抛出异常,但是不知道如何处理该异常,就将该异常交由调用这个方法的的上一级使用者处理,如果main方法也不知道如何处理这个异常的时候,就会交由JVM来处理这个异常,JVM的做法是:打印异常的跟踪栈消息,并终止程序。

 

线程 (Thread)

Thread类的方法
方法意义
getName获得线程名称
getPriority获得线程优先级
jsAlive判定线程是否仍在运行
join等待一个线程终止
run线程的入口点
sleep在一段时间内挂起线程
start通过调用运行方法来启动线程
currentThread获取当前线程

 

线程的优先级是用来决定何时从一个运行的线程切换到另一个: “上下文转换”(context switch)
· 线程可以自动放弃控制。在I/O未决定的情况下,睡眠或阻塞由明确的让步来完成。在这种假定下,所有其他的线程被检测,准备运行的最高优先级线程被授予CPU。
· 线程可以被高优先级的线程抢占。在这种情况下,低优先级线程不主动放弃,处理器只是被先占——无论它正在干什么——处理器被高优先级的线程占据。基本上,
一旦高优先级线程要运行,它就执行。这叫做有优先权的多任务处理

线程的实现

· 实现 Runnable 接口。
· 可以继承Thread类。
​
Runnable 接口: 在定义的类中实现 public viod run() 方法, 在类内部实例化一个Thread类的对象. Thread 类定义了好几种构造函数。我们会用到的如下: Thread(Runnable threadOb, String threadName) ->
class NewThread implements Runnable {
Thread t;
​
NewThread() {
    // Create a new, second thread
    t = new Thread(this, "Demo Thread");
    t.start(); // Start the thread
}
public void run(){}
}
继承Thread类: 创建一个新类来扩展Thread类,然后创建该类的实例。当一
个类继承Thread时,它必须重载run()方法,这个run()方法是新线程的入口。它也必须调用start()方法去启动新线程执行
NewThread() {
    // Create a new, second thread
    super("Demo Thread");
    start(); // Start the thread
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值