2020java教程:java8新特性
java8新特性
java8概述
java8简称jdk1.8是java语言开发的一个主要版本。
oracle公司于14年3月18日发布java8
支持Lambda表达式
函数式接口
新的Stream API
新的日期 API
其他特性
枚举
什么是枚举?
枚举是一个引用类型,枚举是一个规定了取值范围的数据类型。
枚举变量不能使用其他数据,只能使用枚举中常量赋值,提高程序安全性。
定义枚举使用enum关键字。
版本:JDK1.5
注意:
1.枚举中必须要包含枚举常量,也可以包含属性,方法,私有构造方法
2.枚举常量必须在前面,多个常量之间使用逗号隔开,最后分号可写可不写 (更多…)
javaSE基础综合习题
1.(循环)输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)
import java.util.Scanner; public class demos{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入整数"); int n=sc.nextInt(); int sum=0; for(int i=0;i<n;i++){ sum+=n%10; n=n/10; } System.out.println(sum); } }
单例模式
单例(Singleton):只允许创建一个该类的对象。
方式1:饿汉式(类加载时创建,天生线程安全)
class Teacher{ private static final Teacher t=new Teacher(); private Teacher(){} public static Teacher getInstance(){ return t; } }
利用File类进行音乐文件夹查找指定文件
import java.io.File; import java.util.Scanner; public class demos{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入盘符"); String cd=sc.next(); System.out.println("请输入文件夹"); (更多…)
反射
什么是类对象?
类的对象:基于某个类 new 出来的对象,也成为实例对象。
类对象:类加载的产物,封装了一个类的所有信息(类名,父类,接口,属性,方法,构造方法)。
获取类对象
通过类的对象,获取类对象
Student s=new Student();
Class c=s.getClass();
通过类名获取类对象
Class c=类名.class
通过静态方法获取类对象
Class c=Class.forName(“包名.类名”) (更多…)
Queue队列(接口)
Collection的子接口,表示队列FIFO(先进先出)
常用方法:
– 抛出异常:
— boolean add((E e);//顺序添加一个元素(到达上限后,再添加则会抛异常)
— E remove()//获得第一个元素并移除(如果队列没有元素时,则会抛异常)
— E element()//获得第一个元素但不移除(如果队列没有元素时,则会抛异常)
– 返回特殊值:
— boolean offer(E e)//顺序添加一个元素(到达上限后,再添加则会返回false)
— E poll()//获得第一个元素并移除(如果队列没有元素时,则返回null)
— E peek()//获得第一个元素但不移除(如果队列没有元素时,则返回null) (更多…)
匿名内部类完成生产者和消费者
public class demos{ public static void main(String[] args) { MyStack ms=new MyStack(); Thread t1=new Thread(){ public void run() { for(char c='A';c<='Z';c++){ ms.push(c+""); } } }; Thread t2=new Thread(){ public void run() { for(int i=0;i<26;i++){ ms.poll(); } } }; t1.start(); t2.start(); } } class MyStack{ private String[] values={"","","","",""}; private int size=0; public synchronized void push(String s){ this.notifyAll(); while(values.length==size){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(s+"入栈"); values[size]=s; size++; } public synchronized void poll(){ this.notifyAll(); while(size==0){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(values[size-1]+"出栈"); values[size-1]=""; size--; } }
高级多线程
线程池概念:
现有问题:
线程是宝贵的内存资源、单个线程约占1MB空间,过多分配易造成内存溢出。
频繁的创建及销毁线程会增加虚拟机回收频率、资源开销,造成程序性能下降。 (更多…)
多线程
要想了解线程必须先了解进程
什么是进程?
程序是禁止的,只有真正运行程序,才被称为进程。
单CPU在任何时间点上,只能运行一个进程;宏观并行,围观串行。 (更多…)
异常课后习题
1.填空
java中所有的错误都继承自Throwable类;
在该类的子类中,Error类表示严重的底层错误,对于这类错误一般处理的方法是重新书写重新编译重新运行;Exception类表示例外、异常 (更多…)
异常
什么是异常?
概念:程序在运行过程中出现的特殊情况。
异常处理的必要性:任何程序都可能存在大量的位置问题、错误,如果不对这些问题进行正确处理,则可能程序中断,造成不必要的损失。
异常的分类
Throwable:可抛的,一切错误或异常的父类,位于java.lang包中
|-Error:JVM、硬件、执行逻辑错误,不能手动处理
|-Exception:程序在运行和配置中产生的问题,可处理。
||-RuntimeException:运行时异常,可处理,可不处理
||-CheckedException:受查异常,必须处理 (更多…)
Map体系集合
Map结构
interface Map
|-Class HashMap
|-interface SortedMap
||-class TreeMap
Map结构的特点:
1.用于存储任意键值对(Key–value)
2.键:无序,无下标,不允许重复(唯一)
3.值:无序,无下标,允许重复 (更多…)
BigDecimal
位于java.Math包中
作用:精确计算浮点数
创建方式:BigDecimal big=new BigDecimal(“值”);
方法:
BigDecimal add(BigDecimal);//加法
BigDecimal subtract(BigDecimal);//减法
BigDecimal multiply(BigDecimal);//乘法
除法:
BigDecimal divide(BigDecimal,int scal,RoundingMode mode)
参数scal:指定精确到小数后几位
参数mode:四舍五入模式
up:舍入模式从零开始
ROUND_HALF_UP:
ROUND_HALF_DOWN:
ROUND_HALF_EVEN:
可变字符串习题
获取邮箱 "我爱你呀@baidu.com.cn"中的用户名 "我爱你呀"
public class demos{ public static void main(String[] args) { //获取邮箱 "我爱你呀@baidu.com.cn"中的用户名 "我爱你呀" String s="我爱你呀@baidu.com.cn"; int i1 = s.indexOf("@"); String str=s.substring(0,i1); System.out.println(str); } }
可变字符串
StringBuffer
可变字符串,jdk1.0提供,运行效率慢、线程安全。
StringBuilder
可变字符串,jdk5.0提供,运行效率快、线程不安全。
字符串缓冲区就像一个String,但可以修改,在任何时间点,它包含一些特点的字符序列,但可以通过某些方法调用来更改序列的长度和内容。
构造方法: (更多…)