Java整体知识架构详解之基础知识
java基础知识点笔记
java基础知识点笔记Java是一门非常重要的计算机语言,具有良好的跨平台性和易读性和易学性。
尤其是基于Java开发的移动端和Web端产品,其优秀的性能和可扩展性在行业中得到了广泛的青睐。
作为Java开发工程师,熟练掌握Java的基础知识非常重要。
一、Java基本语法Java程序包含一个或多个类,不同类可以相互调用使用。
每一个Java程序都需要有一个入口点,即main()函数。
在Java中,注释采用“//”或“/*...*/”的形式,可以单行或多行注释。
Java变量需要先声明再使用,可以定义基本类型变量和引用类型变量。
Java中的运算符包括算术运算符、逻辑运算符等。
二、Java面向对象编程Java是一门面向对象的编程语言,对象是Java程序的基本组成单元。
Java中的类封装了数据和方法,可以实现类的继承和多态。
在Java中,使用构造函数实例化对象,可以使用访问控制符来控制类成员的访问权限。
三、Java流程控制语句Java中的流程控制语句有条件语句(if、if-else、switch)、循环语句(while、do-while、for)等。
其中,if语句可以进行嵌套,switch语句可以使用break语句避免case穿透问题。
四、Java数组Java中的数组是一组相同类型的数据序列,从0开始编号,使用方括号表示。
在Java中可以使用foreach来遍历数组,也支持多维数组。
五、Java异常处理Java程序中的异常指的是程序出现的错误。
异常处理是Java程序中的一部分,可以使用try-catch语句来捕获并处理异常。
Java中的异常类型包括运行时异常和受检查异常。
六、Javaio编程Java中的文件和I/O操作称为io编程。
Java的io编程采用字节流和字符流,其中字节流用于处理二进制数据,字符流用于处理文本数据。
Java中的io操作需要进行文件的读取、写入等操作,可以使用File类来操作文件。
七、Java线程Java程序中,线程指的是一条执行序列,Java中的线程可以继承Thread类或实现Runnable接口。
java基础知识点
java基础知识点
1、面向对象:Java语言是一种面向对象的编程语言,它使用Java类和Java对象来构建复杂的系统。
Java类包含方法(程序执行的语句)和属性(关于对象的信息)。
可以使用对象间的关系(如继承和实现)来“重用”代码。
2、语言基础:Java语言是一种类型安全的、健壮的和高效的编程语言,它具有静态类型系统、异常处理、泛型和沙箱安全机制等功能。
这种类型安全指的是Java可以通过显式声明变量的数据类型来确保变量的内容。
3、继承:Java支持继承机制,可以将多个类“组装”在一起,互相共享代码并复用属性和方法。
继承是一种多态性,它允许每个类“定义”它自己独有的行为,但与同一父类共享相同接口。
4、包:Java使用java包来组织类和接口,它提供了独立的命名空间,可以将相似的类和接口组装在一起,以保持代码整洁和可维护性。
5、容器:容器是Java中的一种特殊数据类型,它可以储存和管理多个对象。
Java提供了多种容器,比如ArrayList,Map,HashMap 等,帮助程序员管理复杂的系统。
java基础知识总结java基础知识总结ppt
java基础知识总结java基础知识总结pptjava基础知识总结篇(一):Java基础知识总结1.什么是类和对象?__ING IS OBJECT(万物皆对象)所有的事物都有两个方面:有什么(属性):用来描述对象。
能够做什么(方法):告诉外界对象有那些功能。
对象:对现实世界中的实体的抽象。
在计算机中,是指可标识的存储区域。
类:具有共同属性和行为的对象的抽象。
类是创建对象的模板。
2.为什么要使用面向对象?首先,面向对象符合人类看待事物的一般规律。
对象的方法的实现细节对其他对象是屏蔽的。
我们通过类来看待对象,类是对象的抽象。
其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。
对象之间的耦合性一定要低。
这样才能使每个对象本身做成最好的。
对于对象的要求:高内聚、低耦合,这样容易拼装成为一个系统。
实现高内聚就是要最大限度低提高复用性(复用性好是因为高内聚)。
可复用性是OOP的基础。
3.面向过程思想和面向对象思想比较?面向过程的思想:由过程、步骤、函数组成,以过程为核心;面向对象的思想:以对象为中心,先开发类,得到对象,通过对象之间相互通信实现功能。
4.实例变量和局部变量的比较实例变量:定义在类中但在任何方法之外。
(New出来的均有初值)局部变量:定义在方法之中的变量。
局部变量要先赋值,再进行运算,而实例变量均已经赋初值。
这是局部变量和实例变量的一大区别。
实例变量的对象赋值为null。
不允许在同一作用域内定义两个相同名称的实例变量和局部变量,但实例变量和局部变量允许命名冲突。
区分实例变量和局部变量时一定要写this。
5.介绍一下对构造函数的理解构造方法是当用类生成对象时,系统在生成对象的过程中利用的方法。
注意:构造方法在生成对象的时候会被调用,但并不是构造方法生成了对象。
构造方法没有返回值。
格式为:public 方法名。
构造方法的方法名与类名相同。
构造方法是在对象生成的过程中自动调用,不可能利用指令去调用。
java基础知识大全(必看经典)
第一讲 Java语言入门1.1 Java的特点1.1.1面向对象:•与C++相比,JAVA是纯的面向对象的语言C++为了向下兼容C,保留了很多C里面的特性,而C,众所周知是面向过程的语言,这就使C++成为一个"混血儿"。
而JAVA语法中取消了C++里为兼容C所保留的特性,如取消了头文件、指针算法、结构、单元等。
1.1.2可移植(平台无关性):•生成中间字节码指令与其他编程语言不同,Java并不生成可执行文件(.exe文件),而是生成一种中间字节码文件(.class文件)。
任何操作系统,只要装有Java虚拟机(JVM),就可以解释并执行这个中间字节码文件。
这正是Java实现可移植的机制。
•原始数据类型存储方法固定,避开移植时的问题Java的原始数据类型的大小是固定的。
比如,在任何机器上,整型都是32位,而C++里整型是依赖于目标机器的,对16位处理器(比如8086),整数用两个字节表示;在像Sun SPARC这样的32位处理器中,整数用4个字节表示。
在Intel Pentium处理器上,整数类型由具体的操作系统决定:对于DOS和Win32来说,整数是2个字节;对于Windows 9x 、NT和2000,整数是4个字节。
当然,使整数类型平台无关之后,性能必然有所下降,但就Java来说,这个代价是值得的。
Java的字符串,则采用标准的Unicode格式保存。
可以说,没有这个特性,Java的可移植性也不可能实现。
1.1.3简单•JAVA在语法上与C++类似JAVA的语法与C++很接近,有过C或者C++编程经验的程序员很容易就可以学会JAVA语法;•取消了C++的一些复杂而低效的特性比如:用接口技术代替了C++的多重继承。
C++中,一个类允许有多个超类,这个特性叫做"多重继承",多重继承使得编译器非常复杂且效率不高;JAVA 的类只允许有一个超类,而用接口(Interface)技术实现与C++的多继承相类似的功能其它被取消的特性包括:虚拟基础类、运算符过载等•JAVA的基本解释器和类支持模块大概仅40K即使加入基本的标准库和支持线程的模块,也才220K左右。
java程序代码的结构
java程序代码的结构Java是一种面向对象的编程语言,它的代码结构非常重要,它决定了程序的可读性、可维护性以及可扩展性。
一个良好的代码结构能够使程序更易于理解、调试和修改,同时也能提高开发效率。
在本文中,我将介绍Java程序代码的基本结构,以帮助你写出高质量的Java代码。
Java程序的基本结构是由包(package)、引入(import)、类(class)和方法(method)组成的。
下面我将详细介绍每个部分的作用和规范。
1. 包(package)包是用于管理和组织Java文件的一种方式。
它提供了命名空间和访问控制的功能。
一个包通常对应一个文件夹,包名和文件夹的结构相对应。
包名的命名规范是全部小写,并以逆序的域名(如com.example.mypackage)来命名。
例如,如果你要编写一个名为"HelloWorld"的程序,你可以将它放在"com.example.helloworld"这个包中。
2. 引入(import)在Java中,我们可以使用import语句来引入其他包中的类或接口。
通过引入,我们可以直接使用这些类或接口,而无需每次都写全限定名。
引入语句通常写在文件的开头,位于package语句之后。
例如,如果你想在程序中使用java.util包中的ArrayList类,你可以写入import语句:import java.util.ArrayList;3. 类(class)类是Java程序的基本组成单位。
一个Java文件中只能有一个公开的类,且类名必须与文件名相同。
类用来定义对象的行为和状态。
一个类通常包含字段(variables)和方法(methods)。
字段用于存储对象的状态,而方法用于定义对象的行为。
一个类的定义遵循以下语法:public class ClassName {// 字段声明// 方法声明}例如,下面是一个名为"Person"的类的定义:```public class Person {private String name;private int age;public Person(String name, int age) { = name;this.age = age;}public void sayHello() {System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");}}```4. 方法(method)方法是用于封装具体行为的代码块。
Java编程的基础知识和应用
Java编程的基础知识和应用Java编程作为一种广泛应用于软件开发的编程语言,其基础知识和应用至关重要。
本文将从Java编程语言的发展历程、Java编程的结构、Java编程的特点及其应用领域四个方面,介绍Java编程基础知识和应用。
一、Java编程语言的发展历程Java编程语言的发展历程可以追溯到20世纪90年代初期,当时美国太阳微系统公司(Sun Microsystems)致力于开发一种嵌入式设备的编程语言,用于处理普及率越来越高的短期应用程序。
随着计算机处理器速度和内存容量的不断提高,Java编程语言也逐渐成为了一种用于软件开发的主要编程语言。
1995年,太阳微系统公司发布了Java编程语言,此后在全球范围内迅速获得了广泛的应用,成为软件开发的主流编程语言。
二、Java编程的结构Java编程可以分为两个主要部分:Java应用程序和Java Applet。
Java应用程序是一种独立的、结构化的程序,可以通过命令行或图形用户界面进行执行。
而Java Applet是一种在Web浏览器中运行的小程序,比如浏览器中的小游戏。
Java编程语言中的代码被编写成类(class)的形式,每个类包含了程序中的一个实体,比如一个物体、一个字符串或者一个行为等。
类中的代码通常被组织成方法(method),其中包含了代码块和变量,用于执行某些操作。
Java编程语言中的标准库(Standard Libraries)也很重要,通常被称为Java API(Application Programming Interface),包含了各种各样的类,可以大大加快开发过程。
三、Java编程的特点Java编程语言有许多特点,以下就是其中的几个:1.跨平台性:Java编程语言具备跨平台性,可以在各种操作系统平台上运行,如Windows、Linux和Mac OS等。
这是由于Java编程语言是解释性语言,而不是编译性语言。
Java Virtual Machine(JVM)作为一种虚拟平台,可以进行编译、解释和执行Java编程语言。
Java编程知识总结
Java编程知识总结Java是一种面向对象的编程语言,在当今的编程界具有重要的地位。
它具有简单易学、跨平台、丰富的库以及广泛的应用领域等优点,因此备受广大程序员的欢迎。
本文将总结Java编程知识,包含Java的基础知识、高级特性、开发工具和经验分享等方面的内容。
一、Java基础知识Java的基础知识包括语法、数据类型、流程控制、方法、数组等方面。
1.语法Java的语法与C++和C有很多相似之处,但也有许多不同之处。
Java的代码都是以类的形式组织,而在类内则是由方法来组成。
Java的语法比较严谨,对于代码格式有较高的要求。
例如,Java中要求每一个语句以分号结尾。
另外,在Java中,大小写具有区别性。
2.数据类型Java的数据类型与C++和C的数据类型类似,主要包括基本数据类型和引用数据类型。
Java的基本数据类型有byte、short、int、long、float、double、char和boolean等八种,其中char和boolean类型的变量必须进行初始化。
Java的引用数据类型包括数组、类、接口和枚举等。
3.流程控制Java中的流程控制主要有分支结构和循环结构两种。
其中,Java的if、else和switch等分支结构与C++和C的分支结构类似,但Java中的循环结构使用更加灵活,包括for、while、do-while等循环语句。
4.方法Java中的方法是一种封装代码的方式,也是Java中最基本的组织方式。
方法可以接受参数和返回值,可以在其他方法内部或外部被调用。
Java方法的定义形式为“访问修饰符返回值类型方法名(参数类型参数名)”。
5.数组Java中的数组是一种引用数据类型,可以存储多个相同数据类型的值。
Java中的数组可以被初始化并赋予初值,数组的下标从0开始。
Java中使用数组的方式与C++和C的方式类似。
二、Java高级特性Java的高级特性包括多线程、反射、注解和泛型等方面。
java基础知识点整合
面向对象3.1 面向对象介绍1.什么是面向对象对象其实就是现实生活中的各种物体,他们有各种各样的功能,当我们需要借助这些物体去完成我们的需求时,我们就是在面向这些对象,使用它们其中的功能,至于他们其中的功能是如何实现的,我们无需知道,只要能完成需求即可.2.什么是面向对象编程(OOP):Object Oriented Programming 是一种编程思想, 使用对象去进行编程.它的特点有: 封装, 继承, 多态3.对象从哪来:对象是需要先用类来描述, 然后使用类来创建.类是对象的描述, 对象是类的实例.4.面向对象的优点提高代码复用性.使用者无需关心对象其中是如何实现的.让程序员从一个编写者转换成一个使用者.更加符合人的思维能力,使编程更简单.3.2 定义类1.成员变量在类中用变量来描述这一类对象公有的特征.2.成员函数在类中用函数来描述这一类对象公有的行为.3.3 创建和使用对象1.怎么创建使用"new 类名()"形式创建一个对象2.怎么使用通过"."语法来访问类的成员.例如: Person p = new Person(); = "张三";p.eat();3.4对象的初始化过程1.加载类类在第一次使用的时候被加载到内存中2.初始化成员变量当创建对象的时候, 成员变量会初始化为默认值, 基本数据类型都是0, 引用数据类型都是null3.5对象的生命周期1.开始new关键字创建对象的时候, 生命周期开始2.结束没有任何引用指向对象, 该对象成为垃圾, 被虚拟机回收3.6 匿名对象1.什么是匿名对象没有任何引用指向的对象, 就叫匿名对象2.匿名对象有什么特点匿名对象在创建之后立即被回收, 只能使用一次3.7 封装1.什么是封装封装就是将一类事物的特征和行为封装在一个类中,定义成成员变量和成员函数创建对象之后, 这些成员函数可以访问自己的成员变量2.对成员变量的封装使用private关键字将成员变量私有化如果需要对外部提供访问方式, 写公有的get, set方法3.8 构造函数1.什么是构造函数构造函数是一个特殊的函数.函数名必须和类名一致.没有返回值类型.(不等于void,不能写任何返回值).可以写return,但是不能写return+值(尽量不要写).new关键字创建对象时自动调用2.应用场景如果我们希望一段代码在创建对象的时候执行, 就可以写在构造函数中通常我们使用构造函数对成员变量进行赋值3.构造函数和成员变量的执行顺序成员变量优先于构造函数先执行,因为通常使用构造函数都是对成员变量进行初始化,所以如果没有成员变量,构造函数是没有任何意义的.4.构造函数的重载和普通函数一样, 参数列表不同(类型不同,顺序不同,个数不同)即可.重载只与参数列表有关5.构造函数的调用在创建对象时自动调用.在构造函数的第一条语句可以使用"this(被调用的构造函数的实际参数)"的形式调用该类其他构造函数.6.自动生成构造函数在一个类中构造函数是一定存在的.因为在一个类中如果没有写任何的构造函数, 编译时也会自动生成一个无参的构造函数, 里面什么代码都没有.如果写了任何一个构造函数, 那么就不会有自动生成的了注意: 我们在类中只写了一个有参构造函数的时候,这个类就不能使用无参的构造函数创建对象了7.构造函数的访问权限通常构造函数的访问权限都是公有的, 因为构造函数就是为了让别人创建对象时调用的个别情况下在定义类时不希望外部创建对象, 这时可以使用private修饰构造函数, 例如: 单例设计模式(Singleton)3.9 成员代码块(构造代码块)1.什么是成员代码块在类中使用"{}"定义一段代码, 这段代码在创建对象的时候会自动运行2.成员代码块和构造函数的区别构造函数在创建对象的时候是N个选1个调用而代码块是一定执行构造函数可以传入参数代码块不能传入参数3.创建对象时内存中的工作顺序在内存中查找指定的类, 如果没有就加载类, 有则直接引用在内存中开辟一块空间, 将成员变量初始化为默认值, 0和null按照类代码从上到下的顺序, 执行代码块或者成员变量赋值执行构造函数中的代码4.在方法中也可以写代码块(方法代码块),但是不常用3.10成员变量和局部变量1.成员变量在类中定义的变量,(Field),在整个类都可以访问(用于描述着一类事物的共有特征).成员变量随着对象的建立而建立,存在于对象所在的堆内存中.成员变量有默认初始值(0/false/null)2.局部变量在方法/语句中定义的变量(Local Variable),存在于栈内存中.作用范围一结束,变量的空间会自动释放.局部变量是没有初始值的.3.同名问题在同一个作用域中成员变量不能重复, 局部变量也不能重复但是成员变量和局部变量可以同名, 他们互相不冲突4.访问问题在局部变量和成员变量同名的时候, 如果直接用变量名访问一个变量, 那么是先找局部变量, 如果不存在才找成员变量这时如果不想找局部变量, 直接找成员变量, 应该用"this.变量名"3.11 this关键字1.构造函数中"this(参数)"形式可以在构造函数的第一条语句中调用其他的构造函数"this.成员名"形式可以调用当前对象的成员2.普通函数中this用在普通的函数中, 可以代表调用当前函数的对象哪个对象调用this所在的函数,this就代表那个对象.3.内部类中可以使用外部类名.this.成员来访问外部类的成员.3.12静态(static)变量1.什么是静态变量用static修饰的成员变量就是静态变量(随着类的加载而加载)优先于所有非静态成员及成员代码块.2.静态变量和普通变量有什么不同静态变量在类加载后就初始化, 不用创建对象可以直接使用.静态变量被类的所有对象共享(在共享区), 通过一个对象改变, 所有对象都改变.静态变量可以使用"类名.变量名"形式访问, Java推荐使用这种方式, 而不是通过对象访问.3.类在什么时候加载类在第一次使用的时候加载例如: 创建对象, 使用静态变量, 使用静态方法定义变量的时候不加载类.4.静态变量在什么时候使用在定义一个类的时候, 如果希望这个类的所有对象共享一个数据时, 就可以使用静态成员变量.3.13静态(staitc)方法1.什么是静态方法用static修饰的方法就是静态方法静态方法类加载后可以直接运行可以使用"类名.方法名"调用2.什么时候使用静态方法如果一个方法没有访问任何外部的非静态成员, 那么就可以定义为static.这样在调用的时候不用创建对象即可使用, 给人提供方便, 并且效率更高.3. 静态方法使用的注意事项1. 静态方法不能直接访问方法外非静态成员.因为静态方法是随着类的加载而加载的,而非静态成员只有在对象创建才会加载.因此,当静态方法访问方法外非静态成员,对象不一定被创建,所以不能直接访问,除非在静态方法中创建本类对象,才可以访问,方法外静态成员.2. 与静态方法不能直接访问方法外非静态成员相反,非静态方法是可以访问静态成员的,因为,对象被创建了,这个类一定被加载到内存中,所以可以访问.3. 因为静态优先于对象存在,所以在静态方法中是不能出现this,super这两个关键字,道理很简单,静态被加载时还没有对象,而这两个关键字都和对象有关,所以不能使用.4. 静态的利与弊静态好处:1. 如果一个类里的某一个成员变量,他的所有需要共同使用它,没必要每一个对象都存储一份,可以将成员变量设为static,系统将进行单独空间(方法区/静态区) 存储,节省内存空间.2. 静态的成员可以直接被类名调用,使用简单.静态弊端:1. 因为静态是随着类加载而加载的的,所以其生命周期是和类同存亡的.所以生命周期很长,比较浪费内存空间.2. 因为静态只能访问静态,所以访问有一定的局限性.3. 因为主函数是静态的,所以用主函数调用的方法再不创建对象的情况下,只能都是静态的.3.14静态代码块1. 什么是静态代码块用static修饰的代码块类加载后直接运行, 只能执行一次(因为类只会加载一次),如果在一个类中有主函数,他是优先于主函数运行的.不能访问外部非静态成员2. 什么时候用静态代码块在定义一个类的时候, 如果希望某一段代码在别人使用这个类的时候就执行, 那么就可以写在静态代码块中.用于给类初始化.3.15单例设计模式设计模式:解决某一类问题最行之有效的方法.单例设计模式:让一个类只能创建一个对象.懒汉式和饿汉式饿汉式步骤:1.私有化构造函数.2.创建一个对象,并私有(防止类外改变对象内部内容).3.创建一个公有的,静态的方法,返回本类对象,使类外获取本类对象.懒汉式步骤:1.私有化构造函数.2.创建一个对象引用,并私有(防止类外改变对象内部内容).3.创建一个公有的,静态的方法,判断是否创建了一个对象如果创建了,返回本类对象, 如果没有创建,创建一个对象返回,使类外获取本类对象.3.16继承1.什么是继承定义一个类, 使用extends关键字可以继承另一个类, 得到父类的所有非私有属性和方法.2.继承的特点Java只支持单继承, 不支持多继承, 但可以多重继承.一个父类可以有多个子类, 但一个子类只有一个父类.3.java改良多继承的原因?提高代码的安全性,如果一个子类继承多个父类,而这多个父类中有同名的方法,子类要去访问的话,就不知道要访问哪一个方法了.降低了安全性..4.子类对象创建的过程子类对象之所以能调用父类的方法, 是因为在创建子类对象的时候, 其内部创建了一个父类对象.在new一个对象时,会先去子类构造函数,中寻找super()(如果没有显示指定父类构造函数)然后创建父类,然后再回到子类中创建对象.调用子类的方法时, 虚拟机会先在子类中查找是否包含该方法, 如果没有则找父类.在调用子类构造函数的时候, 一定会使用"super(参数)"形式调用父类构造函数创建父类对象.子类中必须要有一个构造函数含有super调用父类构造函数..super和this类似, 都是必须在构造函数的第一条语句使用如果构造函数写了this, 那么则不能写super, 反之亦然如果没写this也没写super, 默认会自动调用父类无参的构造函数5.方法覆盖(重写)覆盖可以让子类将从父类继承来的方法进行扩展,提高代码复用性,减少冗余.覆盖时子父类的方法名子必须相同, 包括返回值,参数列表,并且子类的权限必须大于或等于父类.只能覆盖非私有方法.6.重载(Overload)和重写(Override)的区别:重载:名字相同,参数列表不同只与参数列表相同.重写:子父类的方法名子必须相同, 包括返回值,参数列表,子类的权限必须大于或等于父类.(如果父类返回值是一个类,子类返回值可以是和父类相同的类或其子类).7.向上转型子类可以当作父类使用, 因为父类的功能子类都有Fu f = new Zi();如果一个方法要求传入一个父类类型对象, 我们也可以传入一个子类对象8.强制类型转换在子类当作父类来用时, 不能调用子类特有的成员.如果一定要调用, 需要把父类类型强转回子类类型.这种转换叫强制类型转换, 在编译时不论类型是否匹配都不会报错, 为了程序安全, 通常在转换之前使用instanceof进行判断.3.17Object类及其中常用方法1.什么是Object类Object类是Java中所有类的父类, 如果定义一个类不继承任何类, 默认继承ObjectObject类中的方法会被所有的类继承2.finalize任何对象在成为垃圾被销毁之前, 都会调用finalize 方法Object类中的finalize方法是空的, 什么都没有当我们希望在对象被销毁之前执行一段代码, 就可以在类中重写finalize方法, 把要执行的代码写在方法中.3.toStringtoString方法可以将一个对象转为字符串表示形式Object类中的toString方法返回的是"类名@内存地址"当我们希望调用toString时返回成员变量的值, 就可以重写该方法调用System.out.println()方法时会自动打印对象toString的返回值4.equalsequals方法是用来比较两个对象的Object类中equals方法默认比较的是对象的地址如果我们希望比较两个对象的属性, 那么可以重写equals方法, 在方法内比较所有的属性在比较字符串时如果希望比较两个字符串的内容, 就需要使用equals, String类是重写了equals的3.18 组合设计模式1.什么是组合设计模式在我们定义一个类的时, 如果需要使用另外一个类的方法, 就可以用组合设计模式.2.组合设计模式的写法在类中定义一个被组合类型的成员变量通过构造函数组合一个对象, 用成员变量引用在方法中使用成员变量调用被组合对象的方法3.组合设计模式和继承的区别不占用继承的位置, 当前类组合一个类之后还能继承其他类组合设计模式组合的类不能当作被组合的类使用3.19 多态1.多态的体现父类引用指向子类对象.(父类的引用可以接受自己的子类).2.多态的前提类与类之间必须有关系,要么继承,要么实现.子类与父类存在覆盖,因为在不强转的情况下,父类,不能访问子类特有的方法.3.多态的好处提高代码扩展性.4多态的弊端虽然提高了扩展性,但是只能使用父类父类引用访问父类成员(共有成员),为了能访问子类特有方法,父类的引用必须转成子类类型(向下转型).3.20 抽象1.什么是抽象类用abstract修饰的类就是抽象类, 抽象类中可以定义抽象方法2.什么是抽象方法用abstract修饰的方法就是抽象方法, 抽象方法在子类中必须全部重写3.什么时候用抽象类和抽象方法在我们定义类的时候, 如果多个类有相同的方法, 那么就应该把这些方法抽取到父类中定义完全相同的方法直接在父类中定义并实现, 如果只有方法签名(无方法体)一样而实现不同, 那么就可以在父类中定义抽象方法这样别人看到父类的时候就知道子类都有什么功能了, 方便他人阅读我们的代码, 也更好的支持了多态.4.抽象类细节有抽象方法的类必须声明为抽象类, 抽象类可以没有抽象方法抽象类不能创建对象子类继承抽象类时必须重写所有的抽象方法3.21 final修饰符1. final代表最终的, 可以用来修饰类, 方法, 变量.2. 被final修饰后的特点final的类不能被继承final的方法不能被重写final的变量只能赋值一次,在程序运行结束前,会一直存在与内存中.如果内部类在局部位置上,只能访问该局部中被final 修饰的变量.被final修饰的形参,第一次赋值是在调用它所在的函数时,不能再次赋值了.被final修饰的引用类型变量,不能在指向其他对象,但是他第一次指向的对象中的内容是可以改变的.final 只是修饰了引用.public static final 修饰的变量时全局变量,可以使用类名调用,名字全部大写3.22模板设计模式1.什么是模板设计模式在编程的过程当中, 如果经常要做一些类似的事, 其中某些步骤相同, 有些步骤不同, 这是就可以使用模板设计模式2.怎么使用模板设计模式定义一个抽象类定义一个final的方法在方法中写出每次相同的步骤, 不同的步骤写成抽象方法, 调用抽象方法每次实现不同的步骤时, 定义子类继承抽象类, 重写抽象方法即可, 相同的步骤无需重写直接调用final方法3.23接口1.什么是接口接口是一种特殊的抽象类2.接口和抽象类的区别抽象类用abstract class定义, 接口用interface定义抽象类中可以有不抽象的方法, 接口中所有方法都是抽象的抽象类用extends继承, 接口用implements实现抽象类可以继承抽象类, 接口可以继承接口抽象可以继承接口,接口不能继承抽象因为抽象类里面有可能会有非抽象方法..抽象类中的方法没有默认修饰符, 接口中的方法默认是public abstract修饰的抽象类中的成员变量没有默认修饰符, 接口中的成员变量默认是public static final 修饰的一个类只能继承一个抽象类, 一个类可以实现多个接口3.什么时候用抽象类, 什么时候用接口能用接口的时候就不用抽象类(没有任何不抽象的方法), 因为接口不占用继承位置如果需要定义不抽象的方法, 那么就必须使用抽象类.3.24 策略设计模式定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
Java基础知识总结(超详细整理)
Java基础知识总结(超详细整理)Java语⾔的特点1.⾯向对象⾯向对象(OOP)就是Java语⾔的基础,也是Java语⾔的重要特性。
⾯向对象的概念:⽣活中的⼀切事物都可以被称之为对象,⽣活中随处可见的事物就是⼀个对象,我们可以将这些事物的状态特征(属性)以及⾏为特征(⽅法)提取并出来,并以固定的形式表⽰。
2.简单好⽤Java语⾔是由C和C++演变⽽来的,它省略了C语⾔中所有的难以理解、容易混淆的特性(⽐如指针),变得更加严谨、简洁、易使⽤。
3.健壮性Java的安全检查机制,将许多程序中的错误扼杀在摇蓝之中。
另外,在Java语⾔中还具备了许多保证程序稳定、健壮的特性(强类型机制、异常处理、垃圾的⾃动收集等),有效地减少了错误,使得Java应⽤程序更加健壮。
4.安全性Java通常被⽤在⽹络环境中,为此,Java提供了⼀个安全机制以防恶意代码的攻击,从⽽可以提⾼系统的安全性。
5.平台⽆关性Java平台⽆关性由Java 虚拟机实现,Java软件可以不受计算机硬件和操作系统的约束⽽在任意计算机环境下正常运⾏。
6.⽀持多线程在C++ 语⾔没有内置的多线程机制,因此必须调⽤操作系统的多线程功能来进⾏多线程程序设计,⽽ Java 语⾔却提供了多线程⽀持。
多线程机制使应⽤程序在同⼀时间并⾏执⾏多项任务,该机制使得程序能够具有更好的交互性、实时性。
7.分布式(⽀持⽹络编程)Java语⾔具有强⼤的、易于使⽤的⽹络能⼒,⾮常适合开发分布式计算的程序。
java中提供了⽹络应⽤编程接⼝(),使得我们可以通过URL、Socket等远程访问对象。
8.编译与解释共存Java语法基础标识符: ⽤来标识类名、对象名、变量名、⽅法名、类型名、数组名、⽂件名的有效字符序列。
合法的标识符:由字母、数字、下划线“_”、美元符号“$”或者“¥”组成,并且⾸字符不能是数字。
不能把java关键字和保留字作为标识符。
标识符对⼤⼩写敏感。
关键字:Java语⾔中已经赋予了特定含义的保留字: const、goto,Java版本中尚未使⽤,但以后版本可能会作为关键字使⽤变量:程序运⾏期间可以被改变的量。
Java必备基础知识点(超全)
Java必备基础知识点(超全)Java基础1、简述Java的基本历史java起源于SUN公司的⼀个GREEN的项⽬,其原先⽬的是:为家⽤消费电⼦产品发送⼀个信息的分布式代码系统,通过发送信息控制电视机、冰箱等2、简单写出Java特点,写出5个以上,越多越好简单的、⾯向对象的、分布式的、安全的、稳定的、与平台⽆关的、可解释的、多线的、动态的语⾔。
3、什么是Java?JAVA:⼀种编程语⾔⼀种开发环境⼀种应⽤环境⼀种部署环境4、请写出Java的版本分类,以及每种版本的应⽤⽅向三种版本:JME:是⾯向内存有限的移动终端. 为消费性产品设计的;JSE:是SUN公司针对桌⾯开发和低端商务计算⽅案开发的版本。
为笔记本电脑、PC机设计的;JEE:是⼀种利⽤JAVA 2平台来简化企业解决⽅案的开发、部署和管理相关的复杂问题的体系结构。
为企业级的、服务器端的⾼端应⽤⽽设计的;5、描述Java技术的主要特性java虚拟机垃圾回收代码安全性如果你想学习Java可以来这个群,⾸先是⼆⼆零,中间是⼀四⼆,最后是九零六,⾥⾯有⼤量的学习资料可以下载。
6、描述 Java虚拟机的功能(1)通过 ClassLoader 寻找和装载 class ⽂件(2)解释字节码成为指令并执⾏,提供 class ⽂件的运⾏环境(3)进⾏运⾏期间垃圾回收(4)提供与硬件交互的平台7、简述Java代码安全性(1)编译时的错误检验(2)类装载检查,把本机上的类和⽹络资源类相分离,在调⼊类的时候进⾏检查,因⽽可以限制任何“特洛伊⽊马”的应⽤(3)字节码校验(4)沙箱机制,限定访问权限8、描述Java垃圾回收机制Java 编程语⾔解除了程序员释放内存的责任。
它可提供⼀种系统级线程以跟踪每⼀次内存的分配情况。
在 Java 虚拟机的空闲周期,垃圾收集线程检查并释放那些可被释放的内存。
垃圾收集在 Java 技术程序的⽣命周期中⾃动进⾏,它解除了释放内存的要求,这样能够有效避免内存漏洞和内存泄露(内存泄露就是程序运⾏期间,所占⽤的内存⼀直往上涨,很容易造成系统资源耗尽⽽降低性能或崩溃。
java基础知识点整理
java基础知识点整理1.&和&&的区别?&:逻辑与(and),运算符两边的表达式均为true时,整个结果才为true。
&&:短路与,如果第⼀个表达式为false时,第⼆个表达式就不会计算了。
2.在java中如何跳出当前的多重循环?在循环语句外前⾯定义⼀个标号,然后在⾥层循环体的代码中使⽤带有标号的break语句,即可跳出循环。
⽐如:3.最有效率的⽅法算出2X8等于⼏?使⽤位运算,效率最⾼:2<<3,表⽰2向左移动了3位,就相当于2乘以2的3次⽅,结果:16。
4.”==”和equals⽅法究竟有什么区别?==:表⽰两个变量的值是否相等,⽐较两个基本数据类型的数据或者引⽤变量,⽤==。
equals:⽤于⽐较两个独⽴对象的内容是否相同。
字符串的⽐较也⽤equals。
5. Int和integer的区别?Int是Java的8中基本数据类型之⼀,integer是int的封装类。
Int类型的默认值为0,integer默认值为null,所以区别在于,integer能区分出null值和0的区别。
6.三个与取整有关的⽅法:Math.ceil():表⽰向上取整;Math.ceil(11.3)=12;Math.ceil(-11.3)=-12。
Math.floor():表⽰向下取整;Math.floor(11.6)=11;Math.floor(-11.6)=-12。
Math.round():表⽰四舍五⼊;Math.round(11.5)=12;Math.round(-11.5)=-11;Math.round(11.3)=11;Math.round(-11.3)=-11;7.重载和重写的区别?重载(Overload):函数名相同,参数不同。
可以改变返回值类型,参数的个数和类型。
重写(Override):和⽗类的的⽅法名称、参数完全相同。
8.⾯向对象的特征?封装:将对象属性和⽅法的代码封装到⼀个模块中,也就是⼀个类中,保证软件内部具有优良的模块性的基础,实现“⾼内聚,低耦合”。
java全栈知识点
java全栈知识点Java全栈知识点在当今互联网发展迅速的时代,全栈工程师成为了越来越受欢迎的职业。
而Java全栈工程师在该领域中也扮演着重要的角色。
本文将介绍Java全栈工程师需要掌握的一些重要知识点。
一、Java基础知识作为一名Java全栈工程师,首先需要掌握Java的基础知识。
包括Java语法、面向对象编程、异常处理、集合框架、多线程等。
这些基础知识是全栈工程师进行后续学习和开发的基础。
二、前端知识全栈工程师不仅需要掌握后端开发,还需要具备一定的前端开发能力。
在前端开发中,HTML、CSS和JavaScript是必不可少的。
全栈工程师需要熟悉HTML的标签和语义化,掌握CSS的样式布局和动画效果,以及JavaScript的基本语法和DOM操作。
三、后端知识作为一名全栈工程师,后端开发是必不可少的。
在后端开发中,Java的Spring框架是非常重要的技术栈。
全栈工程师需要掌握Spring框架的使用,包括Spring MVC和Spring Boot。
同时,还需要了解数据库的使用,如MySQL、Oracle等,以及常见的ORM框架,如Hibernate、MyBatis等。
四、数据库知识数据库是全栈工程师必备的技能之一。
全栈工程师需要熟悉SQL语言,能够编写复杂的查询语句,并且了解数据库的设计原则和优化方法。
此外,NoSQL数据库也是全栈工程师需要了解的内容,如MongoDB、Redis等。
五、版本控制工具在团队协作开发中,版本控制工具是必不可少的。
全栈工程师需要掌握Git这一常用的版本控制工具,能够进行代码的提交、合并和分支管理等操作。
同时,还需要了解一些代码托管平台,如GitHub、GitLab等。
六、系统架构设计全栈工程师需要具备一定的系统架构设计能力。
他们需要了解分布式系统、微服务架构、消息队列等相关技术。
了解如何设计高可用、高性能的系统架构,并能够解决系统中的性能瓶颈和故障。
七、安全知识随着互联网的发展,安全问题变得越来越重要。
java知识点总结
java知识点总结Java是一种跨平台的编程语言,广泛应用于软件开发领域。
作为一名Java开发者,了解并熟悉Java的各种知识点是非常重要的。
以下是对Java常见知识点的一个总结,希望能对你有所帮助。
一、语法基础1. 数据类型:Java的数据类型分为基本数据类型和引用数据类型。
2. 变量和常量:在Java中,使用关键字"var"来定义变量,使用关键字"final"来定义常量。
3. 运算符:Java支持一系列的运算符,如算术运算符、关系运算符、逻辑运算符等。
4. 控制流程:Java可以使用if语句、for循环、while循环等来控制程序的流程。
二、面向对象编程1. 类和对象:Java是面向对象编程语言,每个Java程序都是由类组成,通过创建对象来使用类。
2. 继承和多态:Java支持类的继承和多态特性,通过继承可以实现代码的复用,通过多态可以实现代码的灵活性。
3. 封装和抽象:Java提供了封装和抽象的机制,使得程序的设计更加灵活和易于维护。
4. 接口和内部类:Java支持接口和内部类的特性,通过接口可以定义一组规范,而内部类则可以提供更好的封装性。
三、异常处理1. 异常的分类:Java将异常分为可检查异常和不可检查异常,通过使用try-catch语句可以捕捉和处理异常。
2. 自定义异常:Java允许用户自定义异常类,通过继承Throwable类可以实现自定义异常。
四、集合框架1. List、Set和Map:Java中的集合框架提供了List、Set和Map等接口,分别用于存储有序的元素、无序的元素和键值对。
2. 集合的遍历和操作:Java中提供了一系列的方法用于对集合进行遍历和操作,如foreach循环、迭代器等。
五、输入输出1. 文件操作:Java提供了一系列的API用于文件的读写操作,如File类、BufferedReader类等。
2. 序列化和反序列化:Java中的对象可以通过序列化和反序列化进行存储和传输。
java重要知识点
java重要知识点Java是一种广泛应用的编程语言,具有许多重要的知识点。
本文将介绍Java的一些重要知识点,包括面向对象编程、异常处理、多线程、集合框架和IO流等方面。
一、面向对象编程面向对象编程是Java的核心特性之一。
Java支持类和对象的概念,通过封装、继承和多态实现面向对象的编程风格。
封装可以隐藏对象的实现细节,提供公共接口给外部使用;继承可以实现代码的重用和派生新的类;多态可以实现基于继承的方法重写和方法重载。
二、异常处理异常处理是Java中的重要概念。
Java提供了异常处理机制,通过try-catch-finally块来捕获和处理异常。
通过抛出异常,可以在代码中处理错误和异常情况,提高程序的健壮性和可靠性。
三、多线程多线程是Java的重要特性之一。
Java中的线程可以同时执行多个任务,提高程序的并发性能。
通过创建线程对象,可以实现并发执行任务的效果。
多线程编程可以提高程序的响应能力,但也需要注意线程同步和资源竞争的问题。
四、集合框架集合框架是Java中重要的数据结构。
Java提供了一系列的集合类和接口,包括List、Set、Map等,用于存储和操作数据。
集合框架提供了各种数据结构和算法,方便开发人员进行数据处理和操作。
五、IO流IO流是Java中用于输入和输出的重要概念。
Java提供了各种类型的IO流,包括字节流和字符流,用于读取和写入文件或网络数据。
通过IO流,可以实现数据的读取和写入操作,实现与外部环境的数据交互。
六、网络编程网络编程是Java的重要应用领域之一。
Java提供了一套完整的网络编程API,包括Socket、ServerSocket和URL等类,用于实现网络通信。
通过网络编程,可以实现客户端和服务器之间的数据传输和通信。
七、数据库连接Java与数据库的连接是开发中常见的需求。
Java提供了一系列的数据库连接API,如JDBC,用于连接和操作数据库。
通过数据库连接,可以实现与数据库的数据交互,实现数据的读取、写入和更新等操作。
java知识点总结
java基础知识总结:一:java概述:1991 年Sun公司的James Gosling(詹姆斯·高斯林)等人开始开发名称为Oak 的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器;1994年将Oak语言更名为Java;Java的三种技术架构:JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发;JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础;JAVAME:Java Platform Micro Edition,开发电子消费产品和嵌入式设备,如手机中的程序;1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具和jre。
2,JRE:Java Runtime Environment,java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。
3,配置环境变量:让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。
环境变量的配置:1):永久配置方式:JAVA_HOME=%安装路径%\Java\jdk path=%JAVA_HOME%\bin2):临时配置方式:set path=%path%;C:\Program Files\Java\jdk\bin特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。
classpath的配置:1):永久配置方式:classpath=.;c:\;e:\2):临时配置方式:set classpath=.;c:\;e:\注意:在定义classpath环境变量时,需要注意的情况如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件;如果指定了classpath,那么会在指定的目录下查找要运行的类文件。
自己整理的所有java知识点+uni-app总结(不断迭代中)
⾃⼰整理的所有java知识点+uni-app总结(不断迭代中)1. ⾃⼰整理的所有java知识点 + uni-app总结(不断迭代中)
1.1. Java整体知识架构详解之基础知识
1.2. Java整体知识架构详解-之进阶篇⼀
1.3. Java整体知识架构详解-之进阶篇⼆
1.4. Java整体知识架构详解-之分布式架构
1.5. Java整体知识架构详解-之微服务架构
1.6. Java整体知识架构详解-之中间件深⼊分析
2. uni-app
鉴于很多⼈不知道uni-app是什么,这⾥我总结⼀句,编写⼀套代码可以跑在h5,android,ios,微信⼩程序,⽀付宝⼩程序,百度⼩程序,头条⼩程序的神级前端框架
2.1. 前端神级框架uni-app详解(⼀)
1. 第⼀部分适合初学者观看学习,它本⾝语法是基于vue的,有⼀定vue基础就可以快速⼊门,真⼼推荐的⼀款前端框架
2.2. 前端神级框架uni-app详解(⼆)
1. 进阶篇可以当成字典,当然还是建议看上⼀遍,常⽤到的我都写了并附上了链接地址
觉得好的给个推荐呗~。
java基础知识点整理
java基础知识点整理Java是一种受欢迎的跨平台编程语言,它结合了面向对象编程语言和系统编程语言的优点,具有可移植性、跨平台、可扩展性和安全性优势。
Java编程技术已经广泛应用于移动应用,web应用,游戏,和企业级应用程序等各个领域,受到广大开发者们的喜爱。
那么,Java基础知识是Java开发人员在学习和运用这门语言之前必须掌握的基础知识。
一、数据类型Java语言支持8种基本数据类型,分别为byte(字节)、short (短整型)、int(整型)、long(长整型)、float(单精度浮点数)、double(双精度浮点数)、char(字符型)和boolean(布尔类型)。
这8种数据类型可以用来表示不同类型的值,理解这8种数据类型,对于掌握Java基础知识至关重要。
二、流程控制流程控制指的是指导程序流程执行何时开始,何时结束,以及何时跳转到另一部分在Java中,流程控制可以通过关键字if、else、while、for、switch、break、continue实现,在编写Java程序时,开发人员必须了解这些关键字的用法,以及包括if语句和switch语句在内的各种条件及循环语句的运行机制。
三、方法在Java中,方法是一段代码块,用于实现特定功能,能够多次调用,可以将一些复杂的代码封装在方法中,较大程序的代码可以按照不同功能模块来来分成若干个方法,可以减少重复的代码,提高程序的可维护性和可读性,同时也可以让程序的结构更加清晰。
四、类和对象类和对象是Java面向对象编程的两个基本概念,类是一类事物的抽象,它用来描述事物的共同属性和特征;对象是类的一个实例,它是由类定义出来的实体,具有类定义出来的属性和行为,它是运用Java做面向对象编程的基础。
五、抽象类与接口抽象类是一种特殊的类,它不能实例化,它是一种父类,可以被其他子类继承。
而接口则是一个特殊的抽象类,它通过抽象方法定义特定的行为,使多个类具有共性,接口是一种抽象的行为规范,可以被多个不同的类实现,接口是一种多态的概念,是Java实现面向对象的关键技术。
java语言编程基础知识有哪些_Java语言基础知识
java语言编程基础知识有哪些_Java语言基础知识学习Java要掌握不同数据类型的变量定义与使用,掌握不同运算符的运算规则,掌握流程控制语句的执行流程,编写方法的声明与调用,创建数组并访问数组元素等知识。
下面是小编为大家整理的java 语言编程基础知识,希望对你们有帮助。
Java语言编程基础知识1) 注释在程序开发工程中,用于解释和说明程序的文字我们称之为注释,Java中的注释分为以下几种:单行注释、多行注释、文档注释。
2) 关键字了解Java关键字的含义及特点,掌握关键字使用的注意事项。
3) 标识符了解什么是标识符,标识符的组成规则,以及标识符使用时的注意事项。
4) 常量与变量理解常量与变量的含义,并掌握常量与变量的区别、变量的定义格式以及变量的赋值。
5) 数据类型掌握Java语言的'数据类型,如基本数据类型:byte、short、int、long、float、double、char、boolean,以及引用类型:类、接口、数组。
6) 运算符熟练掌握Java中的运算符:算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三目运算符。
7) 流程控制语句了解什么是流程控制语句,掌握以下流程控制语句:顺序结构、选择结构、循环结构,并能够通过流程控制语句实现特定的功能。
8) 方法掌握方法的定义及格式,并能正确的调用方法,理解方法的调用过程,同时清楚方法的注意事项;掌握方法重载及其特点。
9) 数组了解数组的概念,掌握数组的定义格式、静态初始化、动态初始化,并能够理解Java中数组的内存图解。
熟练掌握数组的遍历、获取最值、数组元素逆序、数组元素查找、数组排序和二分查找,以及二维数组的定义格式及初始化。
Java语言基础知识1.JVM相关(包括了各个版本的特性)对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。
不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的。
java各详细总结知识点
java各详细总结知识点一、Java语法1. 数据类型Java中的数据类型分为基本数据类型和引用数据类型。
基本数据类型包括整型,浮点型,字符型和布尔型。
引用数据类型包括类、接口、数组等。
2. 变量在Java中,变量是用来存储数据的容器。
它们可以存储不同类型的数据,例如整数、浮点数、字符等。
变量分为局部变量和成员变量。
3. 运算符Java中的运算符包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。
这些运算符可以实现数据的计算和比较。
4. 控制流Java中的控制流包括顺序结构、选择结构和循环结构。
通过控制流语句,程序可以根据条件执行不同的代码块,实现不同的功能。
5. 方法方法是Java中用来组织和重用代码的一种机制。
它可以细化程序的逻辑结构,并提高代码的可读性和可维护性。
6. 数组数组是一种用来存储多个相同类型数据的容器。
在Java中,数组可以是一维的、二维的甚至多维的。
使用数组可以方便地管理大量数据。
7. 字符串在Java中,字符串是一种特殊的对象类型。
Java提供了丰富的字符串处理方法,例如字符串连接、子字符串提取、字符串比较等。
8. 输入输出在Java中,通过输入输出流可以实现与外部设备的交互。
Java提供了丰富的输入输出类和方法,可以实现文件的读写、网络通信等功能。
二、面向对象编程1. 类和对象在Java中,所有的代码逻辑都是围绕类和对象展开的。
类是一种模板,描述了对象的属性和行为。
对象是类的实例,可以根据类创建多个对象。
2. 封装封装是面向对象编程的核心思想之一。
通过封装,可以将数据和行为封装在一个对象中,避免外部直接访问对象的数据。
3. 继承继承是一种代码复用的机制,可以让子类继承父类的属性和方法。
通过继承,可以实现类与类之间的层次关系,提高代码的重用性和扩展性。
4. 多态多态是面向对象编程的另一个核心概念。
通过多态,可以使不同类的对象对同一消息作出不同的响应。
多态性可以提高代码的灵活性和可扩展性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
演讲人
2 0 2 0 - 11 - 2 9
01
锁
锁
死锁
悲观锁
乐观锁
自旋锁
可重入锁
偏向锁
锁
A
B
C
D
E
轻量 级锁
重量 级锁
分段 锁
cas
分布 式锁
锁
死锁
多线程会遇到的问题,两个线程同时争抢同一把锁造成死循环
锁
悲观锁
悲观锁认为同一个数据并发操作一定会发生修改,所以要对一个数 据的并发操作加锁,悲观锁是比较重量级的
01
引用计 数法
02
标记清 除法
03
标记整 理法
04
复制算 法
05
分代算 法
引用计数法
概念 用来表示对象存在一个引用,计数
器加1,到计数器为0时表示对象没有 引用则可以回收
问题
该算法存在循环引用的问题,比如A 引用B,B引用C,C引用D,D引用B, 当A不在引用B时,其实BCD对象都没 存在必要了,但他们循环引用导致引 用计数器不会清零,这部分对象就清 理不掉,所以现在基本不用该算法了
息保持一致
03 算法和基础概念
拜占庭将军问题
概述
在假设通信不会被中断且消息可靠的前提下,需要找到一种分布式协议, 协调多支军队选择共同进攻还是撤退
两军问题
由拜占庭将军引申出来的问题,通信兵A和通信兵B互相通信问题,A发消 息通知B后,B回复消息收到了,此时B要确认A收到了我的回复消息,所 以A要再发个消息给B表示我收到了你的回复;但此时A又不确定B是否真 的收到了,B还得发确认消息给A,这样会导致消息的不可靠性 由拜占庭将军引申出来的问题,通信兵A和通信兵B互相通信问题,A发消 息通知B后,B回复消息收到了,此时B要确认A收到了我的回复消息,所 以A要再发个消息给B表示我收到了你的回复;但此时A又不确定B是否真 的收到了,B还得发确认消息给A,这样会导致消息的不可靠性
锁
乐观锁
乐观锁认为同一个数据的并发操作是不会发生修改的,可以通过版本机制, 当更新数据的时候会进行不断尝试修改
锁
自旋锁
自旋锁是指尝试获取锁的线程不会立即阻塞,二是会采用循环的方式不断尝试获取锁; 好处就是减少了线程上下文的切换,缺点是消耗CPU,实际使用还是要根据实际情况
锁
可重入锁
可重入锁指在同一个线程外层方法获取锁后,内层方法加同一个锁会自动获取锁
Java虚拟机
内存屏障
概述 作用
概述
每个CPU都有自己的缓存,在多 线程环境下工作内存和主内存不 能实时进行信息交换,为了防止 指令的乱序和数据错误,有了内 存屏障,不同平台实现手段不同, JVM屏蔽了这些差异,统一由 JVM来生成内存屏障指令
作用Biblioteka 0102防止屏障两侧的指令重 排序
强制把工作内存中的数 据写会主内存,使得信
概述
复制算法在新生代有广泛应用,复制算法需要两块相同大小的内存AB,当A内存中存活 对象标记完毕,会统一把存活对象复制到B内存块,然后清空整个A内存,如此往复;新 生代survivor的to和from就是代表
分代算法
这是一个笼统的概称,它将内存根据生命周期划分成年 轻代老年代,然后不同的区域使用不同的回收算法进行 垃圾回收
并发(Concurrent)
指用户线程与垃圾收集线程根据cpu 轮询机制交替运行,使得看上去像同时 运行
并行(Parallel)
充分利用CPU资源,多个任务在多个 CPU上各自运行,一个任务会占用一个 CPU资源
新生代收集器
1 Serial收集器
串行收集器,采用单线程模式,复制算 法,进行垃圾收集时会停止其他工作线 程(Stop The World)
标记清除法
概述
对GC Roots可达的对象进行标记, 再统一清理没被标记的对象 缺点
CMS垃圾收集器就采用了该算法, 缺点是会产生大量的内存碎片,会 导致后续大对象存储更容易失败
标记整理法
概述
和标记清除类似,但它对内存碎片进行了整理,将存活对象都移动 到内存一端,G1垃圾收集器就使用了该算法
复制算法
栈
存放临时的局部变量,为线程 私有
方法区
存放静态变量,类的加载信息 等,线程公有
本地方法栈
存放本地方法的相关 信息
程序计数器
存放程序运行位置记 录
Java虚拟机
垃圾收集器GC
01 概述
02 相关概 念
03 收集器 类型
04 gc类 型
概述
负责清除没有引用的失效对象 的java后台线程
相关概念
锁
偏向锁
偏向锁指的锁的一种状态,当一段同步代码一直被同一个线程所访问的时 候,那么线程会自动获取锁,减少获取锁的消耗
锁
轻量级锁
当偏向锁被另一个线程所访问时,偏向锁会升级为轻量级锁,也就是自旋锁的方式,不 断尝试获取,期待另一个线程马上释放锁
锁
重量级锁
当轻量级锁一直自旋下去到一定时候还没有获取到锁,锁会升级为重量级锁,进入阻塞 状态
3 Parallel Scavenge收集器
并行收集器,通过控制吞吐量减少停顿 时间
2 ParNew收集器
Serial收集器多线程版,和Serial有相 同问题
老年代收集器
Serial Old收集 器
CMS收集器
Parallel Old收 集器
G1收集器
老年代收集器
Serial Old收集器
单线程收集器,使用标记整理算法,存在停顿时间长问题
02
Java虚拟机
Java虚拟机
什么是
A
Java虚
拟机
内存
B
结构
垃圾收集
C
器GC
垃圾收
D
集算法
内存
E
屏障
Java虚拟机
什么是Java虚拟机
一个可以执行Java字节码文件的虚拟机进程
Java虚拟机
内存结构
01
02
堆
栈
03
方法区
04
本地方 法栈
05
程序计 数器
堆
存放java对象的地方,线程 公有
老年代收集器
Parallel Old收集器
多线程模式,使用标记整理算法
概述 工作过程 优点 缺点
老年代收集器
CMS收集器
老年代收集器
G1收集器
特点 内存划分
gc类型
Minor GC 年轻代满是触发,具体值Eden
代满 Full GC
当老年代满时触发,会回收年 轻代和老年代
Java虚拟机
垃圾收集算法
锁
分段锁
这是ConcurrentHashMap在jdk7中用到机制,将数组划分更细颗粒度进行锁控制
锁
cas
cas有三个字母分别表示v:想要更新的值,e:预期值,n:新值,只有当v=e的时候, 才会更新值为n
锁
分布式锁
这属于分布式架构的讨论,移步分布式架构->分布式架构解决方案->分布式锁