文章会有【原创】或者【转载】标示,部分来自Google Baidu的学习结果 {Java/PHP/Python/Ruby/Go}

Java 在学习三十六【原创】  


1:在一个类文件中,导入包、类和打包顺序;

package/import/class

2Java的注解

@Override 当我们想要复写父类中的方法时,我们需要使用该注解去告知编译器我们想要复写这个方法。这样一来当父类中的方法移除或者发生更改时编译器将提示错误信息。

@Deprecated 当我们希望编译器知道某一方法不建议使用时,我们应该使用这个注解。Javajavadoc 中推荐使用该注解,我们应该提供为什么该方法不推荐使用以及替代的方法。

@SuppressWarnings 这个仅仅是告诉编译器忽略特定的警告信息,例如在泛型中使用原生数据类型。它的保留策略是SOURCE(译者注:在源文件中有效)并且被编译器丢弃。

@SafeVarargs 修饰”堆污染”警告

@FunctionalInterface Java8特有的函数式接口

3:异常:

error jvm

exception 程序抛出异常

以上两个的父类 Throwable java.lang.Throwable


4

类的定义修饰符:public default abstract final

访问修饰符:public private protected default

继承和实现:extends implements


类别关键字说明
访问控制private私有的
protected受保护的
public公共的
类、方法和变量修饰符abstract声明抽象
class
extends扩允,继承
final最终值,不可改变的
implements实现(接口)
interface接口
native本地,原生方法(非Java实现)
new新,创建
static静态
strictfp严格,精准
synchronized线程,同步
transient短暂
volatile易失
程序控制语句break跳出循环
case定义一个值以供switch选择
continue继续
default默认
do运行
else否则
for循环
if如果
instanceof实例
return返回
switch根据值选择执行
while循环
错误处理assert断言表达式是否为真
catch捕捉异常
finally有没有异常都执行
throw抛出一个异常对象
throws声明一个异常可能被抛出
try捕获异常
包相关import引入
package
基本类型boolean布尔型
byte字节型
char字符型
double双精度浮点
float单精度浮点
int整型
long长整型
short短整型
null
变量引用super父类,超类
this本类
void无返回值
保留关键字goto是关键字,但不能使用

volatile、synchronized 多线程安全:

package coreJava;


public class Test18 {


public static void main(String[] args) {

for (int i = 0; i < 100; i++) {

try {

MyThread my = new MyThread();

my.start();

Thread.sleep(3);

my.join();

} catch (Exception e) {

e.printStackTrace();

}

}

}


}


class MyThread extends Thread {


public static volatile int stat = 0;


@Override

public void run() {

for (int i = 0; i < 10; i++) {

try {

stat += 1;

//Thread.sleep(3);

System.out.println(Thread.currentThread().getName() + "---" + stat);

} catch (Exception e) {

e.printStackTrace();

}

}

}

}






package coreJava;


public class Test19 {


public static void main(String[] args) {

for (int i = 0; i < 100; i++) {

try {

MyThread1 my = new MyThread1();

my.start();

Thread.sleep(3);

my.join();

} catch (Exception e) {

e.printStackTrace();

}

}

}


}


class MyThread1 extends Thread {


public static int stat = 0;


@Override

public synchronized void run() {

for (int i = 0; i < 10; i++) {

try {

stat += 1;

Thread.sleep(3);

System.out.println(Thread.currentThread().getName() + "---" + stat);

} catch (Exception e) {

e.printStackTrace();

}

}

}

}




package coreJava;


public class Test20 extends Thread {

public static volatile int n = 0;  


public void run() {

for (int i = 0; i < 10; i++)

try {

n = n + 1;

Thread.sleep(3);

} catch (Exception e) {

e.printStackTrace();

}

}

    

public static void main(String[] args) throws Exception {


Thread threads[] = new Thread[100];

for (int i = 0; i < threads.length; i++)

// 建立100个线程

threads[i] = new Test20();

for (int i = 0; i < threads.length; i++)

// 运行刚才建立的100个线程

threads[i].start();

for (int i = 0; i < threads.length; i++)

// 100个线程都执行完后继续

threads[i].join();

System.out.println("n=" + Test20.n);

}

n=995