栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-10-13

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-13

Java基础-笔记/总结 java语言的特点

简单:语法简单、没有多继承、没有指针,但有引用、自动的垃圾回收机制

面向对象:提供了类、接口等;

安全:java没有像c/c++那样的指针,操作内存需要通过对象的实例,这样使应用更加安全

跨平台:一套代码,到处运行,这主要依赖于jvm,jvm相当于中介,java编译成字节码文件后,jvm将字节码翻译成各硬件可以执行的指令,因此开发者无须对不同平台做适配。

支持多线程:多个任务可以同时进行

什么是JDK

JDK包括是java的核心,包括Java编译器,Java运行工具(jre)、Java文档生成工具、java打包工具等;Jdk是给开发者使用的,JDK是软件开发包

什么是Jre

Java运行的环境,包括jvm、java的基础类库等

Java运行机制

Java运行时需要经过编译,然后才能运行

步骤:Javac Demo.java //javac命令会将.java文件编译成jvm可以执行的.class文件

java Demo //java命令启动运行程序,java虚拟机将.class文件加载到内存中,这个过程是类加载过程,由类加载器完成(类加载器有:启动类类加载器、平台类加载器(java8以上有,java8及以下为扩展类加载器),应用类加载器),然后对内存中的java类进行执行

Java的语法
public class ClassName{  //修饰符 class  类名
   public static void main(String[] agrs){
        //单行注释
    
    
    
    
    int userId = 123;//标识符只能是字母、下划线_、$组成,不能是java保留的关键字;标识符区分大小写  不符合命名:1222UserId、class等
    //
    if(条件表达式){}else if(){}else
    switch(表达式){
        case 1:  语句。。。break;       
            
    }
    while(表达式){}//可能一次都不会执行
    do{}while(表达式){}  //至少会执行一次
    for(初始表达式;循环条件;操作表达式){}
    //数组的定义:
    int[] x = new int[10];
    int[] y;
       y = new int[10];
       
   }
    
   
    
    访问修饰符 返回值类型 方法名(参数类型 参数名.....){//方法
        方法体
    }
}
java的数据类型

基本数据类型:

​ 数值型: byte:8位(1个字节), short:16位(2个字节), int:32位(4个字节), long:64位(8个字节), float:4个字节, double:8个字节

​ 字符型(char):2个字节

​ 布尔型(boolean)

引用数据类型:类、接口、数组、枚举、注解

数据类型转换

自动类型转换:也叫隐式类型转换;条件:两种数据类型彼此兼容、目标类型取值范围大于源类型的范围:比如byte b = 2;int x = b; x+=b;

强制类型转换:也叫显示类型转换,两种数据类型之间的转换需要进行显示的声明,数据类型不兼容,目标类型取值范围小于源类型时就需要进行强制类型转换

面向对象 什么是面向对象

在生活中,各种事物都有不同的属性,事物之间都有这不同的关系,在程序中使用对象来映射生活中的事物,使用对象的关系来描述对象之间的关系;

例如:学生和老师;学生有学号、姓名等信息,老师有职工号、教学科目等;老师与学生之间的关系就是老师教授学生

面向对象的特点

封装性:封装就是将对象的属性和行为封装起来,不让外界知道内部细节

继承性:继承就是将一个类的特性继承给另一个类,继承类可以会拥有父类的属性和行为,这样的好出就是增强了代码的复用等

多态性:多态性是指在程序中可以出现重名的现象,指在一个类中定义的属性和方法被其他类继承后,他们可以具有不同的数据类型或表现出不同的行为,这 就使得同一个属性和方法在不同的类中有不同的语义;

this关键字的理解

this表示当前类的引用,可以用this来调用成员变量、调用成员方法,this(参数) 可以用来调用构造方法

super关键字的理解

super关键字用来访问父类的方法或成员变量,也可以调用父类的构造方法

final关键字的理解

final关键字可以修饰类、变量、方法,表示最终的,不可改变的

final修饰的类不能被继承、修饰的方法不能被子类重写,修饰的变量是常量,常量只能被赋值一次

static关键字的理解

static用来修饰成员变量、成员方法、代码块等;

被修饰的成员方法称为静态方法,无法通过实例化的方式调用,只能是ClassName.staticMethodName()的形式

静态代码块,static{ 、、、、}的形式,类被加载的时候,静态代码块会被执行,类只会被加载一次,所以静态代码块只能被执行一次;静态代码块可以用来 做初始化工作;

静态成员变量在内存中只存在一份,因此类的多个实例可以共享一个静态成员变量的数据,使用ClassName.staticName的形式使用;例如:Student stu1 = new Student();Stu.schoolName =“XXXX”;Student stu2 = new Student();stu1.schoolName 和stu2.schoolName的值一样

内部类

Java允许在内部定义类,这种类就是内部类

内部类有成员内部类、静态内部类、方法内部类

成员内部类:类的成员可以是变量、方法,也可以是成员内部类,例如下:

静态内部类:使用static关键字修饰的一个成员内部类

方法内部类:在一个方法中定义的类

public class LindedList{

​ private class Node{}//这就是一个成员内部类

​ static class Node{}//这是一个静态内部类

​ public void mehodName(){

​ class Inner{ }//方法内部类

​ }

}

注意事项:静态内部类中只能访问外部类的静态成员;静态内部类中可以定义静态成员,而在非静态的内部类中不允许定义静态成员

匿名内部类

接口除了被实现,还可以使用new 来实现,比如 new IService(){

​ public void test(){}

}

抽象类

抽象类使用abstract关键字修饰类 public abstract class ClassName{}

抽象方法定义:public abstract void shout();

抽象类不可以被实例化,抽象方法没有方法体

抽象类允许方法有方法体

抽象类中可以有静态成员,有方法体

抽象类不能用final,static,private修饰;可以是默认、public、protected;

接口

接口使用 interface 修饰,例如:public interface ClassdName{}

接口中所有方法都是抽象方法,默认使用public abstract修饰

接口中的变量默认使用public static final来修饰,既全局常量

接口中的方法都是抽象方法,因此不能通过实例化对象的方式来调用接口中的方法,需要定义一个类来实现一个接口,使用implements关键字,例如 public class ClassA implements IUserService{}

继承

使用extends 关键字,例如 public class A extends B{}

final修饰的成员不能被继承,final修饰的方法不能被重写,static修饰的方法不能被重写,

多态
多态的定义

指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)

实现多态的技术

实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

多态存在的三个必要条件
  • 继承:在多态中必须存在有继承关系的子类和父类。

  • 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

  • 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。

    对于Java而言,它多态的实现机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。即超类可是使用子类方法,但不能调用父类同名方法。

比如使用一个父类的引用来指向子类的实例;比如

public class A extends C {}

public class B extends C{}

C a = new A();

C b = new B();

多态的优点

1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。

2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。

3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。

4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。

5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

异常

异常是程序在编译或者运行时出现的错误

异常分为Error和Exception,Error类是错误类,Java在运行时系统内部出现的错误或者资源耗尽,靠修改代码是无法恢复的

Exception类是异常类,是程序本身可以处理的错误,Exception的子类RuntimeException表示运行时异常,除了RutimeException及其子类外,其他的都是编译时异常

Excetpion和Error都是ThrowAble的子类

访问修饰符及访问权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WdmcqLj6-1634123151033)(D:DesktopFiles笔记imgimage-20210924111012137.png)]

多线程

进程:每个独立执行的程序可称为一个进程,也就是正在运行的程序,比如系统中任务管理器中,QQ.exe等;每个运行的程序都是一个进程

线程:在一个进程中,还可以有多个单元同时进行,这些执行单元可以看作是程序执行的一条条线索,被称为线程;(程序中负责执行的哪个东东就叫做线程)

创建线程主要有两种方法:

通过继承Thread类,覆写Thread类的run()方法,再有就是通过实现Runnable接口,

比较创建线程的两种方式:
开发中,优先选择实现Runable接口的方式
原因1:实现的方式没有类的单继承性的局限性
2:实现的方式更适合用来处理多个线程有共享数据的情况
联系:Thread也是实现自Runable,两种方式都需要重写run()方法,将线程要执行的逻辑声明在run中

线程的生命周期

线程的生命周期有5个阶段:新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)、死亡状态(Terminated)

线程的调度

程序中的多个线程是并发执行的,某个线程若想被执行就必须要得到CPU的使用权,Java虚拟机会按照特定的机制为程序的每个线程分配CPU的使用权,这种机制就是线程的调度

线程的调度有两种:分时调度模型和抢占式调度模型

分时调度模型就是指所有的线程轮流获得CPU的使用权,并且平均分配每个线程占用的CPU的时间片;

抢占式调度模型是指让可运行池中优先级高的线程先占用CPU,对于优先级相同的线程,随机选择一个线程使其占用CPU,当他失去了CPU的使用权后,再随机选择其他线程获取CPU使用权,Java虚拟机默认采用抢占式调度模型

线程的优先级:线程的优先级用1-10之间的整数表示,数字越大优先级越高;通过Thread类的setPriority(int newPriority)设置

线程休眠:可以使用sleep(long millis)实现,将CPU让给别的线程执行,当前执行的线程会暂停一定时间

线程让步:通过yield()方法来实现,该方法不会阻塞该线程,它只是将线程转换成就绪状态,让系统的调度重新调度一次。当调用yield()方法后,只有与当前线程优先级相同或更高的才能获得执行的机会

线程插队:调用join()方法,调用的线程会进入阻塞状态

多线程同步

多线程同步,就是限制某个资源在同一时刻只能被一个线程访问

线程安全:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。

线程安全问题其实就是多个线程同时处理共享资源导致的

同步代码块:synchronized(lock){

操作共享资源代码块

}

lock是一个锁对象,它是同步代码块的关键,当线程执行同步代码块时,会首先会检查锁对象的标志位,默认情况下标志位为1,此时线程会执行同步代码块,同时将锁对象的标志置为0,新线程会发生阻塞,等待当前线程执行完同步代码块后,锁对象的标志位被设为1,新的线程才能执行同步代码块。比如排队取钱,一个去完后才能让下一个

同步方法:使用synchronized修饰的方法;被修饰的方法在同一时刻只能被一个线程调用,其他线程会发生阻塞,直到当前线程执行完

死锁问题:两个线程在运行时都在等待对方的锁,这就造成了程序的停滞,这种现象就是死锁

多线程通信?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/322498.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号