编程语言
首页 > 编程语言> > 尚学堂JAVA基础学习笔记

尚学堂JAVA基础学习笔记

作者:互联网

目录

尚学堂JAVA基础学习笔记

写在前面

学习链接:Java 视频教程全集

课件链接:Java课件

第1章 JAVA入门

第2章 数据类型和运算符

第3章 控制语句

第4章 Java面向对象基础

1. 面向对象基础

2. 面向对象的内存分析

3. 构造方法

4. 垃圾回收机制(Garbage Collection)

5. this关键字

6. static 关键字

2.png

7. 静态初始化块

8. 参数传值机制

9. 包

第5章 Java面向对象进阶

1. 继承

2. Object类

3. super关键字

4. 封装

  1. 提供相应的get/set方法来访问相关属性,这些方法通常是public修饰的,以提供对属性的赋值与读取操作(注意:boolean变量的get方法是is开头!)。
  2. 一些只用于本类的辅助性方法可以用private修饰,希望其他类调用的方法用public修饰。

5. 多态(polymorphism)

6. final关键字

7. 抽象方法和抽象类

8. 接口

9. 内部类

10. String

11. 补充内容

第6章 异常机制

1. 异常

2. 处理异常

3. 自定义异常

  1. 在程序中,可能会遇到JDK提供的任何标准异常类都无法充分描述清楚我们想要表达的问题,这种情况下可以创建自己的异常类,即自定义异常类。
  2. 自定义异常类只需从Exception类或者它的子类派生一个子类即可。
  3. 自定义异常类如果继承Exception类,则为受检查异常,必须对其进行处理;如果不想处理,可以让自定义异常类继承运行时异常RuntimeException类。
  4. 习惯上,自定义异常类应该包含2个构造器:一个是默认的构造器,另一个是带有详细信息的构造器。
  5. 使用异常机制的建议
    1. 要避免使用异常处理代替错误处理,这样会降低程序的清晰性,并且效率低下。
    2. 处理异常不可以代替简单测试---只在异常情况下使用异常机制。
    3. 不要进行小粒度的异常处理---应该将整个任务包装在一个try语句块中。
    4. 异常往往在高层处理 。

第7章 数组

1. 数组概述和特点

2. 数组的遍历

3. 数组的拷贝

4. java.util.Arrays类

5. 多维数组

6. 冒泡排序和二分法查找

第8章 常用类

1. 包装类

2. String类

3. 时间处理相关类

图8-14 日期时间相关类.png

4. Math类

5. File类

6. 枚举

第9章 容器

1. 泛型

2. Collection接口

3. List

4. Map

5. Set

6. 迭代器

7. Collections辅助类

第10章 IO技术

1. IO入门

2. IO的API

3. 装饰流

4. IO实战

5. CommonsIO

第11章 多线程技术

1. 概念

2. 线程状态

  1. 新生状态(New)

    用new关键字建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态。

  2. 就绪状态(Runnable)

    处于就绪状态的线程已经具备了运行条件,但是还没有被分配到CPU,处于“线程就绪队列”,等待系统为其分配CPU。就绪状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会进入执行状态。一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。有4中原因会导致线程进入就绪状态:

    1. 新建线程:调用start()方法,进入就绪状态;

    2. 阻塞线程:阻塞解除,进入就绪状态;

    3. 运行线程:调用yield()方法,直接进入就绪状态;

    4. 运行线程:JVM将CPU资源从本线程切换到其他线程。

  3. 运行状态(Running)

    在运行状态的线程执行自己run方法中的代码,直到调用其他方法而终止或等待某资源而阻塞或完成任务而死亡。如果在给定的时间片内没有执行结束,就会被系统给换下来回到就绪状态。也可能由于某些“导致阻塞的事件”而进入阻塞状态。

  4. 阻塞状态(Blocked)

    阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪)。有4种原因会导致阻塞:

    1. 执行sleep(int millsecond)方法,使当前线程休眠,进入阻塞状态。当指定的时间到了后,线程进入就绪状态。

    2. 执行wait()方法,使当前线程进入阻塞状态。当使用nofity()方法唤醒这个线程后,它进入就绪状态。

    3. 线程运行时,某个操作进入阻塞状态,比如执行IO流操作(read()/write()方法本身就是阻塞的方法)。只有当引起该操作阻塞的原因消失后,线程进入就绪状态。

    4. join()线程联合: 当某个线程等待另一个线程执行结束后,才能继续执行时,使用join()方法。

  5. 死亡状态(Terminated)

    死亡状态是线程生命周期中的最后一个阶段。线程死亡的原因有两个。一个是正常运行的线程完成了它run()方法内的全部工作; 另一个是线程被强制终止,如通过执行stop()或destroy()方法来终止一个线程(注:stop()/destroy()方法已经被JDK废弃,不推荐使用)。

    当一个线程进入死亡状态以后,就不能再回到其它状态了。

3. 线程的优先级

  1. NORM_PRIORITY 5

  2. MIN_PRIORITY 1

  3. MAX_PRIORITY 10

    /**
     * @author: Li Tian
     * @contact: litian_cup@163.com
     * @software: IntelliJ IDEA
     * @file: PriorityTest1.java
     * @time: 2019/11/4 12:38
     * @desc: 多线程优先级
     */
    
    public class PriorityTest1 {
        public static void main(String[] args) {
            MyPriority mp = new MyPriority();
            Thread t1 = new Thread(mp);
            Thread t2 = new Thread(mp);
            Thread t3 = new Thread(mp);
            Thread t4 = new Thread(mp);
            Thread t5 = new Thread(mp);
            Thread t6 = new Thread(mp);
    
            t1.setPriority(Thread.MAX_PRIORITY);
            t2.setPriority(Thread.MAX_PRIORITY);
            t3.setPriority(Thread.MAX_PRIORITY);
            t4.setPriority(Thread.MIN_PRIORITY);
            t5.setPriority(Thread.MIN_PRIORITY);
            t6.setPriority(Thread.MIN_PRIORITY);
    
            t1.start();
            t2.start();
            t3.start();
            t4.start();
            t5.start();
            t6.start();
        }
    }
    
    class MyPriority implements Runnable {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName() + "-->" + Thread.currentThread().getPriority());
            Thread.yield();
        }
    }

4. 守护线程

5. 获取线程基本信息的方法

6. 并发控制

1. 同步

package com.sxt.thread;

/**
 * @author: Li Tian
 * @contact: litian_cup@163.com
 * @software: IntelliJ IDEA
 * @file: Web12306.java
 * @time: 2019/10/30 12:36
 * @desc: 线程安全买票
 */

public class Safe12306 implements Runnable {
    // 票数
    private int ticketNums = 10;
    private boolean flag = true;

    @Override
    public void run() {
        while (flag) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            test();
        }
    }

    private void test() {
        if (ticketNums <= 0) {  // 考虑的是没有票的情况
            flag = false;
            return;
        }
        synchronized (this) {
            if (ticketNums <= 0) {  // 考虑的是最后一张票的情况
                flag = false;
                return;
            }
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + "-->" + ticketNums--);
        }
    }

    public static void main(String[] args) {
        // 一份资源
        Safe12306 web = new Safe12306();
        // 多个代理
        new Thread(web, "张三").start();
        new Thread(web, "李四").start();
        new Thread(web, "王五").start();
    }
}

2. 死锁

3. 并发协作

7. 高级主题

第12章 网络编程

1. 概念

  1. 数据发送处理过程

​ (1) 应用层将数据交给传输层,传输层添加上TCP的控制信息(称为TCP头部),这个数据单元称为段(Segment),加入控制信息的过程称为封装。然后,将段交给网络层。

​ (2) 网络层接收到段,再添加上IP头部,这个数据单元称为包(Packet)。然后,将包交给数据链路层。

​ (3) 数据链路层接收到包,再添加上MAC头部和尾部,这个数据单元称为帧(Frame)。然后,将帧交给物理层。

​ (4) 物理层将接收到的数据转化为比特流,然后在网线中传送。

  1. 数据接收处理过程

​ (1) 物理层接收到比特流,经过处理后将数据交给数据链路层。

​ (2) 数据链路层将接收到的数据转化为数据帧,再除去MAC头部和尾部,这个除去控制信息的过程称为解封,然后将包交给网络层。

​ (3) 网络层接收到包,再除去IP头部,然后将段交给传输层。

​ (4) 传输层接收到段,再除去TCP头部,然后将数据交给应用层。

 从以上传输过程中,可以总结出以下规则:

​ (1) 发送方数据处理的方式是从高层到底层,逐层进行数据封装。

​ (2) 接收方数据处理的方式是从底层到高层,逐层进行数据解封装。

​ 接收方的每一层只把对该层有意义的数据拿走,或者说每一层只能处理发送方同等层的数据,然后把其余的部分传递给上一层,这就是对等层通信的概念。

图12-3 数据封装.png

图12-4 数据解封.png

package com.sxt.loc;

import java.net.MalformedURLException;
import java.net.URL;

/**
 * @author: Li Tian
 * @contact: litian_cup@163.com
 * @software: IntelliJ IDEA
 * @file: URLTest.java
 * @time: 2019/11/14 9:27
 * @desc: URL练习
 */

public class URLTest {
    public static void main(String[] args) throws MalformedURLException {
        URL url = new URL("http://www.baidu.com:80/index.html?uname=shsxt&age=18#a");
        // 获取四个值
        System.out.println("协议:" + url.getProtocol());
        System.out.println("域名|ip:" + url.getHost());
        System.out.println("端口:" + url.getPort());
        System.out.println("请求资源1:" + url.getFile());
        System.out.println("请求资源2:" + url.getPath());

        // 参数
        System.out.println("参数:" + url.getQuery());
        // 锚点
        System.out.println("锚点:" + url.getRef());
    }
}

2. UDP编程

3. TCP编程

4. 在线聊天室

第13章 J20飞机游戏


我的CSDN:https://blog.csdn.net/qq_21579045

我的博客园:https://www.cnblogs.com/lyjun/

我的Github:https://github.com/TinyHandsome

纸上得来终觉浅,绝知此事要躬行~

欢迎大家过来OB~

by 李英俊小朋友

标签:JAVA,String,java,System,笔记,学堂,new,public,out
来源: https://www.cnblogs.com/lyjun/p/11956413.html