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<E>
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)类型参数可以多个,<T extends SomeClass & interface1 & interface2 & interface3> //仍保持单继承的规则
3)限制类型,可使用extends, 如<T extends superclass>
4)通配符?表示未知类型, 处理定义List<Object>, 但是传入list<String>时编译报错的情况(因类型擦除)。
5)类型擦除:使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。这个过程就称为类型擦除。类型擦除的过程,首先是找到用来替换类型参数的具体类。这个具体类一般是Object。如果指定了类型参数的上界的话,则使用这个上界。把代码中的类型参数都替换成具体的类。同时去掉出现的类型声明,即去掉<>的内容。比如: T get()方法声明就变成了Object get(); List<String>就变成了List。 接下来就可能需要生成一些桥接方法(bridge method)。这是由于擦除了类型之后的类可能缺少某些必须的方法
//示例1
public class ObjectFoo<T>
{
private T x;
public ObjectFoo(T x)
{
this.x = x;
}
public T getX()
{
return x;
}
public void setX(T x)
{
this.x = x;
}
}
ObjectFoo<Integer> in = new ObjectFoo<Integer>(123); System.out.println(in.getX());
ObjectFoo<String> str = new ObjectFoo<String>("asdasd"); System.out.println(str.getX());
//示例2
public void inspect(List<Object> list)
{
for (Object obj : list)
{
System.out.println(obj);
}
list.add(1); //这个操作在当前方法的上下文是合法的。
}
public void test()
{
List<String> strs = new ArrayList<String>();
inspect(strs); //编译错误, 如果不报错的话会导致往list<String>中添加了一个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<Integer> seqNum = new ThreadLocal<Integer>()
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")));
1.30 Java正则表达式
在其他语言中,\\ 表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。
在 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();
Java关键字和基础问题的更多相关文章
- Java多线程系列--“基础篇”04之 synchronized关键字
概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchro ...
- Java语言基础(二) Java关键字
Java语言基础(二) Java关键字 Java关键字比较多,我就不列举出来了,只记录一些常用的小知识点: ①Java的关键字只有小写. ②then.sizeof都不是Java的关键字,熟悉C++的程 ...
- JAVA核心技术I---JAVA基础知识(static关键字)
一:static特殊关键字用处 –变量 –方法 –类 –匿名方法 二:静态变量:类共有成员 –static变量只依赖于类存在(通过类即可访问),不依赖于对象实例存在. –所有的对象实例,对于静态变量都 ...
- 2.0JAVA基础复习——JAVA语言的基础组成关键字和标识符
JAVA语言的基础组成有: 1.关键字:被赋予特殊含义的单词. 2.标识符:用来标识的符号. 3.注释:用来注释说明程序的文字. 4.常量和变量:内存存储区域的表示. 5.运算符:程序中用来运算的符号 ...
- Java关键字以及一些基础解释
Java Se:Java Me 和Java Ee的基础,允许开发和部署在桌面,服务器,嵌入式环境和实时环境中使用的java程序,支持java web服务开发类 java ee:是目前java技术应用最 ...
- java学习笔记(基础篇)--java关键字与数据类型
java关键字与数据类型 Java语言的关键字是程序代码中的特殊字符.包括: . 类和接口的声明--class, extends, implements, interface . 包引入和包声明--i ...
- ②java基础——标识符、关键字和基础数据类型
Java标识符: 1.由英文字母.数字._(下划线)和$组成,长度不限.其中英文字母包含大写字母(A~Z)和小写字母(a~z),数字包含0到9 2.标识符的第一个字符不能是数字(即标识符不能以数字开头 ...
- Java多线程系列--“基础篇”11之 生产消费者问题
概要 本章,会对“生产/消费者问题”进行讨论.涉及到的内容包括:1. 生产/消费者模型2. 生产/消费者实现 转载请注明出处:http://www.cnblogs.com/skywang12345/p ...
- Java多线程系列--“基础篇”05之 线程等待与唤醒
概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long t ...
随机推荐
- Windows部署jenkins服务器
本次使用的操作系统: windows server 2012 r2vs版本: vs 2015jenkins: 2.19.4 一.下载jenkins http://mirror.xmission.com ...
- javaScript之深度理解原型链
经过多次的翻阅书籍终于对原型链在实际代码中的应用有了新的认识,但是不知道是否有错误的地方,还请大神多多指教. 构造函数.原型和实例的关系:每个构造函数都有一个原型对象funName.prototype ...
- !important定义为最高级不可替代
<!DOCTYPE html> /*!important定义为最高级不可替代*/ <html lang="en"> <head> <met ...
- centos7 安装mysql 5.7多实例
一. Mysql多实例即一台服务器上运行多个Mysql服务进程 ,开启不同的服务端口,通过不同的socket 监听不同的服务端口来提供各自的服务. 二. Mysql多例有以下几个特点: 1. 有效利 ...
- Redux API之compose
compose(...functions) 从右到左来组合多个函数. 这是函数式编程中的方法,为了方便,被放到了 Redux 里. 当需要把多个 store 增强器 依次执行的时候,需要用到它. 参数 ...
- js页面跳转常用的几种方式(转)
js页面跳转常用的几种方式 转载 2010-11-25 作者: 我要评论 js实现页面跳转的几种方式,需要的朋友可以参考下. 第一种: 复制代码代码如下: <script langu ...
- css中的定位属性position(转)
css中的定位属性position 同样的也是上课的时候发现学生难以理解的一些问题拿出来记录一下,希望帮助初学者. 在css中定位属性position的运用在页面中是很常用的,特别是一些结合js来 ...
- 6、perl创建模块(Exporter)及路径 引用 嵌套 查询模块
参考博客:http://www.cnblogs.com/xudongliang/tag/perl/ 1.perl 模块的创建以及制定perl 模块的路径 (1)创建一个Myfun.pm模块. #/us ...
- Django 的认证系统
Django自带的用户认证 auth 模块 from django.contrib import autu django.contrib.auth 中提供了许多方法, 这里主要介绍其中三个: auth ...
- Django 之装饰器实现登录认证
def check_login(func): # 自定义登录验证装饰器 def warpper(request, *args, **kwargs): is_login = request.sessio ...