java简介

目录

基础

类型

String

数组

日期时间

修饰符

运算符

循环结构

异常处理

面向对象相关

继承

接口

函数式接口

finalize

包package

高级

泛型

文件与流

Scanner

lambda表达式

附录


Java是一种面向对象的程序设计语言,包括三个体系:

  • JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)

  • JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版)

  • JavaME(J2ME)(Java 2 Platform Micro Edition,java平台微型版)。

 

基础

Java源文件名必须和public类名相同(类名+.java作为保存文件名);即一个源文件中最多只能有一个public类(可以有多个非public类)。若类定义在包中,则package语句应在源文件首行;import在package之后,类定义前。

标识符应以字母,美元符($)或者下划线(_)开始。

 

类型

Java提供了八种基本类型:

  • byte:有符号8位整数(-128~127);

  • short:有符号16位整数;

  • int:有符号32位整数;

  • long:有符号64位整数;默认0L;

  • float:单精度32位浮点数;默认0.0f;

  • double:双精度64位浮点数;默认0.0d;

  • boolean:布尔,ture、false;

  • char:16位Unicode字符;

    • 对单个字符操作时,使用Character类;

 

String

标识字符串类型,且不可修改,使用其静态方法format可方便进行格式字符串处理;

当需要对字符串修改时,使用StringBuffer或StringBuilder。两者的方法和功能是完全等价;但:

  • StringBuffer是线程安全的(其方法大都用synchronized修饰);

  • StringBuilder是线程不安全的(速度快,适合单线程情况下使用);

 

数组

存储固定大小类型相同的元素(从0开始索引),通过java.util.Arrays 类可方便地操作数组;

dataType[] arrayRefVar = new dataType[arraySize];

type[][] typeName = new type[typeLength1][typeLength2];

 

日期时间

由java.util包提供的 Date 类实现;初始一个新对象即可获取当前时间,如:

Date date = new Date();

通过SimpleDateFormat 来格式化日期,其parse可方便解析时间字符串;

字母描述示例
G纪元标记AD
y四位年份2001
M月份July or 07
d一个月的日期10
h A.M./P.M. (1~12)格式小时12
H一天中的小时 (0~23)22
m分钟数30
s秒数55
S毫秒数234
E星期几Tuesday
D一年中的日子360
F一个月中第几周的周几2 (second Wed. in July)
w一年中第几周40
W一个月中第几周1
aA.M./P.M. 标记PM
k一天中的小时(1~24)24
K A.M./P.M. (0~11)格式小时10
z时区Eastern Standard Time
'文字定界符Delimiter
"单引号`

SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd"); 

Date t = ft.parse("2019-05-09"); 

 

也可以通过printf格式化,%t后跟格转换符:

转  换  符

说    明

示    例

c

包括全部日期和时间信息

星期六 十月 27 14:21:20 CST 2007

F

"年-月-日"格式

2007-10-27

D

"月/日/年"格式

10/27/07

r

"HH:MM:SS PM"格式(12时制)

02:25:51 下午

T

"HH:MM:SS"格式(24时制)

14:28:16

R

"HH:MM"格式(24时制)

14:28

System.out.printf("全部日期和时间信息:%tc%n",date);

 

修饰符

访问修饰符(保护类、变量、方法等):

  • 默认(default,不用任何修饰符):同一包内可见;

  • private:私有;

  • public:公开;

  • protected:保护,同一包内的类和所有子类可见;

非访问修饰符:

  • static:创建类方法和类变量(即静态);

  • final:

    • 类:不可继承;

    • 方法:不能被继承类重新定义;

    • 变量:常量;

  • abstract:抽象类与抽象方法;

  • synchronized:线程间同步,同一时间只能一个线程访问;

  • volatile:每次访问时,必须从内存中重读变量值;

  • transient:序列化时忽略此变量;

 

运算符

  • instanceof:检查对象是否时特定类型(myInst instanceof myClass)

  • 算术运算符

  • 关系运算符

  • 位运算符

 

循环结构

  • while

  • do ... while

  • for

    • for(初始化; 布尔表达式; 更新) 

    • for(声明语句 : 表达式)  // 表达式为可枚举类型,如数组等

 

异常处理

所有异常继承自java.lang.Exception。

try ... catch ... finally:处理异常;

throw:抛出异常;

throws:放在方法后面,表面方法可能抛出的异常;

 

面向对象相关

 

继承

使用extends继承(类继承类,接口继承接口);instanceof判断是否是对应类型;implements用于实现接口。类是单继承,接口可以多继承。

重写一般使用@Override修饰(避免因疏忽把重写变成了重载);父类使用super标识。

public interface Ia { ... }

public interface Ib { ... }

public interface Ic extends Ia {...}

public class A { ... }

public class B extends A implements Ic, Ib {...}

 

接口

通过interface声明接口,接口中的方法是隐式抽象的(即不需要使用abstract修饰);接口方法都是公有的;

接口不能实例化,只能由类实现;接口可以多继承。

 

函数式接口

只定义一个抽象方法的接口;可通过@FunctionalInterface标注;

java8中接口可以拥有默认方法(即类没有对方法进行实现时,其主体为方法提供默认实现的方法)

 

finalize

finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法(调用时机是不确定的,System.gc()发起回收指令)。

 

包package

package pkg1[.pkg2[...]]

包把不同java程序分类保存,方便其他程序调用。

通过import引入包(*表示引入所有公开类)

import pkg1[.pkg2[...]].(className|*)

 

高级

 

泛型

即‘参数类型化’,可用于类、接口和方法。泛型的类型参数只能是类类型(不能是简单类型)。

泛型方法:类型参数在方法的返回类型之前,多个类型用逗号分开;通过extends限定类型范围(有界类型):

public static <T extends Comparable<T>> T maximun(T x, T y)

{ ... }

 

泛型类型:类名后面添加泛型参数即可

public class Test<T> { ... }

 

操作类型不确定,且只使用Object中的功能是,可以使用通配符(?)表示未知类型:

public void getKeyValue(Generic<?> obj){

  System.out.println(obj.getKey());

}

 

文件与流

Java.io包几乎包含了所有操作输入、输出需要的类。FileInputStream与FileOutputStream可方便用于文件流读写;其他一些文件相关类:

  • File:磁盘中实际存在的文件和目录;

    • mkdirs:创建文件夹和他所有父文件夹(若不存在);

  • FileReader(继承自InputStreamReader):按字符读取流中数据;

  • FileWriter(继承自OutputStreamWriter):按字符向流中写入数据;

 

Scanner

java.util.Scanner可方便地处理基本类型与字符串,通过next**获取,hasNext**判断是否有:

  • next():获取下一个token(string),一定要读到有效字符串才可结束输入(前导空白被自动忽略);

  • nextLine():获取一行;

  • hasNextInt():是否有整数;

  • nextInt():获取整数

// 从输入中获取浮点数

Scanner sc = new Scanner(System.in);

f = sc.nextFloat();

 

lambda表达式

lambda理解为简洁地表示可传递的匿名函数的一种方式;其类型是从上下文推断出来的。Lambda可以无限制地捕获实体变量和静态变量,但局部变量必须是final或事实上的final(只赋值一次)。

(params) -> expression   // 表达式结果为返回值

(params) -> { statements; } // 若有返回,需要明确return

如:
 () -> {} // 空表达式(无参数,无返回值)

lambda表达式可直接以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例(即函数式接口的一个具体实现实例);

 

附录

CentOS7下部署Java编译环境

1、下载jdk***.tar.gz

2、复制到/usr/local下,解压(tar -zxvf )

3、设置环境变量    

vi /etc/profile #添加以下内容(ClassPath中要增加当前目录./

JAVA_HOME=/usr/local/jdk1.8.0_131
JRE_HOME=$JAVA_HOME/jre
CLASSPATH=./:$JAVA_HOME/lib:$JRE_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH

source /etc/profile  #使配置生效

 

4、测试

public class Hello {

  public static void main(String[] args){

    System.out.println("Hello, My Java!");

  } 

}

javac Hello.java #编译

java Hello  # 执行

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值