JAVA基础
适合有一定C和C++基础,梳理了一下代码的基本使用。可以搭好环境后自行操作一波,印象会更深一些。
Java特性
- 面向对象
- 健壮性
- 跨平台性:一个编译好的 .class 文件可以在不同平台上并行
- 解释性语言:需要解释器进行解释,编译型语言是编译后的代码(二进制)可以直接被机器执行
JDK,JRE
v
文档注释
文档注释主要是用来生成java开发文档javadoc的,生成的开发文档和Java本身的API帮助文档是一样的,也就是对你所写的类进行解释说明,所以它还需要搭配一些文档标记,进行解释说明,而且在文档注释中可以使用HTML语言,jdk源码中有大量的文档注释,所以弄懂文档注释可以帮助你更好的看懂源码。
dos一些指令
md: 创建目录
rd: 删除目录
数据类型
- 整型: byte,short,int,long–> 8,16,32,64
- 浮点:默认为double,64位,在小数后面加f或F为float,32位
- 字符:16位
- 布尔
- ···
标识符
由字母、下划线、$、数字组成,第一个字符不能是数字,区分大小写。
声明常量–final常量
一直不变。
final 数据类型 常量名称 (通常大写) [= 值]
一维数组
int arr[];
arr = new int[5]; 分配5个内存
初始化
int arr[] = {1,2,3,4};
int arr[] = new int[]{1,2,3,4};
fill
import java.util.Arrays;
int arr[] = new int[5];
Arrays.fill(arr,8);
//fill(int[] a, int fromIndex, int toIndex, int value);
排序
Arrays.sort(object)
复制
- copyOf(arr, int newlength);
newlength若大于原数组长度,用0或null填充;若小于则多余的丢弃;
- copyOfRange(arr, int fromIndex, int toIndex);
查询
binarySearch(Object[] a, int fromIndex, int toIndex, Object key); //返回一个索引
类与对象
Cat c1 = new Cat("黑");
继承
class Child extends Parent{}
JAVA只能单继承,一个类只有一个父类。
Object类中的几个重要方法:
- getClass().getname(); 获得类的名称
- toString() 将一个对象转换成字符串形式。
- equals()
==比较的是两个对象引用的内存地址;equals()比较的是两个对象的实际内容
对象类型的转换
向上转:子类对象直接赋值给父类对象
向下转:只能先引用子类对象,再强制转换
Bird bird = new Pigeon();
Pigeon pigeon = (Pigeon) bird;
instanceof 判断对象类型
myobject instanceof ExampleClass //返回一个boolean值
方法重载
JAVA是利用方法名、方法各个参数类型和参数的个数和顺序来确定的。
final
-
定义常量
-
定义方法(private无法被子类访问和修改,也就是final类型了)
-
定义类 final 类名{} :该类不被任何类继承,不被改动;例如 java.lang.Math 和 java.lang.String
抽象类与接口
抽象类
public abstract class Parent{
abstract void testAbstract();
}
抽象方法必须定义在抽象类中。
抽象类被继承的话,子类一定要实现抽象类中的抽象方法,可以是非抽象,但其他所有形式都与抽象方法一样。
接口interface
把方法封装到一个接口中,使需要该方法的类实现这个接口。
//接口必须是public或abstract,所以public可以省略
//接口中任意字段都是static和final
public interface Paintable{
void draw();
}
一个类继承一个父类的同时再实现一个接口
public class --- extends --- implements Painitable{
public void draw(){}
}
接口可以多继承,一个类可以同时实现多个接口。
class -- implements 接口1,接口2
接口也可以继承接口。
interface --- extends --- {}
包和内部类
JAVA类包
JAVA中提供了一种管理类文件的机制。
类名冲突–所以需要完整的类路径
java包命名规则是全部使用小写
//文件包
package ---; //指定包名
class --{}
//导入包
import ---.--;
//导入静态成员
import static 静态成员;
内部类
成员内部类可以随意使用外部类的成员方法以及成员变量,private也可以。
如下定义
public class Car{
class Engine{
}
public static void main(String[] args){
Car.Engine engine = car.new Engine();
}
}
成员内部类不止可以在外部类中使用,在其他类中也可以使用。
this
public class Car{
private int x = 7;
private class Engine{
private int x = 9;
public void doit(){
this.x ++; //调用内部类
Car.this.x++; //调用外部类
}
}
}
匿名内部类
只有在创建对象时才会编写类体的一种写法-------现用现写。
class Dog{}
public class Demo{
public static void main(String[] args){
Dog wang = new Dog(){
public void move(){}
}; //注意有分号
wang.move();
}
}
-
匿名类不能写构造方法。
-
匿名类不能定义静态成员。
核心技术
异常处理
//捕获异常
public class Main {
public static void main(String[] args) {
try{
}catch(Exception e){
e.printStackTrace();
}
}
}
int money = Integer.parseInt("20L");//数据类型转换异常
System.out.println(1/0); // /by zero
自定义异常
public class MyException extends Exception{
public MyException(String ErrorMessage){
super(ErrorMessage);
}
}
public class Main {
public static void main(String[] args) {
throw new MyException("错误");
}
}
运行异常RuntimeException
- Error
- Exception
字符串
创建字符串
- String(char a[])
- String(char a[], int offset, int length)
- = " "
当整型和浮点型与字符串连接时,会自动调用toString()方法并转换成字符串形式。
查找字符串
-
str.indexOf(String s) 返回参数字符串s在指定字符串中首次出现的索引位置。
-
str.lastIndexOf(String s) 最后一次出现的索引位置
获取指定索引位置的字符
- str.charAt(int index)
子字符串substring()
去除空格trim()
字符串替换replace(target, replacement)
判断字符串开始和结尾
startsWith(String prefix) endsWith(String suffix) 返回一个bool值
比较两个字符串
==判断的时两个字符串的地址。
比较字符串的内容:
-
equals 区分大小写。
-
equalsIgnoreCase 不区分大小写。
-
compareTo 按字典顺序比较,-x,0,x
大小写转换
- toLowerCase()
- toUpperCase()
字符串分割
split(string sign)
split(sign1/sign2)
split(sign, int limitTimes)
格式化字符串
String str = String.format("%d", 400/2);
String str2 = String.format("%b", 3>5);
正则表达式
public class Main {
public static void main(String[] args) {
String regex = "\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
String str = "11@qq.com";
if(str.matches(regex)){
}
}
}
字符串生成器
使用StringBuilder类,速度快很多
JAVA常用类库
-包装类,interger、Double、Boolean、Character、Number类
数据处理类,数字格式化、Math、Random、BigInteger、BigDecimal
时间日期处理类,Date、日期格式化、Calendar
Runtime类,执行本地命令、查看内存
System类,输出、计时
Scanner类,用户输入
包装类
Byte Short Int Long Float Double Character Boolean
byte short int long float double char bool
装箱:基本数据类型转换为包装类
拆箱:包装类转换为基本数据类型
Integer类
数字格式化
import java.text.DecimalFormat;
public class DecimalFormatSimpleDemo{
static void SimgleFormat(String Pattern, double value){
DecimalFormat myFormat = new DecimalFormat(pattern);
String output = myFormat.format(value);
}
public static void main(String[] args) {
SimpleFprmat("###,###,###",123456.789);
}
}
//输出123,345.789
计时
long start = System.currentTimeMillis();
---
long end = System.currentTimeMillis();
end - start
用户输入:Scanner类
import java.util.Scanner;
Scannner sc = new Scanner(System.in);
input = sc.nextInt();//获取用户输入的整数
集合类
java.util包:
Collection接口,派生了list和set接口
List集合:允许重复,类似数组
- ArrayList类:可变数组
- LinkedList类:采用链表保存对象
List<String> list = new ArrayList<>();
Set集合
- HashSet类
- TreeSet类
Map集合
- HashMap类
- TreeMap类
枚举类型与泛型
//默认是final、public、static
enum Constants{
consA,
consB,
}
//使用
Constants.consA
可以把Constants看成一个类
Constants es[] = Constants.values(); //以数组的形式返回
泛型
public class Book<T>{
private T bookinfo;
public Book(T b){
this.bookinfo = b;
}
Book<String> bookname = new Book<String>("山河故人");
Book<Double> bookprice = new Book<Double>(100);
}
对泛型类实例的类型做限制。
class LimitClass<T extends List>{
}
–未完待续–