A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李松松 中级黑马   /  2018-11-20 15:17  /  1019 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

list集合的特点
1.元素存取有序
2.可以存储重复的元素
3.有索引
常见的数组结构
栈        结构特点:先进后出,出口和入口在同一侧
数组                结构特点:查询快,增删慢。
队列                结构特点:先进先出,出口和入口在两侧
单项列表        结构特点:由节点组成,查询快,增删慢
set集合的特点:1.元素不能重复2.没有索引
哈希表特点:哈希表由数组+链表/红黑树组成                功能是去重


可变参数格式:方法名(数据类型...变量名){        }


集合工具类
addAll(list,1,2,3,4)        添加多个元素
shuffle()        打乱
sort()排序


o1-o2         升序
o2-o1         降序


map集合特点
1.一个元素有一个key(键)+一个value(值)
2.key value的类型可以一样,可以不一样
3.key不能重复
4.一个key对应一个value


HashMap
key 存取无序
能存null值或null值
LinkedHashMap
key 存取有序


使用Map添加方法保存数据
put(K k,V v)        如果key不存在,则添加键值对,返回null
    如果key存在,则添加旧值,返回旧值
使用键找值的方式遍历Map集合
KeySet()
Set<键>set = map.KeySet();
for(键类型 Key : set){
值 = map.get(key)
}
使用键值对的方式遍历Map集合
entrySet()
Set<Map.Entry<键,值>>set =
map.entrySet();
for (Map.Entry<键,值>entry : set){
entry.getKey();
entry.getValue();
}
能够使用HashMap存储自定义键值对的数据
自定义JavaBean
作key:重写hashCode()equals()
作value:没有要求

程序中异常和错误的区别
错误:以Error结尾
异常:以Errorption结尾
异常的分类
编译时异常:Exception及其子类(除了RuntimException及其子类)
运行时异常:RuntimException及其子类
虚拟机处理异常的方式
1.打印出异常的详细信息
2.中断程序
创建的三个运行期异常
NullpointerException
ArrayIndexOutOfBoundsException
IndexOutOfBoundsException
ClassCastException
IllegalArgumentsException


IOException
FileNotFoundException
ParseException
try...catch关键字处理异常
try {
        // 可能发生异常的代码
} catch (异常类型1 变量名) {
        // 处理异常的代码
}
...
catch (异常类型n 变量名) {
        // 处理异常的代码
} finally {
    // 释放资源(无论如何都会执行)
}
能够使用thows关键字处理异常
方法名(参数列表) throws 异常类型1, 异常类型1,.. {}
自定义异常类
thows声明抛出
try...catch...捕获处理
进程的概念
内存中运行的一个程序
一个程序包含至少一个进程
线程的概念
进程中的一段代码执行路径
一个进程包含至少一个线程
程序>进程>线程(执行代码)
能够开启新线程
第一种:继承Thread类
1.定义类,继承Thread
2.重写run()方法,定义线程要执行的任务
3.创建子类对象,调用start()启动线程


java中多线程运行原理
随机性
抢占式,CPU告诉随机切换执行(本质),多个线程抢夺cpu的执行资源
内存
每个线程都有各自栈,堆共用
继承类的方式创建多线程
继承类Thread类,重写run方法
创建子类对象调用start()方法启动
实现接口的方式创建多线程
1.定义类,实现Runnable接口
2.重写run()方法,定义任务代码
3.创建Runnable实现类任务对象
4.创建Thread类对象,同时传入任务对象
5.使用Thread对象调用start()启动线程
实现接口方式的好处
1.避免了单继承的局限性
2.解耦
安全问题出现的原因
多个线程操作共享的数据
同步方法解决线程安全问题
// 锁对象: this
修饰符 synchronized 返回值类型 方法名(参数) {
   
}


// 该类的字节码对象 Class对象
修饰符 static synchronized 返回值类型 方法名(参数) {
   
}


1. 对象.getClass()
2. 类名.class
3. Class.forName("类全名")
线程6个状态的名称
NEW        新建
RUNNABLE        可运行
BLOCKED        锁阻塞
WAITING                无线等待
TIMED_WAITING        计时等待 wait(Long missis)
sleep(long millis)
TERMINATED                终结
继承Thread类
public class 类名 extends Thread {//子线程
        //在子线程类中重写run方法,在run方法中打印子线程的名称;
public void run() {
         // 打印子线程的名称
  System.out.println(Thread.currentThread().getName());
                }
}
测试(主线程)
public class ThreadDemo {
        public static void main(String[] args) {
          //在main方法中打印主线程的名称;
  System.out.println(Thread.currentThread().getName());
         //在main方法中创建子线程对象;
  SubThread st = new SubThread();
  //调用子线程对象的start方法,开启子线程。
  st.start();
                }
}
实现Runnable接口
public class 类名 implements Runnable {//子类任务
@Override
public void run() {
  // 在子任务类中重写run方法,在run方法中打印子线程的名称。
  System.out.println(Thread.currentThread().getName());
}
}
测试类
public class 类名 {
public static void main(String[] args) {
         // 在main方法中打印主线程的名称。
  System.out.println(Thread.currentThread().getName());
  // 在main方法中创建一个子任务对象。
  SubRunnable r = new SubRunnable();
  // 在main方法中创建一个Thread类的对象,并把子任务对象传递给Thread类的构造方法。
  Thread t = new Thread(r);
         // 调用Thread类对象的start方法开启子线程。
  t.start();
}
}



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马