Java知识复习1
保存
源文件中只能有一个public类,如果有一个public类,则文件名必须与该类名相同
如果没有public类,则文件名只要和其中一个类名相同即可
编译
编译器Javac
javac xxx.java
javac -source 1.6 xxx.java 用Java8平台上编译Java6的代码,参数可以是1.6,1.7,1.8(Java 8默认使用1.8,不填默认1.8)
运行
解释器java
java Hello (Hello是必须主类且必须编译成字节码,解释器运行主类)
反编译
javap Hello 反编译Hello.class
java java.util.Date 反编译java库中date类 java.util是包名
注释
单行注释: //
多行注释 /* */
//单行注释
/*
多行注释
*/
标识符
用来标示类名、变量名、方法名、类型名、数组名和文件名
标识符由 字母Aa、下划线__、美元符号$、数字123 组成
标识符首字符不能是数字,如~~1Java~~就是错误的
标识符不能是**关键字**
标识符不能是true、false、null
null (空值)
true (真)
false (假)
关键字
Java中的关键字有
48个关键字:abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、int、interface、instanceof、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while
1.访问修饰符的关键字(3个)
public (公有的):可跨包
protected (受保护的):当前包内可用
private (私有的):当前类可用
2.定义类、接口、抽象类和实现接口、继承类的关键字、实例化对象(6个)
class (类):public class A(){}花括号里是已实现的方法体,类名需要与文件名相同
interface (接口):public interface B(){}花括号里有方法体,但没有实现,方法体句子后面是英文分号“;”结尾
abstract (声明抽象):public abstract class C(){}介于类与接口中间,可以有,也可以没有已经实现的方法体
implements (实现):用于类或接口,实现接口public class A interface B(){}
extends (继承):用于类继承类public class A extends D(){}
new (创建新对象):A a=new A();A表示一个类
3.包的关键字(2个)
import (引入包的关键字):当使用某个包的一些类时,仅需要类名,即可自动插入类所在的包
package (定义包的关键字):将所有相关的类放在一个包类以便查找修改等
4.数据类型的关键字(9个)
byte (字节型):8bit
char (字节型):16bit
boolean (布尔型):--
short (短整型):16bit
int (整型):32bit
float (浮点型):32bit
long (长整型):64bit
double (双精度):64bit
void (无返回):public void A(){}其他需要反回的经常与return连用
5.条件循环(流程控制)(12个)
if (如果) :if(条件语句{执行代码}如果条件语句成立,就开始执行{}里面的内容
else (否则,或者) :常与if连用,用法相同:if(...){...}else{...}
while (当什么时候):while(条件语句){执行代码}
for(满足三个条件时):for(初始化循环变量;判断条件;循环变量值{}
switch (选择结构):switch(表达式){case 常量表达式1:语句1;...case 常量表达式2;语句2;default:语句;}default就是如果没有匹配的case就执行它,default并不是必须的。case后的语句可以不用大括号。
case (匹配switch的表达式里的结果) :同上
default (默认): default就是如果没有匹配的case就执行它, default并不是必须的
do (运行) :通常与while连用
break (跳出循环):直接跳出循环,执行循环体后的代码
continue (继续) : 中断本次循环,并开始下一轮循环
return (返回) :return 一个返回值类型
instanceof(实例):一个二元操作符,和==、>、<是同一类的。测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据
6.修饰方法、类、属性和变量(9个)
static(静态的):属性和方法都可以用static修饰,直接使用类名、属性和方法名。只有内部类可以使用static关键字修饰,调用直接使用类名、内部类类名进行调用。static可以独立存在。
final(最终的不可被改变):方法和类都可用final来修饰;final修饰的类是不能被继承的;final修饰的方法是不能被子类重写。常量的定义:final修饰的属性就是常量
super(调用父类的方法):常见public void paint(Graphics g){super.paint(g);...}
this(当前类的父类的对象):调用当前类中的方法(表示调用这个方法的对象)this.addActionListener(al):等等
native(本地)
strictfp(严格,精准)
synchronized(线程,同步):一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块
transient(临时):当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。
volatile(易变):用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值。volatile很容易被误用,用来进行原子性操作。
7.错误处理(5个)
catch(处理异常):
(1)try+catch 程序流程是:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句
(2)try+catch+finally 程序流程是:运行到try块中,如果有异常抛出,则转到catch垮,catch块执行完毕后,执行finally块的代码,再执行finally块后面的代码。如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行finally块后面的语句
(3)try+finally 程序流程是:运行到try块中,如果有异常抛出,则转到finally块的代码。
try(捕获异常)
finally(有没有异常都执行)
throw(抛出一个异常对象):一些可以导致程序出问题,比如书写错误,逻辑错误或者是api的应用错误等等。为力防止程序的崩溃就要预先检测这些因素,所以java使用了异常这个机制在java中异常是靠“抛出” 也就是英语的“throw”来使用的,意思是如果发现到什么异常的时候就把错误信息“抛出”
throws(声明一个异常可能被抛出):把异常交给他的上级管理,自己不进行异常处理
8.其他(2个)
enum(枚举,列举,型别)
assert(断言)
2个保留字(现在没用以后可能用到作为关键字):goto、const。
const —— 常量,常数:用于修改字段或局部变量的声明。
goto —— 转到:指定跳转到标签,找到标签后,程序将处理从下一行开始的命令
基本数据类型
Java基本类型共有八种,基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。
数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。
JAVA中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。实际上,JAVA中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。
8 中类型表示范围如下:
byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
boolean:只有true和false两个取值。
char:16位,存储Unicode码,用单引号赋值。
Java决定了每种简单类型的大小。这些大小并不随着机器结构的变化而变化。这种大小的不可更改正是Java程序具有很强移植能力的原因之一。下表列出了Java中定义的简单类型、占用二进制位数及对应的封装器类。
简单类型 | boolean | byte | char | short | Int | long | float | double | void |
---|---|---|---|---|---|---|---|---|---|
二进制位数 | 1 | 8 | 16 | 16 | 32 | 64 | 32 | 64 | – |
封装器类 | Boolean | Byte | Character | Short | Integer | Long | Float | Double | Void |
常量
十六进制整型常量:以十六进制表示时,需以0x或0X开头,如0xff,0X9A。
八进制整型常量:八进制必须以0开头,如0123,034。
长整型:长整型必须以L作结尾,如9L,342L。
浮点数常量:由于小数常量的默认类型是double型,所以float类型的后面一定要加f(F)。同样带小数的变量默认为double类型。
如:float f; f=1.3f;//必须声明f
字符常量:字符型常量需用两个单引号括起来(注意字符串常量是用两个双引号括起来)。Java中的字符占两个字节。一些常用的转义字符:
①\r表示接受键盘输入,相当于按下了回车键;
②\n表示换行;
③\t表示制表符,相当于Table键;
④\b表示退格键,相当于Back Space键;
⑤’表示单引号;
⑥’'表示双引号;
⑦\表示一个斜杠\
类型转换
//类型精度从低到高排列
byte short char int long float double
-
把级别低的变量值付给级别高的变量时,自动转换成高级别的
-
强制转换
(类型名)要转换的值 如 int x = (int) 60.0
类型强转后精度可能会低于原数据
int 转byte、short、char时,不可以超出这些数据的取值范围
如byte a = (byte)-129 结果是127
基本输入型数据
Scanner类
Scanner reader = new Scanner(System.in); //用Scanner类创建一个reader对象
int x=reder.nextInt(); //用reader对象读取从屏幕输入的数据
//读取的各类基本输入数据有
nextBoolea(),nextByte(),nextShort(),nextInt(),nextLong(),nextFloat(),nextDouble();
基本输出型数据
System.out.println(); //输出换行
System.out.print(); //输出不换行
//输出中不能存在回车符
/*例如System.out.println("你好
OK");就无法通过编译;
正确的作法是System.out.println("你好"
+“OK”);
*/
System.out.printf(); //jdk5新增,类似C语言输出数据方法
/*
有以下参数:
%d:输出int型数据
%c:输出char型数据
%f:输出浮点型数据,最多保留6位小数
%s:输出字符串数据
%md:输出int型的数据占m列
%m.nf:输出浮点型数据占m列,小数部分保留n位;
*/
数组
声明数组
//一维数组
数组的元素类型 数组名[];
数组的元素类型 [] 数组名;
//二维数组
数组的元素类型 数组名[][];
数组的元素类型 [][] 数组名;
为数组分配元素
声明数组只是定义了数组变量的名字和数字类型,真正的使用数组还要为其分配元素
//格式
//数组名 = new 数组类型[数组中元素的个数]
boy = new float[9];
boys = new float[9][10];//多维数组是“数组的数组”
数组的使用
索引从0开始,例如上面的boy数组从boy[0]开始到boy[8]结束
boy[0]=100;
length的运用
boy.length=9
boys.length=9
boys[0].length=10
数组的初始化
创建数组后系统会自动为数组分配一个值,例如float的默认值是0.0
在声明数组的同时也可以为数组的元素给一个初始值,例如
float a[] = {21.3f,23.89f,12}
float b[][] = {{1.0f,22.0f},{12.3f,12.2f}}
数组的引用
数组是引用型变量,如果具有相同的引用,就有完全一样的元素
int a[] = {1,2,3};
int b[] = {4,5};
a=b;
//此时a就指向{4,5}了,{1,2,3}没有被使用就会被Java回收