Java基础大纲

java语法及分类

  • java基础常识
    • 概述
    • 基本语法
    • 数据类型
    • 控制语句
    • 方法
    • 面向对象
    • 面向对象相关内容
    • 数组
    • 相关
    • 异常
    • 集合
    • I/0流
    • 多线程
    • 反射
    • 注解
    • 琐碎知识点

java基础常识

概述

  1. java特点
    1)面向对象:看名字它是注重对象的。当解决一个问题的时候,面向对象会把事物抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决。(面向过程:从名字可以看出它是注重过程的。当解决一个问题的时候,面向过程会把事情拆分成: 一个个函数和数据(用于方法的参数) 。然后按照一定的顺序,执行完这些方法(每个方法看作一个过程),等方法执行完了,事情就搞定了。)

    相关

    String类。
    1.1、对String在内存存储方面的理解:
    第一:字符串一旦创建不可变。
    第二:双引 括起来的字符串存储在字符串常量池中。
    第三:字符串的比较必须使用equals方法。
    第四:String已经重写了toString()和equals()方法。
    1.2、String的构造方法。
    String s = “abc”;
    String s = new String(“abc”);
    String s = new String(byte数组);
    String s = new String(byte数组, 起始下标, 长度);
    String s = new String(char数组);
    String s = new String(char数组, 起始下标, 长度);
    StringBuffer/StringBuilder
    2.1、StringBuffer/StringBuilder可以看做可变长度字符串。
    2.2、StringBuffer/StringBuilder初始化容量16.
    2.3、StringBuffer/StringBuilder是完成字符串拼接操作的,方法名:append
    2.4、StringBuffer是线程安全的。StringBuilder是非线程安全的。
    2.5、频繁进行字符串拼接不建议使用“+”
    3.1、包装类存在有什么用br> 方便编程。
    3.2、八种包装类的类名是什么br> Byte
    Short
    Integer
    Long
    Float
    Double
    Boolean
    Character
    3.3、所有数字的父类Number
    什么是自动装箱和自动拆箱,代码怎么写br> Integer x = 100; // x里面并不是保存100,保存的是100这个对象的内存地址。
    Integer y = 100;
    System.out.println(x == y); // true
    Integer x = 128;
    Integer y = 128;
    System.out.println(x == y); // false
    解析
    Integer类常用方法。Integer.valueOf(),, Integer.parseInt(“123”),, Integer.parseInt(“中文”) : NumberFormatException
    、Integer String int三种类型互相转换。

    ###,###.## 表示加入千分位,保留两个小数。
    ###,###.0000 表示加入千分位,保留4个小数,不够补0

    3.2、BigDecimal
    财务软件中通常使用BigDecimal

    4、随机数
    4.1、怎么产生int类型随机数。
    Random r = new Random();
    int i = r.nextInt();
    4.2、怎么产生某个范围之内的int类型随机数。
    Random r = new Random();
    int i = r.nextInt(101); // 产生[0-100]的随机数。

    5、枚举
    5.1、枚举是一种引用数据类型。
    5.2、枚举编译之后也是class文件。
    5.3、枚举类型怎么定义br> enum 枚举类型名{
    枚举值,枚举值2,枚举值3
    }
    5.4、当一个方法执行结果超过两种情况,并且是一枚一枚可以列举出来
    的时候,建议返回值类型设计为枚举类型。

    异常

    0、异常处理机制
    java中异常的作用是:增强程序健壮性。
    java中异常以类和对象的形式存在。
    1、java的异常处理机制
    1.1、异常在java中以类和对象的形式存在。那么异常的继承结构是怎样的br> Object
    Object下有Throwable(可抛出的)
    Throwable下有两个分支:Error(不可处理,直接退出JVM)和Exception(可处理的)
    Exception下有两个分支:
    Exception的直接子类:编译时异常(要求程序员在编写程序阶段必须预先对这些异常进行处理,如果不处理编译器 错,因此得名编译时异常。)。
    RuntimeException:运行时异常。(在编写程序阶段程序员可以预先处理,也可以不管,都行。)
    详情
    1.2、编译时异常和运行时异常,都是发生在运行阶段。编译阶段异常是不会发生的。
    编译时异常因为什么而得名br> 因为编译时异常必须在编译(编写)阶段预先处理,如果不处理编译器 错,因此得名。 所有异常都是在运行阶段发生的。因为只有程序运行阶段才可以new对象。 因为异常的发生就是new异常对象。

    I/0流

    多线程

    1、什么是进程么是线程br> 进程是一个应用程序(1个进程是一个软件)。线程是一个进程中的执行场景/执行单元。 一个进程可以启动多个线程。
    2、对于java程序来说,当在DOS命令窗口中输入:
    java HelloWorld 回车之后。会先启动JVM,而JVM就是一个进程。JVM再启动一个主线程调用main方法。同时再启动一个垃圾回收线程负责看护,回收垃圾。最起码,现在的java程序中至少有两个线程并发,一个是垃圾回收线程,一个是执行main方法的主线程。
    3、进程和线程是什么关系个例子
    阿里巴巴:进程
    马云:阿里巴巴的一个线程
    童文红:阿里巴巴的一个线程
    京东:进程
    强东:京东的一个线程
    妹妹:京东的一个线程
    进程可以看做是现实生活当中的公司。线程可以看做是公司当中的某个员工。
    注意:
    进程A和进程B的内存独立不共享。(阿里巴巴和京东资源不会共享的!)
    魔兽游戏是一个进程
    酷狗音乐是一个进程
    这两个进程是独立的,不共享资源。
    线程A和线程B呢br> 在java语言中:
    线程A和线程B,堆内存和方法区内存共享。但是栈内存独立,一个线程一个栈。
    假设启动10个线程,会有10个栈空间,每个栈和每个栈之间,互不干扰,各自执行各自的,这就是多线程并发。
    火车站,可以看做是一个进程。 火车站中的每一个售票窗口可以看做是一个线程。 我在窗口1购票,你可以在窗口2购票,你不需要等我,我也不需要等你。所以多线程并发可以提高效率。
    java中之所以有多线程机制,目的就是为了提高程序的处理效率。
    4、思考一个问题:
    使用了多线程机制之后,main方法结束,是不是有可能程序也不会结束。main方法结束只是主线程结束了,主栈空了,其它的栈(线程)可能还在压栈弹栈。

    }
    }
    // 创建线程对象
    MyThread t = new MyThread();
    // 启动线程。
    t.start();

    第二种方式:编写一个类,实现java.lang.Runnable接口,实现run方法。
    // 定义一个可运行的类
    public class MyRunnable implements Runnable {
    public void run(){

    }
    }
    // 创建线程对象
    Thread t = new Thread(new MyRunnable());
    // 启动线程
    t.start();
    注意:第二种方式实现接口比较常用,因为一个类实现了接口,它还可以去继承其它的类,更灵活。
    7、关于线程对象的生命周期br> 新建状态
    就绪状态
    运行状态
    阻塞状态
    死亡状态
    1、(这部分内容属于了解)关于线程的调度

    抢占式调度模型:
    那个线程的优先级比较高,抢到的CPU时间片的概率就高一些/多一些。
    java采用的就是抢占式调度模型。

    均分式调度模型:
    平均分配CPU时间片。每个线程占有的CPU时间片时间长度一样。
    平均分配,一切平等。
    有一些编程语言,线程调度模型采用的是这种方式。

    1.2、java中提供了哪些方法是和线程调度有关系的呢/p>

    实例方法:
    void setPriority(int newPriority) 设置线程的优先级
    int getPriority() 获取线程优先级
    最低优先级1
    默认优先级是5
    最高优先级10
    优先级比较高的获取CPU时间片可能会多一些。(但也不完全是,大概率是多的。)

    静态方法:
    static void yield() 让位方法
    暂停当前正在执行的线程对象,并执行其他线程
    yield()方法不是阻塞方法。让当前线程让位,让给其它线程使用。
    yield()方法的执行会让当前线程从“运行状态”回到“就绪状态”。
    注意:在回到就绪之后,有可能还会再次抢到。

    实例方法:
    void join()
    合并线程
    class MyThread1 extends Thread {
    public void doSome(){
    MyThread2 t = new MyThread2();
    t.join(); // 当前线程进入阻塞,t线程执行,直到t线程结束。当前线程才可以继续。
    }
    }

    class MyThread2 extends Thread{

    2、关于多线程并发环境下,数据的安全问题。

    2.1、为什么这个是重点br> 以后在开发中,我们的项目都是运行在服务器当中,而服务器已经将线程的定义,线程对象的创建,线程的启动等,都已经实现完了。这些代码我们都不需要编写。

    最重要的是:你要知道,你编写的程序需要放到一个 多线程的环境下运行,你更需要关注的是这些数据在多线程并发的环境下是否是安全的。(重点:*****)

    2.2、什么时候数据在多线程并发的环境下会存在安全问题呢br> 三个条件:
    条件1:多线程并发。
    条件2:有共享数据。
    条件3:共享数据有修改的行为。
    满足以上3个条件之后,就会存在线程安全问题。

    2.3、怎么解决线程安全问题呢br> 当多线程并发的环境下,有共享数据,并且这个数据还会被修改,此时就存在线程安全问题,怎么解决这个问题程排队执行。(不能并发)。 用排队执行解决线程安全问题。这种机制被称为:线程同步机制。专业术语叫做:线程同步,实际上就是线程不能并发了,线程必须排队执行。

    怎么解决线程安全问题呀br> 使用“线程同步机制”。

    线程同步就是线程排队了,线程排队了就会牺牲一部分效率,没办法,数据安全第一位,只有数据安全了,我们才可以谈效率。数据不安全,没有效率的事儿。

    2.4、说到线程同步这块,涉及到这两个专业术语:

    异步编程模型:
    线程t1和线程t2,各自执行各自的,t1不管t2,t2不管t1, 谁也不需要等谁,这种编程模型叫做:异步编程模型。 其实就是:多线程并发(效率较高。)
    异步就是并发。

    同步编程模型:
    线程t1和线程t2,在线程t1执行的时候,必须等待t2线程执行
    结束,或者说在t2线程执行的时候,必须等待t1线程执行结束,
    两个线程之间发生了等待关系,这就是同步编程模型。
    效率较低。线程排队执行。

    同步就是排队。

    3、Java中有三大变量重要的内容。】

    实例变量:在堆中。

    静态变量:在方法区。

    局部变量:在栈中。

    以上三大变量中:

    局部变量永远都不会存在线程安全问题。
    因为局部变量不共享。(一个线程一个栈。)
    局部变量在栈中。所以局部变量永远都不会共享。

    实例变量在堆中,堆只有1个。
    静态变量在方法区中,方法区只有1个。
    堆和方法区都是多线程共享的,所以可能存在线程安全问题。

    局部变量+常量:不会有线程安全问题。
    成员变量:可能会有线程安全问题。

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年10月6日
下一篇 2022年10月6日

相关推荐