Java关键字fymd_Java关键字和基础问题

1. Java关键字

1.1 extends和implements

extends继承普通class或abstract(抽象)类(java单继承)

implements多继承能力,实现interface(接口)。 注: abstract implements interface

1.2 interface

1)实现多重继承, public interface Tinterface

2)方法都是public(可不写,默认),只需定义返回值和名字,不能有实现

3)属性默认是public static final(可不写,默认)

1.3 abstract

1)修饰class,可无抽象方法。public abstract class AbstractList

2)修饰方法,public abstract void sleep(); //子类中必须实现

1.4 final

1)属性/func参数--值不可改变

a)final int i=100 , i值不能改变

b)final File f=new File("c:\\test.txt"); //f不能重新赋值,但f.xx可以

2)方法--子类不得覆盖重写该方法,确保在继承中使方法行为保持不变

3)class--表明不打算继承该类,而且也不允许别人继承。 fianl class Art {}

1.5 static

不需new对象即可调用到 静态方法/变量

1)static方法--> public static void print()

2)static变量--> 静态变量为所有对象共享,内存中只一个副本,当且仅当类第一次加载时被初始化一次

3)static代码块--> 可任何位置,形成静态代码块优化性能,类初次加载时会按照顺序执行static代码块,且只执行一次

private static Date startDate,endDate;

static{

startDate = Date.valueOf("1946");

endDate = Date.valueOf("1964");

}

1.6 this/super

1)this 指当前对象自己 (可用于返回对象自己)

2)super指代父类。a)super() 调用父类中的初始化方法 b)super.ss() 调用父类中方法/属性

1.7 instanceOf**

1) p instanceof Student

1.8 泛型

1)泛型必须是对象,不能是简单类型(int float)

2)类型参数可以多个, //仍保持单继承的规则

3)限制类型,可使用extends, 如

4)通配符?表示未知类型, 处理定义List, 但是传入list时编译报错的情况(因类型擦除)。

5)类型擦除:使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。这个过程就称为类型擦除。类型擦除的过程,首先是找到用来替换类型参数的具体类。这个具体类一般是Object。如果指定了类型参数的上界的话,则使用这个上界。把代码中的类型参数都替换成具体的类。同时去掉出现的类型声明,即去掉<>的内容。比如: T get()方法声明就变成了Object get(); List就变成了List。 接下来就可能需要生成一些桥接方法(bridge method)。这是由于擦除了类型之后的类可能缺少某些必须的方法

//示例1

public class ObjectFoo

{

private T x;

public ObjectFoo(T x)

{

this.x = x;

}

public T getX()

{

return x;

}

public void setX(T x)

{

this.x = x;

}

}

ObjectFoo in = new ObjectFoo(123); System.out.println(in.getX());

ObjectFoo str = new ObjectFoo("asdasd"); System.out.println(str.getX());

//示例2

public void inspect(List list)

{

for (Object obj : list)

{

System.out.println(obj);

}

list.add(1); //这个操作在当前方法的上下文是合法的。

}

public void test()

{

List strs = new ArrayList();

inspect(strs); //编译错误, 如果不报错的话会导致往list中添加了一个int

}

1.9 synchronized同步锁

1)所有对象自动含有单一的锁,当在对上调用其任一synchronized时,对象都被锁住。

2)当任务要执行被synchronized关键字保护的代码片段的时候,它将首先检查锁是否可用,然后获取锁,执行代码,释放锁。

3)对象里所有的synchronized方法共享一把锁

4)在并发时,将域设置成private很重要,否则synchronized关键字就不能防止其他任务直接访问域

5)用于static方法时,所有对象共享同一把锁

//用于代码块--优先

public void println(String x) {

synchronized (this) {

print(x);

newLine();

}

//用于方法

public synchronized boolean add(E e) {}

1.10 finally

try{}catch(){} finally{//此处代码总会执行}

1.11 transient

0)变量将不被序列化,即反序列化后无值。(transient Object[] elementData)。transient只可修饰对象属性(不能func/class/局部变量)

1)serilization--序列化,将对象转成字节(供存储或网络发送)。deserilization-反序列化,将字节重建成对象。(类似js的stringfy和parseJson,两个独立的对象)

2)将需要序列化的类实现Serializable接口就可以

1.12 threadLocal

1、用于线程集的全局变量(当前线程共享), private static ThreadLocal seqNum = new ThreadLocal()

seqNum.set(1); seqNum.get();

2、单的static是所有线程共享的全局变量

1.13 enum枚举类型

Color xx = Color.RED;

switch (xx)

{

case RED:

System.out.println(xx.getValue());

break;

default:

break;

}

public class EnumTest

{

public static enum Color

{

//enum可给定值

RED("AA"), YELLOW("ff");

private String name;

private Color(String namein)

{

this.name = namein;

}

public String getValue()

{

return name;

}

}

}

1.14 Java数组

String[] cArray = new String[]{"a","b","c","d","e"};

1.15 构造函数

public class LiftOff implements Runnable {

private int index ;

LiftOff(int xx) {

this.index = xx;

}

}

1.16 Date-格式化

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E").format(new Date())

//数字转日期,注意月从0开始

new GregorianCalendar(2017, 9, 26, 11, 54, 06);

1.17 Base64编解码-64个可见字母

final Base64.Decoder decoder = Base64.getDecoder();

final Base64.Encoder encoder = Base64.getEncoder();

final String text = "字串文字";

final byte[] textByte = text.getBytes("UTF-8");

//编码

final String encodedText = encoder.encodeToString(textByte);

System.out.println(encodedText);

//解码

System.out.println(new String(decoder.decode(encodedText), StandardCharsets.UTF_8));

1.17 MD5加密-512分组,结果16字节长

MessageDigest md5=MessageDigest.getInstance("MD5");

Base64.getEncoder().encodeToString(md5.digest(str.getBytes("utf-8")));

在其他语言中,\\ 表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。

在 Java 中,\\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。

a). \\\\表示一个普通的反斜杠

9. Java系统参数

获取 System.getProperty / System.getProperties

key

描述

file.separator

java.class.path

java.home

java.vendor

java.vendor.url

java.version

line.separator

os.arch

os.name

os.version

path.separator

user.dir

执行java命令的目录

user.home

user.name

10. Java其它

10.1 java配置

1)安装,jdk和jre需安装到不同目录(F:\program\java8\jdk1.8.0_102\) //java -version有值则安装成功

2)环境变量-->系统变量-->新建JAVA_HOME,值F:\program\java8\jdk1.8.0_102(jdk的安装路径)//windows环境变量key不区分大小写

-->系统变量-->Path中添加 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

-->系统变量-->CLASSPATH(无则新建)中添加 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

-->若成功,则javac有输出值

3) 注:若javac还是无法执行,检查bin目录下是否有javac.exe,否则重装

10.2 重写equals方法

//同时必须重写hashCode方法,以维护相等的对象具有相等的hash码(不重写无效)

@Override

public boolean equals(Object obj)

{

if (this == obj)

{

return true;

}

Student xx = (Student)obj; //类型转换

return this.firstName.equals(xx.firstName);

}

@Override

public int hashCode()

{

return this.getFirstName().hashCode();

}

10.3 调用其它可执行文件-exe

Runtime.getRuntime().exec("C:\\Program Files\\Notepad++\\notepad++.exe 12344"); //参数使用空格传递即可

//等待exe执行完成

Process p = runtime.exec("asdasd");

p.waitFor();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值