
Java基础复习
Learn Lion
这个作者很懒,什么都没留下…
展开
-
Java基础
Java基础复习Java常用快捷键删除指定行:Ctrl+D复制当前行到下一行:Ctrl+Alt+向下光标运行代码:Alt+B查看类的继承关系:把光标放在类名上,Ctrl+H补全代码:Alt+/注释:Ctrl+/位运算原码、反码、补码二进制的最高位是符号位,0表示整数,1表示负数正数的原码,反码,补码都一样(三码合一)负数的反码 = 原码的符号不变,其他位取反负数的补码 = 反码 + 1,负数的反码 = 补码 - 10的反码,补码都是0java没有无符号数,即java中的数都是原创 2021-09-23 16:21:51 · 797 阅读 · 0 评论 -
包装类
包装类1.位置:位于Java的lang包下,所以可以直接使用。2.理解:八种数据类型的都有对应的包装类。在实际应用中经常需要将基本数据类型转化为对象来使用。提供包装类给便于操作。3.作用:(1)某些方法的参数必须是一个类,为了更加方便的使用基本数据类型的数据,所以要提供包装类。List list=new ArrayList(); list.add(new Integer(20)); list.add(new Integer(30)); System.原创 2021-06-08 17:36:23 · 142 阅读 · 0 评论 -
线程同步
作用我们在日常生活中,会遇到多个人同时对一个账户取款的情况,线程同步就可以保证让一个用户取款的时候,其他用户不能对同一个账户取款。如何实现1.使用synchronized做锁 Account account=new Account(); @Override public void run() { synchronized(account){ if(account.have()>=400){ account原创 2021-05-28 13:14:51 · 79 阅读 · 0 评论 -
线程控制
thread.join();直接阻塞其他线程,等该线程执行完了以后,才会执行其他线程。public final void join() throws InterruptedException { join(0); }final修饰的方法,写在start()方法之后Thread.sleep(1);让当前线程进入阻塞状态,这样就会把cpu让出来,其他线程就可以执行任务。可以设置阻塞的时间,当阻塞时间结束,就会进入阻塞状态,来争夺cpu执行任务public static na原创 2021-05-27 21:04:29 · 89 阅读 · 0 评论 -
线程的生命周期
但你创建了一个线程对象线程就处于一个新生状态,start之后就进入了就绪状态,等待cpu分配时间,来执行任务,如果在规定的时间内没有执行完任务,依然后让出cpu来,其他的线程来执行任务。等cpu再分配给它时候,接着执行任务。运行状态的线程三个出口(1).任务执行完,线程终止。(2).线程进入阻塞状态(3).回到就绪状态一个入口就绪状态---->运行状态就绪状态的线程三个入口(1)线程启动(2)解除阻塞状态(3)运行状态—>就绪状态一个出口进入运行状态...原创 2021-05-27 18:48:22 · 68 阅读 · 0 评论 -
实现多线程
继承Thread类public class RunThread extends Thread继承了Thread类后,就可以重写一个run()方法,该方法中就是线程要执行的任务。main()方法也是一个线程,叫主线程。我们可以在主线程中创建线程对象来增加线程,实现多线程。线程的常用方法1.Thread.currentThread()得到当且的线程2.getName()得到线程的名字3.getPriority()得到线程的优先级4.thread.start()启动线程5.run() 他不是原创 2021-05-26 23:39:41 · 80 阅读 · 0 评论 -
缓存流
字节缓冲流缓存流属于包装流,通过多字节流的包装来提高读写效率。1.创建字节缓存流InputStream fis= new FileInputStream("d:/readme.txt"); OutputStream fos=new FileOutputStream("d:/readme2.txt"); BufferedInputStream bis=new BufferedInputStream(fis); BufferedOutputStream bo原创 2021-05-25 14:53:13 · 241 阅读 · 0 评论 -
IO流
1.文件输入输出流FileInputStream,FileOutputStream都属于字节流FileInputStream的父类是InputStream(抽象类)FileOutputStream的父类是OutputStream(抽象类)(1)创建流:三种构造方法的重载```cppInputStream fis= new FileInputStream("d:/readme.txt"); OutputStream fos=new FileOutputStream("d:/read原创 2021-05-24 22:33:05 · 86 阅读 · 0 评论 -
泛型
泛型的作用1.在添加元素阶段,就进行元素类型的检查。(安全)2.获取元素时,不需要进行强制转换。(简单)参数化类型:把要添加元素的数据类型作为参数传入。泛型接口Java中的泛型接口:List<E>,Set<E>,Map<K,V>,Collection<E>,Iterable<E>,Comparator<T>,Comparable<T>泛型类Java中的泛型类:HashSet<E>,ArrayList原创 2021-05-23 18:13:33 · 152 阅读 · 0 评论 -
HashSet和TreeSet源码
Set其实就相当于一个Map,在你创建一个Set对象时,其实就是创建了一个Map对象public HashSet() { map = new HashMap<>(); }底层有一个Object的对象private static final Object PRESENT = new Object();当Set中添加元素的时候,就把元素当作Map中的key处理,同时所有的value都是刚刚的Object对象public boolean add(E e) {原创 2021-05-22 19:15:44 · 71 阅读 · 0 评论 -
TreeMap源码
底层是一个红黑树每一个节点的构成static final class Entry<K,V> implements Map.Entry<K,V> { K key; V value; Entry<K,V> left; Entry<K,V> right; Entry<K,V> parent; boolean color = BLACK;原创 2021-05-22 19:00:10 · 83 阅读 · 0 评论 -
Iterator源码
Iterator是一个接口,他的实现类都会在类的内部定义一个iterator方法类public Iterator<E> iterator() { return new Itr(); }可以看到方法中创建了一个Itr对象,Itr是一个内部类,可以方便的访问外部类中的成员。提供更小的封装性。private class Itr implements Iterator<E> { int cursor; // index of nex原创 2021-05-22 18:32:42 · 107 阅读 · 0 评论 -
理解HashMap源码
jdk1.7中的HashMap源码1.函数签名public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable实行了Map接口。2.静态内部类Entry,(jdk1.8中叫做Node,都表示节点的意思)static class Node<K,V> implements Map.Entry<K,V> {原创 2021-05-21 22:45:34 · 140 阅读 · 1 评论 -
Map的使用
1.Map是一个接口,HashMap,TreeMap和LinkedHashMap都是Map的实现类。2.Map<String ,String> map=new HashMap<String,String>();因为Map中存储的是键值对象,所以添加泛型的时候,也需要两个泛型。3.Map中添加元素时,使用的put方法。4.对于Map中的key值其实相当于一个Set,key值存储时,是唯一的,而且是无序的。对于value,它是跟着key走的,如果有相同的key,就会出现value的原创 2021-05-21 20:36:38 · 225 阅读 · 0 评论 -
Hashcode的原理
1.Hashcode底层是散列表:顺序表+链表。2.特点:添加快,按照内容查询快。3..Hashcode添加的原理:(1)利用.hashcode()方法计算哈希码。(2)利用哈希码来确定存储位置(3)如果,链表中没有元素,就直接添加,如果存储位置处已有元素,利用equals判断是否有相同的元素,如果没有就添加,(这种情况称为冲突)。如果有,为保证唯一性,就不添加了。4哈希码的计算原理:(1)对于整数类型的数据,就直接返回该整数(2)对于其他的基本的数据类型都用不同的处理类型,尽量保证不同的数原创 2021-05-21 14:58:59 · 2042 阅读 · 0 评论 -
Set的使用
Set的特点1.Set中存储的是无序,唯一的元素。2.Set因为是无序的所以也就没有索引,所以List中关于索引的方法,在Set中就没有了。同时,也就不能用for循环,来实行对集合遍历。3.Set的两个实现类HashSet和TreeSet。HashSet是无序的,但TreeSet是自然有序的,就是大小顺序。向Set中添加自定义对象的注意点1.任意对象想要放入底层结构是哈希表的集合中,都要重写equals方法和Hashcode方法来保证唯一性。2,任意想要放入底层结构是红黑数的集合中,都要实现一个原创 2021-05-20 18:20:55 · 557 阅读 · 0 评论 -
栈和队列
1.首先他们都是线性表2.栈的特点是:先进后出,跟子弹夹一样。栈的主要操作为:入栈,出栈,取栈顶元素(也叫去尾部元素)。3.队列的特点:先进先出,排队一样,队列的主要操作为:入队列,出队列,寻找栈顶元素。...原创 2021-05-20 17:23:01 · 73 阅读 · 0 评论 -
ArreayList和LinkedList源码
实现了三个没有方法的接口public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable底层内容1.存在一个对象数组;transient Object[] elementData;2.使用private int size;来记录List中包含对象的个数。注意点1.jdk1.8中调原创 2021-05-19 22:02:46 · 94 阅读 · 0 评论 -
泛型的使用
ArrayList<Integer> arrayList=new ArrayList<Integer>();ArrayList<Integer>就是定义泛型的语法。作用:添加了泛型以后,就规定该集合只能添加,泛型类的对象。如果添加其他类的对象就会报错。并且集合类中的方法的返回值也是也是泛型类。这样就可以避免添加了其他数据类型的数据,而且不需要进行类型的转换,更加方便。...原创 2021-05-16 19:07:36 · 76 阅读 · 0 评论 -
ArrayList类
创建对象ArrayList<Integer> arrayList=new ArrayList<Integer>();添加元素arrayList.add(67); arrayList.add(78); arrayList.add(56); arrayList.add(49); arrayList.add(2,99);遍历ArrayList集合(三种方式)//使用for循环来遍历 System.原创 2021-05-16 18:57:58 · 106 阅读 · 0 评论 -
集合概述
分类1.集合分为Collection和Map,主要区别为:Map是一种映射关系,在Map中存储的是一对键值对象。而Collection只存储值。同时,Collection和Map都是接口。2.Collection又可以分为List和Set。分别为Collection的子接口。3.ArrayList,LinkedList,为List的实现类,HsahSet和TreeSet是Set的实现类。LinkedHashSet为HashSet的子类。4.HashMap和TreeMap为Map的实现类。各个类的原创 2021-05-16 18:31:52 · 84 阅读 · 0 评论 -
Java中数组的创建方式
静态创建int [] arr=new int []{1,23,4,5}; int [] arr1={1,23,4,5};两种方式,第二种不较常用。注意点:这种创建方式创建的数组,数组长度的是由后边元素个来决定,所以在使用过程中容易造成数组越界的异常。动态创建//动态创建 int [] arr2=new int[6];动态创建会先指定数组的长度。使用下标访问数组元素System.out.println(arr2[2]); System.out原创 2021-05-15 10:33:49 · 188 阅读 · 0 评论 -
File类
public class TestFile { public static void main(String[] args) { //创建File对象 File file=new File("d:/c++document"); //文件是否存在 System.out.println(file.exists()); //判断是否是文件 System.out.println(file.isFile());原创 2021-05-11 20:02:18 · 66 阅读 · 0 评论 -
枚举类
作用当遇到要建立一组常量时,使用枚举会很方便。语法public enum Season { 春,夏,秋,冬;}使用public class TestEnum { private Season season; public Season getSeason() { return season; } public void setSeason(Season season) { this.season = season;原创 2021-05-11 18:38:49 · 52 阅读 · 0 评论 -
Random类
Math.random()该方法是产生0-1的随机数,不包括1.Random类可以提供更多类型的随机数。System.out.println(random.nextInt(10));//最大是bounder-1//产生(20-30)的随机数 System.out.println(random.nextInt(21)+10);...原创 2021-05-11 15:23:05 · 56 阅读 · 0 评论 -
Math类
Math类是一个final类,并且构造方法是private修饰,所以不能创建对象。同时Math类中属性和方法都是static所以可用类名类直接调用方法和属性。方法介绍1.找较大值 System.out.println(Math.max(78,90));2.绝对值 System.out.println(Math.abs(-6));3.正数返回1,负数返回1,0返回0 System.out.println(Math.signum(78) ); System.out.printl原创 2021-05-11 15:08:01 · 121 阅读 · 0 评论 -
DateFormat类
从名字上来看(日期形式),就应该可以明白DateFormat类是给日期来设计一种输出的形式构造方法DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");DateFormat dateFormat1=new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");参数是一个字符串,设定一种输出Date的输出模式,注意的是该字符串中的字母是有特定的意义的,所以不能随便改变。prase方法参数是原创 2021-05-09 19:46:50 · 104 阅读 · 0 评论 -
Date类
构造方法1.有参的构造方法public Date(long date) { fastTime = date; }计算机中的时间都是算出来的。他是以1970-1-1 8:00:00为基准加上毫秒数来计算时间的。fastTime就是底层要加的毫秒数。2.无参的构造方法public Date() { this(System.currentTimeMillis()); }他会拿着当前时间的毫秒数来作为参数,来调用Date有参的构造方法。3.getTi原创 2021-05-09 18:26:27 · 134 阅读 · 0 评论 -
StringBilder类源码阅读
1StringBuilder---->Stringpublic String(StringBuilder builder) { this.value = Arrays.copyOf(builder.getValue(), builder.length()); }这里其实是调用了String类的构造方法。构造方法中就是使用数组工具类的Arrays.copyOf方法进行了数组的复制。builder.getValue()获取builder底层的数组。并把该数组赋值给String原创 2021-05-09 11:59:58 · 95 阅读 · 0 评论 -
StringBuilder类
StringBuilder类与StringBuffer类都代表的可变字符序列,同时他们有共同的父类:AbstractStringBuilder类。StringBuilder类与StringBuffer类的区别1.StringBuilder类是jdk1.5才提供的,线程不安全,没有做线程同步检测,因此,效率较高。2.StringBuilder类是jdk1.0才提供的,线程安全,会做线程同步检测,开发效率较低。3.两个二类中的方法很类似。下面主要以StringBuilder类为例,来讲述方法的作用。方原创 2021-05-09 10:14:24 · 159 阅读 · 0 评论 -
String类源码
1.String类是一个final类public final class String2.底层是一个字符数组private final char value[];3.实现了Comparable接口public int compareTo(String anotherString) { int len1 = value.length; int len2 = anotherString.value.length; int lim = Math.min(len原创 2021-05-08 20:17:31 · 258 阅读 · 0 评论 -
String对象的创建方法
先看一段带代码和代码的结果public static void main(String[] args) { String str1=new String("dgg"); String str2=new String("dgg"); System.out.println(str1==str2); System.out.println(str1.equals(str2)); String str3="ddg";原创 2021-05-08 18:31:05 · 454 阅读 · 0 评论 -
String类
首先明确String类的对象代表不可变字符序列。String类中的常用方法1.创建String类的对象String str=new String("周志浩ZZH");2.输出字符串的长度(这里输出的是字符的个数) System.out.println(str.length());3.判断字符串是否为空System.out.println(str.isEmpty());4.判断字符串的开头和结尾是否有为参数中的字符串System.out.println(str.startsWith("原创 2021-05-08 17:28:40 · 361 阅读 · 0 评论 -
异常
当Java中遇到异常时,会产生异常对象使用try,catch语句来接受对象。放在try中的代码如果产生异常会在catch语句产生异常对象进行接收。并且可以原创 2021-05-06 14:26:50 · 82 阅读 · 0 评论 -
内部类
内部类分为:静态成员内部类,非静态成员内部类,局部内部类,匿名内部类。非静态成员内部类和静态成员内部类属于类的成员,而匿名内部类属于局部内部类,存在于类的某个方法中。他们的作用就在于可以非常方便的使用外部类的成员。非静态成员内部类1.非静态成员内部类作为类的成员可以使用4种权限修饰符来进行修饰,相比于外部类,外部类只能使用两个权限修饰符(public和默认)来修饰。2.非静态成员内部类可以有自己的成员变量,构造方法,成员函数。但不能有静态的方法,从时间角度上理解,静态方法创建是内部类还没有被初始化。原创 2021-05-04 12:19:40 · 93 阅读 · 0 评论 -
接口
理解1.接口是与类同级的。抽象类还属于类。2.继承是一种is-a的关系(Animal和Dog),而接口是一种has-a的关系(Bird和Flyable)。接口的特点1.接口中的基本数据类型都是全局静态常量。public static final double PI=3.14;2.接口中的方法都是全局抽象方法(jdk1.7之前),jdk1.8中接口中的方法可以有静态非抽象的方法方法。 public abstract void fly(); static void run(){}3.在原创 2021-05-03 21:20:06 · 386 阅读 · 2 评论 -
abstracte关键字
abstract修饰类1.对于像Animal这样的类,它是没有实例对象的。用abstract修饰的方法就不允许有实例对象。即不能是用new关键字类创建一个对象。2.abstract修饰的类中必须有构造方法,因为子类在创建对象时,先要调用父类的构造方法。3.一个类中如果有抽象方法,那么该类必须为抽象类。public abstract class Vehicle { Vehicle(){ System.out.println("service people"); }原创 2021-05-03 11:43:34 · 223 阅读 · 0 评论 -
final关键字
final可修饰:类final修饰的类没有子类。Java中常见的final类有:String类,System类,Math类。public final class CodingMath 方法可以修饰普通方法,但不能修饰构造方法。修饰的普通方法不能被重写。当类是一个final类时,该类内的方法也一定时不能被重写的。public static int ads(int a){ if(a>0){ return a; }else{原创 2021-05-03 11:07:04 · 75 阅读 · 0 评论 -
多态
理解对于同一件事情,不同的人用不同的做法,例如吃饭,有的人吃大米,有的人吃面条。多态是对于具体的某个对象而言的。不同的对象在相同的事情上表现出不同可做法。作用在定义方法时,用父类做方法的形参,实参可以是任意子类的对象的引用。创建对象时任意子类的对象可以赋值个其父类的引用。提高代码的重用性。public class Programmer { //要继承的方法 public void writeCode(){ System.out.println("程序员喜欢敲代码"原创 2021-05-01 19:30:20 · 125 阅读 · 0 评论 -
Java中类的组合
理解类的组合就是在一个类中把其他的类当作自生的成员属性来使用。与继承的区别为:组合是一种 has的关系(Computer和Cpu的关系),继承是一种is的关系(Animal和Dog的关系)代码示例为: private Cpu cpu= new Cpu(); private Memory memory=new Memory(); private Keyboard keyboard=new Keyboard();作用提高类的灵活性,能用组合的情况下尽量用,少用继承,因为Java中的继原创 2021-05-01 18:27:40 · 2029 阅读 · 0 评论