关于java基础:Java关键字

拜访修饰符 Access Modifierprivate:公有的,能够利用于类、办法和字段,只有本类可见protected: 受爱护的,能够利用于类、办法和字段,对于同包的类及其子类都可见public :公共的,任何类都可见类、办法和变量的修饰符 Modifierabstract:形象,能够利用于类和办法class:类,用于申明类,类是变量和办法的汇合,面向对象的根本结构单位,类是对象的模板,每个对象都是类的一个实例interface:接口,用于申明接口,接口是办法的汇合,也能够领有常量extends:继承,能够利用于类和接口继承别的类的接口,继承使得类和接口能取得别的类或接口的变量和办法,只能够单继承implements:实现,能够利用于类,示意类实现了接口,实现接口后必须实现接口中申明的abstract办法 final:不可扭转,能够利用于类和办法和变量,这样的类不可被继承,办法不可被重写,变量不可更改 native:本地,能够利用于办法,申明该办法是由Java以外的语言实现new:新建,仅用于类的实例化,相当于创立一个类的实例static:动态,能够利用于外部类、办法或变量,示意的是外部类、办法和变量属于以后的类而非类的实例strictfp:准确,能够利用于类、接口和办法,在申明的范畴内会齐全按照浮点标准IEEE-754来执行浮点运算synchronized:同步,能够利用于办法和语句块,用于爱护申明范畴内的线程平安transient:长期的,可利用于类的变量,类的实例序列化时,申明长期的变量会被疏忽volatile:易变的,可利用于类的变量,示意该变量批改的值会立刻被更新到主存,当有其余线程须要读取时,它会去内存中读取新值程序控制语句 Program Control Statementbreak:中断,用于在办法中中断for、while或do循环,或者在switch语句中完结case块,独自应用跳出以后循环而配合标记应用能够中断标记范畴内的多层循环continue:持续,用于在办法中跳到for、while或do循环的下一个迭代return:返回,用于在办法中返回到调用它的中央,并传递匹配办法申明的返回类型的返回值while:while循环,以一个条件为前提,只有条件成立就会循环,直到条件不成立则循环完结do:do while循环,配合while应用,同样也是以条件判断循环,但至多会先执行一遍,再判断条件是否成立,而后周而复始直到条件不成立而退出for:for循环,指定一个指针,在指针符合条件的前提下执行循环,执行完循环后指针if:如果,用于在符合条件的前提下执行代码块else:否则,配合if应用,如果没有合乎if的条件,则执行elseswitch:判断,依据一个值来抉择一个或多个代码块中的代码来执行,能够通过break退出,能够设置一个默认执行的代码块,用default来标识,除此之外还须要与case联合应用case:抉择,配合switch应用,依据switch到的值来执行,如果选到的代码执行结束而没有用break退出,则会持续程序执行前面的case直到遇到break,才会退出,否则会将按程序排的以后抉择及前面的抉择全执行完default:默认的,用于switch中,能够作为默认选项,算是一个非凡的case选项,即switch拿到的值所有列出的case值都不匹配时,执行default中的代码 Java8之后,接口中能够有实现的成员办法,须要通过default作为修饰符来润饰异样解决 Exception Handlingtry:试图捕获,利用于可能会出现异常的代码块,如果在try代码块中捕捉到异样,则会跳到对应异样的catch块中解决该异样catch:捕获,与try配合应用,用于捕获try中呈现的异样,在catch块中能够对异样做解决,try中如果可能有多种异样,能够用多个catch块别离解决,也能够用一个catch块解决,多种异样用“|”号宰割throw:抛出异样,利用于在办法中抛出异样,如果在办法中自行用throw抛出异样,则办法原则上要用throws申明该办法会抛出此异样throws:申明异样,利用于办法的申明,前面须要申明具体的异样,示意该办法不解决申明的异样,而交给办法调用方进行解决包相干package:包,用于申明以后Java源文件所在的包门路,package语句必须在Java源文件的第一行import:导入,用于将其余的包以及类引入到以后类中,import语句写在package语句下方,类申明的上方类型boolean:布尔型,布尔型只有两个值:true和false,while、do while循环和if、else if的断定中都必须是布尔型byte:字节型,字节型应用了2进制中的8个位,一个字节8位,即可示意2^8=256个数字,可存储在 [-128, 127] 范畴以内的整数值(蕴含0),超出范围后会溢出,byte的变量为最大值127时,用++加1后会变成最小值-128,反之亦然char:字符型,字符型变量能够存储一个Unicode字符,10进制中char的范畴为0 ~ 65535。而在0 ~ 65535之间,保留了一部分数字范畴(D800–DBFF)和(DC00–DFFF),(D800–DBFF)叫高代理区和(DC00–DFFF)叫低代理区,各1024,这两个区组成一个二维的表格,共有1024×1024=2^10×2^10=2^4×2^16=16×65536,用它们来示意Unicode中65535当前的字符。char类型是能够运算的,因为char在ASCII等字符编码表中有对应的数值。在Java中,对char类型字符运行时,间接当做ASCII表对应的整数来看待。short:短整型,短整型应用了二进制中的16个位,即可示意2^16=65,536个数字,可存储在[-32768, 32767]范畴内的整数型(蕴含0),超出范围会溢出int:整型,整型应用了二进制中的32个位,即可示意2^32=4,294,967,296个数字,可存储在[-2147483648, 2147483647]范畴以内的整数值(蕴含0),超出范围后会溢出long:长整型,长整型应用了二进制中的64个位,即可示意2^64=18,446,744,073,709,551,616个数字,可存储在[-9223372036854775808, 9223372036854775807]范畴以内的整数值(蕴含0),超出范围后会溢出float:浮点型,浮点型应用了了二进制中的32个位,然而float的范畴比int大。float的范畴大概在-3.4E+38 ~ 3.4E+38,因为浮点型使用了迷信计数法E,所以能够用用同样的二进制位数保留更多范畴的数字。float一共32位,1个符号位,8个指数位,23个分数位,能够通过指数来失去更大范畴的值,毛病就是float并不能精准示意其范畴内的所有值,尾数为23位 2^23=8,388,608,长度为7,因此float的精度为6~7。double:双精度浮点型,双精度浮点型应用了二进制中的64个位,然而double的范畴比long大。double的范畴大概在,同样的因为使用了迷信计数法E,所以能够保留比long的取值范畴更大范畴的数字。double一共64位,1个符号位,11个指数位,53个分数位,2^53=9,007,199,254,740,992,长度为16,因此double的精度为15~16。值null:空,示意无值,将 null 赋给援用变量相当于开释该变量先前所援用的对象。不能将 null 赋给8大根本类型(byte、short、int、long、char、float、double、boolean)变量,如果须要赋值为空,能够采纳8大根本类型的包装类(Byte、Short、Integer、Long、Character、Float、Double、Boolean)true:真,示意条件成立,如果在while循环、do whlie循环或if条件判断时为true,则前面块中的代码将会执行false:假,示意条件不成立,如果在while循环、do whlie循环或if条件判断时为false,则前面块中的代码不会执行void:无,在办法不返回任何值的时候应用,办法申明的返回值为void示意该办法无返回值援用super:超类,用于援用应用该关键字的类的超类,作为独立语句呈现的 super 示意调用超类的构造方法。super.<methodName>() 示意调用超类的办法。只有在如下状况中才须要采纳这种用法:要调用在该类中被重写的办法,以便指定该当调用在超类中的该办法this:此,用于援用以后实例,当援用可能不明确时,能够应用 this 关键字来援用以后的实例。例如:this.属性名称 ,指的是拜访类中的成员变量,用来辨别成员变量和局部变量(重名问题);this.办法名称,用来拜访本类的成员办法; this();示意在构造方法中拜访本类的构造方法,如果()中有参数就是调用指定的有参结构,this()必须放在构造方法中第一行保留字goto:跳转,保留关键字,但无任何作用。结构化程序设计齐全不须要 goto 语句即可实现各种流程,而 goto 语句的应用往往会使程序的可读性升高,所以 Java 不容许 goto 跳转。const:动态,是一个类型修饰符,应用const申明的对象不能更新。与final某些相似。native:本地的,Java不是完满的,Java的有余除了体现在运行速度上要比传统的C++慢许多之外,Java无奈间接拜访到操作系统底层(如零碎硬件等),为此Java应用native办法来扩大Java程序的性能。

January 11, 2022 · 1 min · jiezi

关于java基础:Java基础JVM

JVM,Java Virtual Machine(Java虚拟机)的缩写,是 Java 虚拟机,是一个虚构进去的计算机,是通过在理论的计算机上仿真模仿各种计算机性能来实现的。JVM是整个 Java 实现跨平台的最外围的局部,可能运行以Java 语言写作的软件程序。所有的 Java 程序会首先被编译为 .class 的类文件,这品种文件能够在虚拟机上执行。 JVM屏蔽了与具体操作系统平台相干的信息,使Java程序只需生成在Java虚拟机上运行的指标代码(字节码),就能够在多种平台上不加批改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。大抵流程如下: graph TD A[Java源码 .java文件] -->|编码| B(字节码 .class文件) -->|编码| C[机器码 指令集]JVM的形成Java虚拟机次要由3大部分形成:运行时数据区、类加载器和执行引擎。 运行时数据区(Run-Time Data Areas),也就是JVM内存模型,次要由堆内存、办法区、程序计数器、虚拟机栈和本地办法栈组成,其中,堆和办法区是所有线程共有的,而虚拟机栈,本地办法栈和程序计数器则是线程公有的;类加载器(Class Loader)负责加载字节码文件,即java编译后的 .class 文件;执行引擎(Execution Engine) 的工作就是将字节码指令解释/编译为对应平台上的本地机器指令才能够。简略来说,JVM 中的执行引擎充当了将高级语言翻译为机器语言的译者。运行时数据区栈 Stack虚拟机栈与本地办法栈所施展的作用是十分类似的,其区别不过是虚拟机栈为虚拟机执行Java办法(也就是字节码)服务,而本地办法栈则是为虚拟机应用到的native办法(非Java)服务。 虚拟机栈 VM Stack:虚拟机栈形容的是Java办法执行的内存模型:每个办法在执行的同时都会创立一个栈帧(Stack Frame)用于存储局部变量表(局部变量表须要的内存在编译期间就确定了所以在办法运行期间不会扭转大小),操作数栈,动静链接,办法进口等信息。每一个办法从调用至出栈的过程,就对应着栈帧在虚拟机中从入栈到出栈的过程。本地办法栈 Native Method Stacks:本地办法栈用于存储本地办法的局部变量表,本地办法的操作数栈等信息。当栈内的数据在超出其作用域后,会被主动开释掉。本地办法栈是在程序调用或JVM调用本地办法接口(Native)时候启用。虚拟机栈由一帧帧的栈帧组成,而栈帧蕴含:局部变量表、操作栈等子栈。每个办法在执行的同时都会创立一个栈帧(Stack Frame)用于存储局部变量表(局部变量表须要的内存在编译期间就确定了所以在办法运行期间不会扭转大小),操作数栈,动静链接,办法进口等信息。每一个办法从调用至出栈的过程,就对应着栈帧在虚拟机中从入栈到出栈的过程。 每个线程蕴含一个栈区,栈中只保留根本数据类型的对象和自定义对象的援用,即:栈寄存的是援用/地址,也能够了解成对象的名称。 堆 Heap一个JVM实例只有一个堆内存,所以JVM中所有的线程共享一个堆。堆是Java内存治理的外围区域,在JVM启动的时候创立,空间大小在创立时就曾经确定下来,是JVM中最大的一块内存空间,默认的大小取决于物理机上的内存大小。 在JVM启动时能够指定堆内存的大小,也是JVM内存调优的要害。 设置JVM内存的参数有四个,其中第四个是设置栈内存的参数:-Xmx Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其余内存开销而定;-Xms Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为雷同值,开发测试机JVM能够保留默认值;-Xmn Java Heap Young区大小,不相熟最好保留默认值;-Xss 每个线程的Stack大小,不相熟最好保留默认值。堆也能够了解成一块逻辑上间断而物理上不间断的内存空间,简直所有的实例都在这里分配内存,在办法完结后,堆中的对象不会马上删除,仅仅在垃圾收集的时候被删除,堆是GC(垃圾收集器)执行垃圾回收的重点区域,也是内存溢出的重点灾区。 简略来说,绝对于栈寄存的是变量的援用,堆则是存储实例变量的自身。 堆的组成部分在不同的Java版本里略有区别: Java7:新生代、老年代、永恒代Java8:新生代、老年代、元空间新生代 Young Generation蕴含1个新生区(Eden)和2个幸存区(Survivor),默认比例为: 8:1:1,新生代的GC为Minor GC。 两个幸存区也别离叫from和to,或者s0和s1,或者servivor1和survivor2。新生区:当初始加载对象时会进入新生区。幸存区:两个幸存区始终会有一个区为空,为空的区即是to区。其不会被动进行垃圾回收,只有新生区回收时才会附带进行GC。GC开始时对象只会存在于新生区和幸存区的From区中,幸存区的对象会从From区中复制到To区,这些存活的对象在达到肯定年龄(默认15)后会被移到老年代。 新生代中的根本流程是:新生区内存不足时,会进行YGC(Young GC)将没有指针的对象回收,残余的还有指针引向的对象放入一个幸存区中。下一次GC的时候,新生区的对象以及还存活的幸存区的对象都会放入另一个空的幸存区中,同时超龄的对象会被移入老年代。 新创建的对象都会被调配到新生区(一些大的对象非凡解决),这些对象通过第一次Minor GC后,如果依然存活,将会被移到Survivor区。对象在Survivor区中每熬过一次Minor GC,年龄就会减少1岁,当它的年龄减少到肯定水平时(能够通过-XX:MaxTenuringThreshold来设置),就会被挪动到老年代中。 因为新生代中的对象根本都是朝生夕死的(80%以上),所以在新生代的垃圾回收算法应用的是复制算法(replication algorithm),复制算法的根本思维就是将内存分为两块,每次只用其中一块,当这一块内存用完,就将还活着的对象复制到另外一块下面,复制算法不会产生内存碎片。 ...

January 6, 2022 · 1 min · jiezi

关于java基础:Java基础面向对象

面向对象与面向过程在面向对象程序(OOP:Object Oriented Programming)设计办法呈现之前,软件界宽泛风行的是面向过程(POP:Process Oriented Programming)的设计形式。 面向过程的设计中,解决的对象多以变量模式存在,解决的过程之间也不存在束缚关系,剖析出解决问题所需的步骤,而后用函数把这些步骤一步一步实现,应用时一次调用即可。简略来说,面向过程以实现性能的函数开发为主。 面向对象的设计中,将形成问题的事务形象成不同的对象,建设的对象不是为了实现一个步骤,而是为了形容某个事物在整个解决问题的步骤中的行为。简略来说,面向对象要首先形象出类、属性及其办法,而后通过实例化类、执行办法来实现性能。 面向对象的三大个性封装:暗藏对象的属性和实现细节,对外只提供拜访的接口,进步复用性和安全性; 面向对象与面向过程都具备封装性,然而面向过程是封装的是性能,而面向对象封装的是数据和性能。继承:定义父类之后,子类能够从根底类进行继承,进步了代码的复用率,重要的一点:类只能单继承; 继承是从已有类失去继承信息创立新类的过程。提供继承信息的类被称为父类(超类/基类),失去继承信息的被称为子类(派生类)。多态:父类或者接口定义的援用变量能够指向子类或具体实现类的实例对象,进步了程序的扩展性。 分为编译时多态(办法重载)和运行时多态(办法重写)。要实现多态须要做两件事:一是子类继承父类并重写父类中的办法,二是用父类型援用子类型对象,这样同样的援用调用同样的办法就会依据子类对象的不同而体现出不同的行为。封装封装是面向对象编程的核心思想,封装指的是将对象的属性和行为封装起来,这个将对象的属性和行为封装起来的载体是类。在面向对象中,形象进去的实物就是类,属于同一类的对象实例领有雷同的属性(数据)及办法(行为),Java中,所有对象/类的独特父类都是Object。 具体来说,生物的划分有:界、门、纲、目、科、属、种等,这里的每一个级别在程序中都能够形象成类。按人类的类别来看,咱们属于动物界-脊索动物门-脊椎动物亚门-哺乳纲-真兽亚纲-灵长目-类人猿亚目-人科-人亚科-人族-人属-智人种-早期智人亚种。具体的分类太业余,将其简单化一点:动物-脊椎动物-哺乳动物-灵长动物-人类。 所以人类能够形象成人(Human)这个类,而咱们每一个人,就是这个类外面的一个实例。 如果说咱们人的类命名成Human,代码能够示意如下: public class Human{}封装须要用到Java中的润饰变量(拜访控制符):private、protected、default和public。这些润饰变量代表着不同的拜访权限,其中: private:示意公有,只有本人类能拜访default:示意没有修饰符润饰,只有同一个包的类能拜访protected:示意能够被同一个包的类以及其余包中的子类拜访public:示意能够被该项目标所有包中的所有类拜访修饰符本类同包子类所有类private√×××default√√××protected√√√×public√√√√在类中,属性须要被暗藏起来,只提供接口来对其进行操作。属性设置为暗藏的益处有: 设置为公有后,只能通过getter办法来获取属性以及setter办法来设置属性,能够通过只提供getter办法而不提供setter办法来将属性设置为只读;因为只有getter/setter办法能获取到/设置实例对象的属性,所以能够在getter/setter办法里解决好这个属性的数据,减少一些检查和转化,能够防止一些属性谬误的问题;对于一些非凡的业务,甚至能够设置属性为protected等不便子类获取到父类的属性及办法,而又能够禁止其余的类获取这些属性和办法。public class Human{ // 名字 private String name; // 构造方法 Human(){ } // 设置名字 public void setName(String name){ this.name = name; } // 获取名字 public String getName(){ return this.name; }}继承继承是一种层次模型,层次结构的下层具备通用性,然而上层构造则具备特殊性。在继承的过程中子类(绝对上层)则能够从父类(绝对下层)继承一些属性和办法。提供继承信息的类被称为父类(超类/基类),失去继承信息的被称为子类(派生类)。 类除了能够继承这些办法和变量以外,同时还可能对这些属性和办法进行批改或者增加。从已有类失去继承信息创立新类的过程可能无效进步工作效率。简略来说,子类的对象领有父类的全副属性和行为,同时能够削减本人的所特有的属性和行为。 按下面人类的例子,人继承了灵长动物,灵长动物还有其余的子类,例如:猿、猴、猩猩等。灵长类都领有对生的拇指,所以人类继承灵长类的时候不须要重申这一点,然而人和其余灵长类的进食形式不同,所以能够对eat办法进行重写(override)。 灵长类: public class Primates{ // 有对生的拇指 private static boolean hasOpposingThumbs = true; public void eat(){ // 用手抓着吃 }}人类: public class Human extends Primates{ @Override public void eat(){ // 用刀叉筷子等工具吃 }}多态同一个行为具备多个不同表现形式或状态的能力就是多态。 ...

January 6, 2022 · 2 min · jiezi

关于java基础:JAVA基础之Collection的Lambda

明天讲一下Collection,以及Collection和Lamdba的联合Collection包含List(ArrayList,LinkedList)Set(HashSet) --- SortedSet(TreeSet)Queue (PriorityQueue)-----Deque(LinkedList,ArrayDeque)Map (HashMap)--- SortedMap(TreeMap)(Map不属于Collection)对于Iterable boolean forEach(Cosumer<? super E> consumer);对于Collection boolean removeIf(Predicate<? super E> filter);对于List boolean replaceAll(UnaryOperator<? super E> operator);boolean sort(Comparator<? super E> comparator);public class Main { public static void main(String[] args) { List<BankAccount> bankAccountList = new ArrayList<>(); bankAccountList.forEach(System.out::println); bankAccountList.removeIf(bankAccount -> bankAccount.getBalance()>20); List<String> names = new ArrayList<>(); names.replaceAll(name->name.toUpperCase()); names.replaceAll(String::toUpperCase); bankAccountList.sort(Comparator.comparing(BankAccount::getBalance) .thenComparing(BankAccount::getId)); }}对于Map void forEach(BiConsumer<? super K, ? super V> consumer);Map<String,List<BankAccount>> map = new HashMap<>();map.put("test",bankAccountList);map.forEach((city,list)-> System.out.println(city+": "+list.size() +" account"));输入:test: 0 accountputIfAbsent办法,能够间接get后再间接调用add办法 ...

November 16, 2021 · 1 min · jiezi

关于java基础:Java基础

面向对象三大个性1. 封装利用抽象数据类型将数据和基于数据的行为封装在一起,暗藏外部实现细节,用户应用其提供的对外拜访接口来操作该对象。类内应该高内聚,类与类之间低耦合。2. 继承以现有的类为根底,在其之上进行增加或批改操作,复用旧类的同时取得新的性能,具备 is-a 关系,继承遵循里氏替换准则,子类对象可能替换所有父类对象,也就是父类援用能够指向子类对象。如下,Cat 能够当做 Animal 来应用,也就是说能够应用 Animal 援用 Cat 对象,称为向上转型。Animal animal = new Cat();3. 多态编译时多态:办法重载运行时多态:满足三个条件-继承、重写、父类援用指向子类对象(向上转型),其阐明的是对象援用所指向的具体类型在运行期间才确定类图关系泛化关系:形容继承关系实现关系:实现一个接口聚合关系:整体由局部组成,整体和局部不是强依赖关系,整体不存在,局部能够独自存在组合关系:整体由局部组成,但整体和局部是强依赖的,整体不存在,则局部也就不存在了。关联关系:形容的是不同对象之间的存在关联,能够用 1 对 1、多对 1、多对多这种关联关系来示意依赖关系:在运行时起作用,依赖关系次要有三种模式--A 类是 B 类中的(某中办法的)局部变量、 A 类是 B 类办法当中的一个参数、A 类向 B 类发送音讯,从而影响 B 类发生变化。

July 24, 2021 · 1 min · jiezi

关于java基础:JAVA基础300篇

1、最罕用 DOS 命令DOS 命令曾经根本退出一般使用者的历史舞台了,然而依然有必要把握几个罕用的命令,便于在某些状况下更顺畅的操作程序。 DOS命令操作cd 目录门路进入一个目录cd ..进入父目录dir查看本目录下的文件和子目录列表cls革除屏幕命令高低键查找敲过的命令Tab 键主动补齐命令2、变量和数据类型和运算符2.1 准备常识二进制二进制数据是用 0 和 1 两个数码来示意的数。它的基数为 2,进位规定是“逢二进一”。数字计算机只能辨认和解决由‘0’.‘1’符号串组成的代码。其运算模式正是二进制。 十进制转二进制总体来说分为2种,非含有整数小数点(0.125)和含有整数小数点(8.125): 问题1:请问0.125转化成二进制是多少?答:0.001 解析过程:应用的是乘2取整,顺序排列办法。 从上往下推,0.125的二进制是0.001 问题2:请问8.125转化成二进制是多少?答:1000.001 解析过程:将8.125拆分成8和0.125。8的二进制是1000,0.125的二进制是0.001,合并就是1000.001 问题3:二进制的10,对应的十进制的值是多少?答:3"按权相加"法:二进制转换成十进制:基数乘以权,而后相加,简化运算时能够把数位数是0的项不写进去,(因为0乘以其余不为0的数都是0)。小数局部也一样,但精确度较少。

June 11, 2021 · 1 min · jiezi