java基础知识(一)

一、Java虚拟机

JVM (java Virtual Machine)

  • 平台无关性 :平台(硬件+软件<操作系统>)
  • 安全性: 沙箱(放置不可靠java程序)
  • 网络移动性: Java Applet(Java 小应用)

抽象规范

一个具体实现

一个运行中的虚拟机实例

运行时java虚拟机(JVM)天职:负责运行一个Java程序

1、JVM体系结构

封装:(类内的私有属性)

访问私有对象方法:

  • 将属性私有化(private)
  • 为私有属性添加getter和setter方法(如果有需要的话,可在方法中加入业务逻辑-限制使用

常见Bean结构

  • 构造器
  • 属性
  • 生成方法(getter和setter方法)

2、static(修饰符)

只修饰类成员,不修饰局部变量

  • 属性 -类共享
  • 方法
  • 块 (只执行一次)执行最快,(常用于加载一次外部数据,eg配置文件)

静态属性

  • 所有对象共享(类变量)
  • 访问: 类名.属性, 非静态属性:对象名(实例).属性

静态方法(static function)

  • 可直接访问静态变量,如要访问非静态变量,必须先实例化
  • 静态方法不能用this
  • 静态方法不能被非静态方法覆盖

访问方式:类名.方法名()

实例化后的对象访问 对象名.方法名()

二、类的继承

Java中单继承:一个类只能有一个父类

格式: 修饰符 class 子类名 extends 父类名

1、子类:派生类 父类:基类

  • 子类可以继承父类的私有属性,但却用不了
  • 子类实例化:先实例化父类,然后实例化子类

super()

作用:调用父类的构造器

只出现在子类的构造器,必须第一行

this()

作用:只调用本类构造器,第一行

super 对父类的引用 ||this 子类自己的引用

2、方法的覆盖(Override/Overwrite)

方法重写

  • 要求子类继承父类
  • 要求子类的方法与父类的方法签名()完全一致

3、关键字 final

修饰对象

  • 变量(属性、局部变量、形参):不能重新赋值---(在声明时或者构造器中赋值)
  • 方法:不能被覆盖,不能被修改,

常配合static修饰符使用

对于基本类型,不可变指的是值;

对于引用类型,不可变指的是引用地址,引用的值可变

常量命名字母要求大写

4、抽象类

含有抽象方法的类声明为抽象类

    //格式: 
    public abstract class ClassName 
    public abstract void methodName()

继承抽象父类的子类必须重写抽象方法

抽象类需要构造器(给子类使用)

  • 不能实例化
  • 其包含的抽象方法必须在其子类实现,否则该子类只能声明为abstract
  • 抽象方法不能为static
  • 抽象类中可以没有抽象方法,但有抽象方法的类一定时抽象类

抽象父类

  • 起约束的作用,从设计角度
  • 声明了一个规范

5、引用数据类型的转换(类之间)

前提:具有继承关系

原则:子类就是父类

向上造型

子类转换为父类,自动转换

  • 里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有的功能
  • 所有的子类都可以替换为父类的对象
  • 子类 is a 父类

向下造型-CAST(强制转换)

父类对象必须是经过向上造型的对象

向上转换损失了子类新扩展的属性与方法,仅剩父类声明的属性与方法

三、接口

1、多态

同一个动作,根据不同对象使产生不一样的结果

遵守引用类型的转换规则

赋值多态/传参多态

作用:

  • 1、方便程序系统的扩展
  • 2、利于系统后期的维护

2、接口(Interface)

  public interface IntfName
  public class ClassName implements IntfName

不是一个类,不能实例化

常量、抽象方法的集合

一套规范、一套行为协议

若一个类要实现一个接口,那这个类必须实现接口中的所有抽象方法,否则这个类只能声明为抽象类

  • 接口中定义的变量都是公共静态变量
  • 接口中没有自己的构造函数,而且接口中定义的方法全部都是抽象方法,即只提供方法的定义,没有提供方法的具体实现
  • 接口采用多继承制,而不像类一样采用单继承机制
 public interface InterfaceName{
     public returnDataType method1Name(InParamType in);
     public returnDataType method2Name(InParamType in);
     ...
 }
 

四、异常处理

抛出异常结构图如下;

graph RL A[RuntimeException]-->B[Exception] C[IOException]-->B D[error]-->E[Throwable] B-->E E-->F[Object]

处理方式:

  • try/catch 块
  • 抛出

1、可以有多个catch块来处理不同类型异常

2、没有try块,catch块不能存在

3、如果程序抛出多个异常,需要多个catch块来处理

4、出现异常后,后面的语句不执行

4.2、finally块 (try/catch 块之后存在)

关闭流,关闭连接、释放资源

不论是否发生异常,都会执行finally块。(执行try/catch 块后)

4.3、throw语句

抛异常:(开发:分层次开发)

throws

标识该方法可能会产生的异常类型

作用:声明一个成员函数可能抛出的各种异常

位置:函数头的后面

五、常见API与常用类

1、用import导入包

//导入包中所有类
import package_name.*;
//导入单个类
import package_name.class_name;

2、JDK常用包

java.lang (java语言包)自动导入

java.util 实用工具(list、calendar、date所需的类和接口)

java.awt 图形用户

java.io

java.net (TCP/IP 类/接口)

java.sql (数据库访问包)

3、包装类

对基本数据类型进行包装(基本数据类型可通过构造器转换为包装类)

  • boolean --> Boolean
Boolean b=new Boolean(true);
  • int --> Integer
//Integer有个parseInt方法把String转换为int
int i=Integer.parseInt(String);
  • ......

4、String类

代表一组不可改变的unicode字符序列

equals() 是Object类的方法

  • equals() 在String类中比较字符串相等
  • equals() 在其他引用类中比较地址

String类常用方法

 //返回全大写字符串
 public String toUpperCase();
 
 //返回全小写字符串
 public String toLowerCase();
 
 //截取字符串
 public boolean subString(int startIndex)
 
 //
 public char charAt(int index)
 
 //
 public int Indexof(char ch)
 
 //
 public String trim()
 
 //
 public int length()
 
 replace、split、startWith、endWith、contains

5、StringBuffer

用于内容可以改变的字符串

//此构造一个字符串缓冲区初始化为指定字符串的内容。
//StringBuffer(String str)
StringBuffer sb=new StringBuffer("haha");
System.out.println(sb.toString);

//常见方法
//此方法将指定的字符串追加到此字符序列
public StringBuffer append(String str) 

//此方法将char数组参数插入到这个序列的字符串表示形式
public StringBuffer insert(int offset, char[] str)

//此方法替换这个序列中的特定字符串的子字符串
public StringBuffer replace(int start, int end, String str)

//此方法使该字符序列的序列反向替换
public StringBuffer reverse()

6、Object类

所有类的父类

  • 1、在Object类中定义的方法在所有类中都可以使用
  • 2、一个类可以不是Object类的直接子类,但一定是Object类的子类,Java中的每一个子类都是从Object类扩展来的
  • 3、Object类 Java语言中唯一一个没父类的类

Object类常用方法

 //返回16进制整数,唯一标识一个对象
 public int hashCode();
 
 //返回 类名@hashCode
 public String toString();
 
 //比较两个对象引用的值是否相等(比较地址)
 public boolean equals(Object obj)

7、Math类

常用方法

//天花板  返回大于或者等于参数的最小整数
java.lang.Math.ceil(double a)

//地板  返回小于或者等于参数的最大整数
java.lang.Math.ceil(double a)

//幂方法  相当于a^b
java.lang.Math.pow(double a, double b)

//返回最接近参数的整数,若2个double值都接近参数,返回偶数
java.lang.Math.rint(double a)

六、集合

  • 1、Java中集合类是用来存放对象的
  • 2、其中每个对象作为集合中的一个元素出现

数组可以有多维,而集合不存在这样的概念

graph RL A[ArrayList]-->|implements|L[List-interface] B[LinkedList]-->|implements|L S[Stack]-->V[Vector] V-->L H[HashSet]-->|implements|C[Set-interface] T[TreeSet]-->|implements|C C-->|extends|D[Collection] L-->|extends|D E[HashMap]-->|implements|M[Map-interface] F[HashTable]-->|implements|M G[TreeMap]-->|implements|M M-->O[object] D-->O J[ListIterator]-->K[Iterator] K-->O

1、Collection接口

集合类接口在java.util包中

常用方法

add
clear
remove
size

2、List

add

ArrayList

//构造器 
ArrayList()

//可以避免频繁的装拆箱操作
ArrayList<E>()//泛型

LinkedList

最主要可以在list头部尾部增删,取得元素

ArrayList与LinkedList区别

  • ArrayList当遍历时效率高,适合随机查询
  • LinkedList 元素插入、删除操作性高,功能上LinkedList多一些

3、Map接口(字典)

内存储的是键/值对这样以成对的对象组

通过“键”对象来查询“值”对象

Map中,key值唯一

key对象与value对象关联一起的

Map的遍历(转换为Collection)

  • values()返回的是 V 值集合,是一个 list 集合对象;
  • keySet()返回的是 K 值集合,是一个 Set 集合对象;
  • entrySet()返回的是 K-V 值组合集合
 //获取所有的 key,根据 key 取出对应的value
 for (String key : map.keySet())
 
 //遍历所有的value,舍弃key
 for (String value : map.values())
 
 //取出对应的 key,value 键值对,容量大时推荐使用
 for (Map.Entry<String, String> entry : map.entrySet())
 
 //通过 Map.entrySet使用iterator遍历 key 和 value 
 Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
    while (iterator.hasNext()) {
    Map.Entry<String, String> entry = iterator.next();
    System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue());
 }
 
 //map.forEach JDK1.8 新特性 
 map.forEach((key, value) -> {
        System.out.println("key=" + key + ",value=" + value);
 });
 
Map类 Key Value Super 说明
Hashtable 不允许为null 不允许为null Dictionary 线程安全
Concurrenthashmap 不允许为null 不允许为null AbstratMap 分段锁技术
TreeMap 不允许为null 允许为null AbstratMap 线程不安全
HashMap 允许为null 允许为null AbstratMap 线程不安全
posted @ 2020-05-05 23:57  jack威  阅读(163)  评论(0编辑  收藏  举报