版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java知识——精髓总结一、java概括与基础知识6二、方法与数组19三、面向对象(1)28四、面向对象(2)39五、异样办理和常用类59六、线程技术77七、会合框架(1)93八、会合框架(2)110九、IO操作(1)123十、IO文件操作(2)135十一、网络编程146十二、反射系统162十三、GUI界面181十四、Java高新技术(1)197十五、Java高新技术(2)205十六、Java高新技术(3)215十七、面试题之交通灯管理系统233十八、面试题之银行业务系统241一、java概括与基础知识61、何为编程?62、Java语言概括,历史、特色63、什么是跨平台性?原理是什么?JVM64、Jre和Jdk的差别?75、java虚假机JVM76、Java程序运转系统77、学习java注意的地方88、Java语法格式89、代码说明:单行//,多行/**/,文档说明/*/810、Java中的表记符811、java中的常量和变量912、Java成员变量和局部变量914、基本数据种类变换之向上转型和向下变换1115、Java的运算符1216、表达式和三目运算符1217、程序流程控制1318、三大循环结构:1519、嵌套循环与流程控制17二、方法与数组191、什么是方法(Method)?192、Java中方法的格式:193、方法里的属性204、方法特色205、什么是方法的重载(Overload)?216、可变参数227、数组简介:228、一维数组的申明与初始化:239、数组的使用:2410、分派内存空间2511、二维数组:2612、操作数组的工具类-Arrays2713、Java5新特色对数组的支持:28三、面向对象(1)281、什么叫面向对象?282、类293、结构方法304、static要点字315、匿名对象326、this要点字327、面向对象之封装328、接见修饰符339、类的设计分析3410、面向对象之继承3411、子类接见父类和方法覆写3512、super要点字和调用父类结构方法3613、面向对象之多态3714、引用变量种类变换38四、面向对象(2)391、基本数据种类的包装类392、基本数据种类和包装类相互变换403、基本种类和String之间的变换414、Object类415、代码块426、结构方法的私有化437、Singleton模式(单例模式)饿汉式和懒汉式448、final要点字469、抽象类4610、抽象类的表现-模板模式.......................................................................................4811、接口(interface)........................................................................................................5012、接口的使用.............................................................................................................5113、面向接口编程之制定标准和简单工厂模式.........................................................5214、面向接口编程之适配器模式.................................................................................5415、接口和抽象类的比较...........................................................................................5516、匿名内部类.............................................................................................................5617、列举类.....................................................................................................................56五、异样办理和常用类.........................................................................................................59592、异样办理格式...........................................................................................................603、多异样办理...............................................................................................................604、异样的分类...............................................................................................................615、申明异样(throws)................................................................................................62628、throw和catch同时使用..........................................................................................646410、String方法..............................................................................................................6611、StringBuffer与StringBuilder...............................................................................6812、Math和Random和UUID.....................................................................................7113、Date和Calendar.....................................................................................................7314、System.....................................................................................................................76六、线程技术.........................................................................................................................771、进度和线程...............................................................................................................772、创立线程方式...........................................................................................................783、两种进度创立方式比较...........................................................................................794、线程的生命周期.......................................................................................................815、控制线程...................................................................................................................826、多线程安全问题.......................................................................................................847、多线程安全问题的解决方法...................................................................................858、线程通信...................................................................................................................89七、会合框架(1)...............................................................................................................931、会合类&容器......................................................................................................932、Collection接口.........................................................................................................943、Iterator接口..............................................................................................................944、会合遍历输出方式...................................................................................................95997、List接口.................................................................................................................1038、List接口中常用类..................................................................................................1049、Map接口................................................................................................................108八、会合框架(2).............................................................................................................1101、Collections类.........................................................................................................1111123、泛型(Generic).........................................................................................................1134、泛型的使用1145、申明多个泛型种类和通配符1186、泛型的上限与下限1197、泛型接口和方法1218、泛型的嵌套(map例子)122九、IO操作(1)1231、IO的概括和File方法1232、递归(Recursion)1253、文件过滤器java.io.FilenameFilter1264、流1275、操作流的步骤(要点)1286、字节流和字符流1297、文件拷贝1318、字节→字符变换流1349、自动封闭资源的try语句134十、IO文件操作(2)1351、内存操作流1352、打印流1373、格式化输出1394、标准流1405、Scanner(简单文本扫描器)1416、缓冲流1447、归并流(SequenceInputStream)145十一、网络编程1461、什么是网络编程?1462、网络通信因素1473、TCP和UDP的联系和用途1474、InetAddress与Socket1485、UDP传输1496、TCP传输1538、小例子159十二、反射系统1621、反射的见解1622、获得Class对象1633、九个预约义Class对象1644、利用Class获得类的属性信息1655、Class中获得结构方法Constructor、方法Method、字段Field1676、利用反射创立对象1727、使用反射调用方法1758、使用反射调用可变参数方法1769、使用反射操作字段17810、反射和泛型-反射来获得泛型信息179十三、GUI界面1811、GUI(图形用户界面)1812、布局管理器1823、事件监听系统构成1834、Dialog1905、菜单193十四、Java高新技术(1)1971、Eclipse的使用技巧1972、静态导入(1.5特色,利处是不用写类名)1993、可变参数2005、基本数据种类的自动拆箱与装箱2016、列举2017、反射实现框架功能203十五、Java高新技术(2)2051、自察认识JavaBean2052、自察综合事例和Beanutils工具包2053、讲解(Annotation)2084、泛型211十六、Java高新技术(3)2151、类加载器2152、类加载器的拜托系统2163、一个类加载器的高级问题分析2204、代理的见解与作用2205、动向代理技术2226、分析JVM动向生成的类2228、实现近似spring的可配置的AOP框架229十七、面试题之交通灯管理系统2331、面向对象的分析与设计2342、Road类的编写2343、Lamp类的编写2364、LampController类的编写2395、MainClass类的编写239十八、面试题之银行业务系统2411、需求2412、需求分析2423、NumberManager类2424、NumberMachine类2435、CustomerType列举类2446、ServiceWindow类2447、MainClass类与Constants类248一、java概括与基础知识1、何为编程?编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最后获得结果的过程。为了使计算机能够理解人的企图,人类就必然要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够依据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机之间沟通的过程就是编程。2、Java语言概括,历史、特色是SUN(StanfordUniversityNetwork,斯坦福大学网络公司)1995年推出的一门高级语言。是一种面向Internet的编程语言。跟着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。是简单易学,圆满面向对象,安全靠谱,与平台没关的编程语言。java5.0此后的三大技术框架J2EE(Java2PlatformEnterpriseEdition)公司版在jdk5.0版本后称为JAVAEE,是为开发公司环境下的应用程序供应的一套解决方案。该技术系统中包含的技术如ServletJsp等,主要针对于Web应用程序开发。。J2SE(Java2PlatformStandardEdition)标准版在jdk5.0版本后称为JAVASE,这是在java基础阶段主要学习的内容,也是java的基础,此后不管从事Android开发或许是物联网+云计算的开发,等是建立在JSE基础上的,所以该技术是java的最核心技术,主要上课内容.。J2ME(Java2PlatformMicroEdition)小型版在jdk5.0版本此后称为JAVAME,该技术多应用于一些电子产品的嵌入式开发,从前在手机开发上应用的也比好多,但是跟着智好手机的发展,现在手机应用程序(比方Android程序)的开发已经不再使用该技术。3、什么是跨平台性?原理是什么?JVM所谓跨平台性,是指java语言编写的程序,一次编译后,能够在多个系统平台上运转。实现原理:Java程序是经过java虚假机在系统平台上运转的,只需该系统能够安装相应的java虚假机,该系统就能够运转java程序。(注意不是能在全部的平台上运转,要点是该平台能否能安装相应的虚假机)。我的总结:Java程序之所以能够实现跨平台运转,是因为它根本就不直接运转在任何基层平台上,而是需要在哪里运转,就在哪里(如Windows平台)起初准备好自己的Java平台,而这但是但是是安装和配置一个软件而已!4、Jre和Jdk的差别?JRE(:JavaRuntimeEnvironment),java运转环境。包含Java虚假机(JVMJavaVirtualMachine)和Java程序所需的核心类库等,假如想要运转一个开发好的Java程序,计算机中只需要安JRE即可。JDK:(JavaDevelopmentKitJava)开发工具包。JDK是供应给Java开发人员使用的,此中包含了java的开发工具,也包含了JRE。所以安装了JDK,就不用在独自安装JRE了。此中的开发工具:编译工具(javac.exe)打包工具(jar.exe)等简单而言:使用JDK开发完成的java程序,交给JRE去运转。我的总结:必然娴熟的记忆,核心类库,开发工具!5、java虚假机JVMJavaVirtualMachine
,简称
JVM;它是运转全部
Java程序的抽象计算机
,是
Java语言的运转环境,它是
Java
最具吸引力的特性之一,
JVM
读取并办理编译过的与平台没关的字节码
(class)文件。Java编译器针对JVM产生class文件,所以是独立于平台的。Java讲解器负责将JVM的代码在特定的平台上运转。Java虚假机是不跨平台的.6、Java程序运转系统编译:javac运转:java
文件名类名
.文件后缀名我的总结:
Java
程序的构成:
Java
源文件,字节码文件。7、学习java注意的地方Java语言拼写上严格区分大小写;一个Java源文件里能够定义多个Java类,但此中最多只能有一个类被定义成public类;若源文件中包含了public类,源文件必然和该public类同名;一个源文件中包含N个Java类时,编译后会生成N份字节码文件,即每个类都会生成一份独自的class文件,且字节码文件名和其对应的类名相同;我的总结:一个Java源文件只定义一个类,不相同的类使用不相同的源文件定义;将每个源文件中独自定义的类都定义成public的;保持Java源文件的主文件名与源文件中的类名一致;8、Java语法格式任何一种语言都有自己的语法例则,Java也相同,既然是规则,那么知道其如何使用就能够了。代码都定义在类中,类由class来定义,区分publicclass和class;代码严格区分大小写,如main和Main是不相同的;Java中的表记符与要点字;说明;main方法的作用:程序的进口保证程序的独立运转JVM调用9、代码说明:单行//,多行/**/,文档说明/*/1.单行说明//://后到本行结束的全部字符会被编译器忽视;2.多行说明/**/:/**/之间的全部字符会被编译器忽视3.文档说明/*/:在/*/之间的全部字符会被编译器忽视,java独有的(用于生成文档);我的总结:多行和文档说明都不可以够嵌套使用。10、Java中的表记符可简单理解为在Java程序中为了加强阅读性自定义的名称。比方:类名,方法名,变量名等。命名规则:由字母、数字、下划线、$构成,不可以够以数字开头注意:此处的字母还能够够是中文,日文等;大小写敏感不得使用java中的要点字和保存字别用JavaAPI里面的类名作为自己的类名。11、java中的常量和变量变量的见解:占有着内存中的某一个积蓄地区;该地区有自己的名称(变量名)和种类(数据种类);该地区的数据能够在同一种类范围内不断变化;为何要定义变量:用来不断的寄存同一种类的常量,并能够重复使用;使用变量注意:变量的作用范围,初始化值定义变量的格式:数据种类变量名=初始化值;注:格式是固定的,记着格式,以不变应万变。作用范围:定义开始到定义它的代码块结束;同一范围内,不允好多个个局部变量命名矛盾12、Java成员变量和局部变量局部变量:不是申明在类体括号里面的变量;局部变量使用前必然初始化值;局部变量没有默认初始化值;局部变量的作用域是从定义开始到定义它的代码块结束;成员变量:在方法体外,类体内申明的变量,又称字段(Field)或全局变量;(其实Java中没有全局变量,因为Java是面向对象语言,全部变量都是类成员)成员变量的作用域是整个类中;我的总结:注意成员变量和局部变量的差别packagereviewDemo;publicclassDemo2{publicstaticvoidmain(String[]args){inti;System.out.println(i);}}备注:局部变量调用前没有初始化,所以编译的时候就会报错!packagereviewDemo;publicclassDemo2{staticinti;publicstaticvoidmain(String[]args){System.out.println(i);}}备注:此时i为全局变量,未初始化会被赏赐默认的初始化值!程序正确!我的总结:局部变量是定义在方法中的变量,,,出了该方法就不可以够接见该变量了....成员变量是在类中定义,,,,并且在类的成员方法中都能接见的变量..13、基本数据种类在数据种类中,最常用也是最基础的数据种类,被称作基本数据种类。能够使用这些种类的值来代表一些简单的状态。Java语言的基本数据种类总合有以下8种,下面是依据用途区分出的4个种类:定点种类:整数型是一类代表整数值的种类。当需要代表一个整数的值时,能够依据需要从4各样类中精选适合的,假如没有特别要求的话,一般选择int种类。4种整数型差别主要在每个数据在内存中占用的空间大小和代表的数值的范围。浮点种类:小数型是一类代表小数值的种类。当需要代表一个小数的值时,能够依据需要从以下2种种类中精选适合的。假如没有特别要求,一般选择double种类。因为小数的积蓄方式和整数不相同,所以小数都有必然的精度,所以在计算机中运算时不够精确。依据精度和积蓄区间的不相同,设计了两种小数种类。字符型:字符型代表特定的某个字符,依据前面介绍的知识,计算机中都是以字符集的形式来保存字符的,所以字符型的值实质但是字符集中的编号,而不是实质代表的字符,由计算机完成从编号变换成对应字符的工作。Java语言中为了更为方便国际化,使用Unicode字符集作为默认的字符集,该字符集包含各样语言中常有的字符。在程序代码中,字符使用一对单引号加上需要表达的字符来表记,例如’A’、’a’等,自然也能够直接使用字符编码,也就是一个非负整数进行表示。布尔型:布尔型代表逻辑中的建立和不可以够立。Java语言中使用要点字true立。布尔型是积蓄逻辑值的种类,其实好多程序中都有逻辑值的见解,
代表建立,false代表不可以够Java把逻辑的值用布尔型来进行表达。14、基本数据种类变换之向上转型和向下变换向上变换:整型,字符型,浮点型的数据在混淆运算中相互变换,变换时依据以下原则:容量小的种类可自动变换为容量大的数据种类;byte,short,char
→
int
→
long
→
float
→
doublebyte,short,char之间不会相互变换,他们在计算时第一会变换为
int
种类。boolean
种类是不可以够够变换为其余基本数据种类。Eg:inti=123;longl=i;//自动变换,不需强转floatf=3.14F;doubled=f;向下变换:整型,字符型,浮点型的数据在混淆运算中相互变换,变换时依据以下原则:容量小的种类可自动变换为容量大的数据种类;byte,short,char
→
int
→
long
→
float
→
doublebyte,short,char之间不会相互变换,他们在计算时第一会变换为
int
种类。boolean
种类是不可以够够变换为其余基本数据种类。Eg:longl=123L;inti=(int)l;//必然强转doubled=3.14;floatf=(float)d;我的总结:种类转变小转大,自动!自动种类变换(也叫隐式种类变换)大转小,强转!强迫种类变换(也叫显式种类变换)15、Java的运算符运算符是一种特别符号,用以表示数据的运算、赋值和比较等共分以下几种:算术运算符(+、—、*、/、%)赋值运算符(=、+=、-=、*=、/=,、%=)关系运算符(>、>=、<、<=、!=)条件运算符(&&、||、!&、|、^)位运算符(&、|、^、~、>>、<<、<<<、>>>)我的总结:逻辑运算符用于连结布尔型表达式,在Java中不可以够够写成3<x<6,应当写成x>3&x<6。“&”和“&&”的差别:单与时,左边不论真假,右侧都进行运算;双与时,假如左边为真,右侧参加运算,假如左边为假,那么右侧不参加运算。“|”和“||”的差别同理,双或时,左边为真,右侧不参加运算。“^”与“|”不相同之处是:当左右都为true时,"^"结果为false。16、表达式和三目运算符是由数字、运算符、数字分组符号(括号)等以能求得数值的存心义摆列的序列;a+b3.14+a(x+y)*z+100booleanb=i<10&&(i%10!=0)表达式的种类和值:对表达式中操作数进行运算获得的结果是表达式的值。表达式值的数据种类即为表达式的种类。表达式的运算序次依据运算符的先从高到低的序行;先相同的运算符依据起初定的合方向行;“三目运算符”,法格式:x?y:z;此中
x
boolean型表达式,先算
x的,若
true,整个三目运算符的果是表达式y的,否就是
z的。package
reviewDemo;publicclassDemo2{publicstaticvoidmain(String[]args){Strings="lz";s=(s=="lz"?"正确":"");System.out.println(s);}}出:正确17、程序流程控制序构分支构(条件构)循构控制循构序构:假如代里没有流程控制,程序是至上而下一行一行行的,一条句行完此后行下一条句,直到程序的最后。if句:基本法:if(表达式){方法体}elseif(表达式){方法体}else(方法体)几种形式:三种格式:if(条件表达式){行句;}if(条件表达式){行句;}else{行句;}if(条件表达式){行句;}elseif(条件表达式){行句;}⋯⋯else{行句;}publicclassIf3{publicstaticvoidmain(Stringargs[]){inti=3;if(i>5){System.out.println("变量i大于5");}elseif(i>4){System.out.println("变量i小于4");}else{System.out.println("其余");}}}switch
控制语句格式:switch(表达式){case
表达式可能的结果值履行语句;
1:break;case
表达式可能的结果值履行语句;
2:break;...default:履行语句;break;//最后这个一般不写}备注:case之间与default没有序次。先履行第一个case,都没有般配的case值履行结束switch语句的两种状况:碰到break,switch语句履行结束。假如般配的case或许default没有对应的break,那么程序会从第一次般配的连续向下履行,运转能够履行的语句,直到碰到break或许switch结束为止。
default。case语句开始classswitch2{publicstaticvoidmain(String[]args){inta=7,b=5;switch(a-b){case3://表达式可能的值;{System.out.println("33!");}break;case4:{System.out.println("44!");}break;default://都没有履行则履行该语句!System.out.println("其余的");}}}18、三大循环结构:用于办理需要重复履行的操作;依据判断条件的建立与否,决定程序段落的履行次数,而这个程序段落我们称为循环体;while:起初不需要知道循环履行多少次;dowhile:同上,但是最少要履行一次(先做,后判断);for:需要知道循环次数;循环结构(while&dowhile)while语句格式:while(条件表达式值为true){履行语句;}dowhile语句格式:do{履行语句;}while(条件表达式值为true);我的总结:dowhile特色是不论条件能否知足,循环体最少被履行一次。循环里的条件表达式不可以够直接写false或直接写结果是false的表达式,但是能够使用变量来传达false值;循环结构(for)格式:for(初始化表达式(1);循环条件表达式(2);循环后的操作表达式(3)){履行语句;(4)}履行序次:(1)→(2)→(4)→(3)→(2)→(4)→(3)备注:1,for里面的3个表达式运转的序次,初始化表达式只读一次,判断循环条件,为真就履行循环体,此后再履行循环后的操作表达式,接着连续判断循环条件,重复找个过程,直到条件不知足为止。2,while
与
for
能够交换,差别在于
for
为了循环而定义的变量在
for
循环结束就在内存中释放。而while循环使用的变量在循环结束后还能够够连续使用。3,最简单无量循环格式:while(true),for(;;),无量循环存在的原由是其实不知道循环多少次,而是依据某些条件,来控制循环。Eg:用三种循环控制求出100以内前5个3的倍数的数字;classwhile{publicstaticvoidmain(String[]args){inti=1,k=0;while(i<=100){if(i%3==0){if(k<5)System.out.println(i);k++;}i++;}}}classdowhile{publicstaticvoidmain(String[]args){inti=1,k=0;do{if(i%3==0){if(k<5)System.out.println(i);k++;}i++;}while(i<=100);}}classfor{publicstaticvoidmain(String[]args){inti=1,k=0;for(;i<100;i++){if(i%3==0&&k<5){System.out.println(i);k++;}}}}19、嵌套循环与流程控制嵌套循环:循环里套循环假定外循环的循环次数是*n次。
m次,内循环的循环次数是
n次,那么内层循环的循环次数需要
mEg:利用for循环语句的嵌套打印出乘法口诀表classbreak1{publicstaticvoidmain(String[]args){for(inti=1;i<=10;i++)//定义i与j的值必然在for循环里面,不然每次跳出循环从头履行就无法取值{for(intj=1;j<=10;j++){if(j<=i)System.out.print(j+"*"+i+"="+i*j+"");//小注意:print()括号里面必然传达参数,println()无量制!}System.out.println();}}}流程控制break语句、continue语句;break:停止该层循环;continue:跳过该层循环注:①:若这两个语句走开应用范围,存在是没存心义的。②:这个两个语句后边都不可以够有语句,因为履行不到。③:continue语句是跳过本次循环,连续下次循环。④:标签的出现,能够让这两个语句作用于指定的循环。Eg:package
reviewDemo;publicclassDemo2{publicstaticvoidmain(String[]args){inti=1;for(;i<10;i++){System.out.println(i);if(i==8){break;//流程控制,不会圆满履行!}}}}二、方法与数组第二篇:1、什么是方法(Method)?方法是一了特定功能的代的会合。方法在法上的功能主要有以下两个:①:构化代将代依据功能行,使代的构比清楚,简单和改正,也就是程序的可性。②:减少代重复一个固定的功能,可能会在程序中多次使用,在使用只需要用写好的方法,而不用重复写的功能代。方法在写需要注意以下两点:①:方法的一个圆满的功能,所以在写要考到各样可能的状况,并每种状况做出适合的理。②:通用性(可重复利用)方法的是一种功能,在,能够依据需要,使方法具必然的通用性,除非必需,否不要写用的方法。在Java言中,适合的使用方法,将使程序更为雅,便于和使用。我的:方法:一段可重复使用的代段;程序中完成独立功能的一段代的会合。2、Java中方法的格式:[修符]
返回型
方法名
([参数型
形式参数
1,参数型
形式参数
2,⋯⋯
]){行句
;
[return
返回
;]//需要的}参数列表(参数的型
,参数的个数,参数的序)我的:只需上述有一个不一,那么个参数列表就不一!于方法而言,即使同名也不是同一个方法,也就是下面的方法名。3、方法里的属性接见控制符:接见控制符限制方法的可见范围,或许说是方法被调用的范围。制符有四种,按可见范围从大到小挨次是:public、protected,无接见控制符
方法的接见控,private。此中无接见控制符不书写要点字即可。详尽的范围在后续有详尽介绍。形式参数:在方法被调用时用于接收外界输入的数据。实参:调用方法时实质传给方法的数据。返回值:方法在履行完成后返还给调用它的环境的数据。返回值种类:起初商定的返回值的数据种类,如无返回值,必然给出返回种类
void。方法署名:方法名和方法的参数列表(能差别方法);//最要点的java语言中调用方法:对象名.方法名(实参列表)。实参的数量、数据种类和序次必然和所调用方法申明的形参列表般配。return语句停止方法的运转并指定要返回的数据。4、方法特色它能够实现独立的功能;必然定义在类里面;它只有被调用才会履行;它能够被重复使用;方法结束后方法里的对象失掉引用
;如何定义一个功能,并经过方法表现出来:①明确该功能运算后的结果.明确返回值种类;②明确在实现该功能过程中能否有未知内容参加运算,确立参数列表
;Eg:package
reviewDemo;/player的值分别是1,2,3或许其余值时,该方法返回“大明”,“二明”,“小明”,“我没有这个孩子”。*/publicclassDemo2{publicstaticvoid
main(String[]args){intplayer=5;System.out.println(
"返回的结果是:
"+show(player));}publicstaticswitch(p){case1:returncase2:
Stringshow("大明";
int
p){return"二明";case3:return"小明";default:return"我没有这个孩子!";}}}5、什么是方法的重载(Overload)?见解:在同一个类中,同意存在一个以上的同名方法,只需它们的参数个数或许参数种类或参数序次不相同即可。存在的原由:障蔽了一个对象的同一类方法因为参数不相同所造成的差别。特色:与返回值种类没关,只看参数列表。以下是方法重载的示例:publicvoida(inta){}publicinta(){}publicvoida(inta,Strings){}Eg:classChongzai{publicstaticvoidmain(String[]args){intret=name(3,4,5);System.out.println(ret);}publicstaticintname(inta,intb){intc=a+b;returnc;}publicstaticintname(inta,intb,intm)//
这就叫做方法的重载,只要参数列表不相同。利处:用户使用时限制很小;{intc=a+b+m;returnc;}}我的总结:方法重载,方法名相同,但是参数列表不一致!(和方法覆写不相同,方法覆写的方法名和参数列表都必然相同),注意方法重载和方法覆写的不相同!6、可变参数从java5开始出现了可变参数,这是对java方法及数组的拓展!方法中能够接受的参数不再是固定个数的,而是跟着详尽需求传达的多少来决定。定义格式:返回值种类方法名(参数种类...形式参数){}可变参数的特色:只能出现在参数列表的最后;...位于变量种类和变量名之间,前后有无空格都能够;调用可变参数的方法时,编译器为该可变参数隐含创立一个数组,接见可变参数。
在方法体中以数组的形式Eg:package
reviewDemo;import
java.util.Arrays;publicclassDemo6{publicstaticvoidmain(String[]args){int[]age={1,2,3,69,36,636,459};show(age);}public
static
void
show(
int
...a){/
/此时这里写的就是可变参数,和数组的作用相同!把数组给打印出来!System.out.println(Arrays.toString(a));}}7、数组简介:数组(Array)是Java语言中内置的一种基本数据积蓄结构,平常的理解,就是一组数的会合,目的是用来一次积蓄多个数据。数组是程序中实现好多算法的基础,能够在必然程度上简化代码的书写。备注:1.数组的利处:数组里的每个元素都有编号,
编号从
0开始,并且挨次递加,方便操作这些元素;使用Java数组:必然先申明数组,再给该数组分派内存;数组对应在内存中一段连续空间。数组元素必然是相同数据种类,也能够是引用数据种类,但是同一个数组中的元素必然是同一类数据种类。8、一维数组的申明与初始化:一维数组:能够理解为一列多行、种类相同的数据,此中每个数据被称为数组元素;一维数组的申明方式:typevarName[];
或
type[]varName;(
介绍)Eg:intage[];int[]age;数组的长度一旦确立,就不可以够改变,也就数组是定长的;我的总结:java语言申明数组的时候不可以够指定其长度(元素的个数)Eg:inta[5];//
非法初始化:Java中的数组必先初始化才能够使用,所谓初始化就是为数组的数组元素分派内存,并为每个数组元素赋值;数组初始化的两种方式:静态初始化:初始化时由我们自己指定每个数组元素的初始值,由系统决定需要的数组长度;格式:数组名=new数组种类[]{元素1,元素2,元素3...元素n};简化语法:数组名={元素1,元素2,元素3...元素n};动向初始化:初始化时由我们指定数组的长度,由系统为数组元素分派初始值;格式:数组名=new数组种类[数组长度];我的总结:不可以够静态和动向初始化同时使用:也就是说不可以够同时指定数组的长度和元素;Eg:packagereviewDemo;/申明数组及初始化*/publicclassDemo3{publicstaticvoidmain(String[]args){int[]age=newint[10];//动向初始化for
(inti=0;i<age.age[i]=i;System.out.print(age[i]+
length"
;i++){");}}}输出:01234567899、数组的使用:Java语言的数组索引是从0开始的,也就是说数组里的第一个元素的索引是0,第二个元素的索引是1,挨次能够类推。常有操作:给数组元素赋值数组名[索引]=数组种类的值;接见数组元素数组种类变量=数组名[索引];获得数组的长度intlen=数组名.length;//length是数组的属性遍历数组(备注:length属性和循环语句)数组元素的索引范围(0,长度—1)Eg:判断数组能否重复packagereviewDemo;/判断数组能否重复*/publicclassDemo3{publicstaticvoidmain(String[]args){int[]age={1,2,3,4,5,6,5};for(inti=0;i<age.length-1;i++){//双层循环,定住一个,再考虑下一个!for(intj=i+1;j<age.length;j++){if(age[i]==age[j]){System.out.println("有重复的!"+i+""+j);break;}}}}}求最大值:packagereviewDemo;publicclassDemo4{publicintintfor
staticvoidmain(String[]args){age[]=newint[]{12,26,3,60,55,6,48,4,98};max=age[0];(inti=0;i<age.length;i++){if(max<age[i]){max=age[i];}}System.out.println(max);}}经典用法:冒泡法排序packagereviewDemo;importjava.util.Arrays;冒泡排序publicclassDemo6{publicstaticvoidmain(String[]args){int[]age={1,2,36,363,56,95,12,32,1232,3263};for
(intfor
(if
i=0;i<j=i+1;j<=age.(age[i]>age[j]){inttemp=age[i];age[i]=age[j];age[j]=temp;
length
;i++){length
-1;j++){}}}System.
out.println(Arrays.
toString
(age));}}//输出为:[1,2,12,32,36,56,95,363,1232,3263]10、分派内存空间分派内存空间数组名=new数据种类[数组长度];new要点字用来实现为数组或对象分派内存数组拥有固定的长度。获得数组的长度:
数组名
.length定义数组+分派内存空间数据种类[]数组名=new数据种类[数组长度];定义数组时不指定长度,分派空间时指定数组长度;如:Stringcities[]=newString[6];数组元素:数组名[下标值];数组下标从0开始scores[0]=75;数组的内存分派栈内存和堆内存如定义一个数组int[]scores将在栈内存中为scores分派内存空间,其值是一个不确立的值。当履行语句scores=newint[5]时,将在堆内存分派连续5个空间,每个空间4个字节,用于寄存整型数据,其初始值为0,此后将该段空间首地点,也就是第一个元素的地点,比方0*3000,赋给scores变量。该地点相当于一个指针,指向堆内存中分派的空间。此时堆内存中分派的5个空间能够分别使用scores[0],向抵达scores[4]来表示。当履行四个赋值语句时,分别用指定值填补到对应元素地点。假如此时将null值赋给scores时,scores变量将不再指向任何地点,此时堆内存中分派的空间就变为了垃圾,由垃圾回收器在某一时间进行回收。在方法中定义的变量,包含基本数据种类变量和引用数据种类变量,都将在栈内存中分派空间,当超出变量作用范围后,自动回收我的总结:初始化=定义数组+分派空间+赋值11、二维数组:二维数组:(实质上是一个一维数组,它的每一个元素又是一个一维数组能够看做是一张表格。初始化:动向初始化
),int[][]
arr=newint[3][2];定义了一个二维数组,此中有
3个一维数组,每一个一维数组中有
2个元素静态初始化int[][]int[][]
arr=newint[][]{{1,2},{3,4},{5,6}};arr={{1,2},{3,4},{5,6}};Eg:publicclassDemo3{publicstaticvoidmain(String[]args){intage[][]=newint[][]{{1,2},{3,4},{5,6,7}};System.out.println(age[0].length);//2System.out.println(age[2].length);//3}}12、操作数组的工具类-ArraysstaticintbinarySearch(type[]a,typekey)
使用二分搜寻法来搜寻
key元素在数组中的索引;若a数组不包含
key,返回负数。(该方法必然已按升序摆列后调用)
。staticintbinarySearch(type[]a,intfromIndex,inttoIndex,typekey)使用二分搜寻法来搜寻key元素在数组中从fromIndex到toIndex的索引;若a数组不包含key,返回负数。(该方法必然已按升序摆列后调用)
。staticboolean[]copyOf(type[]original,intnewLength)staticbyte[]copyOfRange(type[]original,intfrom,intto)
复制指定的数组见下面备注将数组的指定范围复制到一个新数组。staticbooleanequals(type[]a,type[]a2)假如两个数组长度相等和元素一一相等,staticvoidfill(type[]a,typeval)将a数组全部元素都赋为val。staticvoidfill(type[]a,intfromIndex,inttoIndex,typeval)将a数组从formIndex引之间的元素都赋为val。staticvoidsort(type[]a)//sort(int[]arr)对指定的数组按数字升序进行排序。staticvoidsort(type[]a,intfromIndex,inttoIndex)对指定数组的从formIndex到
则返回true到tiondex索tiondex索引之间的元素按数字升序进行排序。staticStringtoString(type[]a)返回指定数组内容的字符串表示形式。多个数组元素之间用英文逗号或空格分开。我的总结:使用数组工具类能够节俭时间,提高效率,注意常查阅api;Eg:packagereviewDemo;importjava.util.Arrays;//使用Arrays类publicclassDemo4{publicstaticvoidmain(String[]args){int[]age=newint[]{12,26,3,60,55,6,48,4,98};System.out.println(Arrays.toString(age));//
直接打印出数组的方法int[]age2={1,2,3,4,5,6,98,65,23};inti=Arrays.binarySearchSystem.out.println(i);
(age2,98);}}13、Java5新特色对数组的支持:加强for循环→for-eachfor(参数种类参数名:数组名){代码块}Eg:package
reviewDemo;publicclassDemo6{publicstaticvoidmain(String[]args){int[]age={1,2,3,69,36,636,459};for(inti:age){System.out.println(i);}}}这样就用for-each把数组遍历输出!我的总结:for-each用于数组和Iterable对象!在此后的会合学习中还会常常用到for-each循环。三、面向对象(1)第三篇:1、什么叫面向对象?面向对象(Object-Oriented,简称OO)就是一种常有的程序结构设计方法。面向对象思想的基础是将相关的数据和方法放在一起,组合成一种新的复合数据种类,使用新创立的复合数据种类作为项目的基础。
此后面向对象是一个很抽象的见解,它相对面向过程而言。过程与对象都是一种解决问题的思想。面向过程:重申的是功能行为,一种过程,先干啥,再干啥;面向对象:将功能封装到对象里,重申的是具备某功能的对象依据面向对象的思想,能够把任何的东西看做对象!
;面向对象的三个特色:封装(Encapsulation);继承(Inheritance);多态(Polymorphism)。我的总结:面向过程:重申的是详尽的功能实现;(履行者)面向对象:重申的是具备功能的对象。(管理者)2、类类(class)是Java语言的最小编程单位,也是设计和实现Java程序的基础,本部分将深入介绍类的相关知识。类的见解类是一组事物共有特色和功能的描绘。类是对于一组事物的整体描绘,是依据面向对象技术进行设计时最小的单位,也是构成项目的最基本的模块。类的见解是抽象的,近似于建筑设计中的图纸,是对于现实需要代表的详尽内容的抽象。类只包含框架结构,而不包含详尽的数据。所以类代表的是整体,而不代表某个特定的个体。我的总结:类是抽象的,对象是详尽的,实实在在的!类的定义:[修饰符]class
类名{1~n个结构方法;0~n个字段;0~n个方法}定义类,其实就是定义类里面的对象对象包含:状态;(属性)功能、行为;(方法)经过类来描绘对象;状态--------成员变量;功能、行为——方法;Eg:class
Person{//属性privateprivateprivate
Stringintint
name;age;sal;方法publicvoidSystem.
show(){out.println(
"个人状况:
"+name+age+sal
);}}3、结构方法结构方法:用来结构类的实例(每一个类都默认有一个无参的结构方法,得使用字段:类或对象所包含的数据,对类状态的一种描绘;方法:类或对象的特色或行为
new调用)作用:给类中的字段进行初始化,能够用来创立对象。特色:方法名与类名相同不用定义返回值种类不需要写return语句我的总结:注意:默认结构方法的特色。多个结构方法是以重载的形式存在的。结构方法的重载:(需要哪个就去适配哪个,调用哪个)this([实参]);调用目前类的结构方法注意:this([实参]);必然放在结构器的第一行
;对象的产生格式:类名称对象名=new类名称();因为有(),所以是方法,实质上它就是结构方法,并且是非私有的结构方法。如:CellPhonecp=newCellPhone();Eg:classPerson{privateprivateprivate
Stringintint
name;age;sal;publicvoid
show(){System.
out.println(
"个人状况:
"+name+age+sal
);}publicPerson(Stringname){super();=name;}publicPerson(Stringname,
int
age){super();=name;this.age=age;}publicPerson(Stringname,
int
age,
int
sal){super();=name;this.age=age;this.sal=sal;}}4、static要点字特色:跟着类的加载而加载优先于对象存在被全部对象所共享能够直接被类名调用使用注意:静态方法只能接见静态成员但是非静态成员能够接见静态成员;静态方法中不可以够够使用this,super要点字主方法(main)是静态的(能够利用类名去调用静态的入死循环,致使内存溢出,jvm自动停止!)
main
方法,很正常!但是会陷publicstaticvoidmain(String[]agrs){}可修饰字段,方法。用static修饰的成员表示它属于这个类共有,而不是属于该类的单个实例。static修饰的字段==类字段static修饰的方法==类方法没使用static修饰的字段和方法,成员属于类的单个实例,不属于类。没有没有
staticstatic
修饰的字段修饰的方法
==实例字段==实例方法类和实例接见字段和方法的语法:接见类成员:类.字段接见实例成员:实例.字段
类.方法实例.方法我的总结:static修饰的字段和方法,既能够经过类调用,也能够使用实例调用;没static修饰的字段和方法,只能使用实例来调用(建议使用:类名来调用;其实在基层,对象调用类成员,也会变换类名调用)static要点字不可以够与this,super同时连用!5、匿名对象一个没出名字的对象,创立了一个对象出来特色:对方法或字段只进行一次调用时;可作为实质参数进行传达;只在堆里面开拓积蓄地区,只能使用一次,使用完就被销毁了;何时使用?只拿来用一次!!newPerson();表示匿名对象,没出名字的对象
,没有赋给一个变量
;newPerson().age=17;//
使用一次此后就被销毁了6、this要点字特色:this表示目前对象。目前对象←→目前正在调用实例成员的对象换言之:谁调用了方法,谁就是目前对象。什么时候使用this要点字呢?方法间的相互调用;this.字段;结构器中相互调用,但是此时this([参数])必然写在结构方法第一行。this不可以够用在static修饰的方法里和static修饰的代码块里;Eg:结构方法中的=name;7、面向对象之封装封装的两个含义:1.把对象的状态和行为看作一个一致的整体,将二者寄存在一个独立的模块中(类);2."信息隐蔽",把不需要让外界知道的信息隐蔽起来,尽可能隐蔽对象功能实现细节,字段;封装系统在程序中的表现是:把描绘对象的状态用字段表示,描绘对象的行为用方法表示,把字段和方法定义在一个类中,并保证外界不可以够任意改正其内部的字段值,也不同意任意调换其内部的功能方法。程序中的一种表现:往常将类中的成员变量私有化(private),经过对外供应方法setXxx,getXxx),可对该变量(xxx)进行接见。boolean种类的变量没有getXX,只有isXX;Eg:classPerson1{privateStringname;privateintage;privateintsal;publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}}8、接见修饰符private类接见权限:本类内部能够接见,不可以够继承到子类;default什么都不写,包接见权限:本类内部能够接见,同包其余类也能够接见,同包可继承;protected子类接见权限:本类内部能够接见,不相同包的子类也能够接见,同包其余类也能够接见,能继承到子类;public公共接见权限:任何地方都能够接见,能继承到子类;我的总结:9、类的设计分析分析思路:依据要求写出类所包含的字段;全部的字段都必然私有化;封装此后的字段可经过setter和getter设值和获得;按需求可增添若干结构方法;依据需求可增添相应的方法;类中的全部方法都不要直接手理(输出打印),而是交给调用者去办理。10、面向对象之继承第一有反应一般事物特色的类,此后在此基础上反应出特别事物的类;也就是说:继承是一种从一般到特其余关系;特色:1、提高了代码的复用性。2、让类与类之间产生关系,有了这个继承关系才有了多态的特色。3、Java语言中只支持单继承(有别于C语言)。因为多继承简单带来安全隐患(父类多了,功能相同的话,就会出现调用不确立性吗,覆写一个方法,终归覆写的谁的?)。ps:接口能够实现多继承4、Java支持多层继承,object是每个类的超类,实现树形结构。我的总结:继承是多态的前提。对类而言,只支持单继承。格式:[修饰符]classSubClassextendsSuperClass依据这种关系,我们把
SuperClass
类称为父类或基类,把
SubClass称为子类或派生类或拓展类;我的总结:java.lang.Object是全部类的父类,Object要么是直接父类要么是间接父类。Eg:学生属于人的一种特别状况,此时我把人的共性写在Person类里面,为了让学生拥有这些共性(其余比方老师也能够有这些共性),此后我就让学生来拓展Person类。我的总结:子类与父类的关系:子类拓展父类(子类是父类的一种特别状况)主假如以父类为基础,此后增添属于自己的字段和方法。父类的私有成员子类不可以够继承到;父类的结构方法不可以够被继承;Java只支持单继承,不支持多继承;//不然的话,比方show方法,继承了多个,不知道终归调用那一个。一个类有且只有一个直接父类;一个类没显示的继承其余的一个类的时候,默认的直接父类就是Object类;Student的直接父类是Person,Object类也是Student类的父类,但是是间接父类;一旦一个类显示的继承了其余的一个类的时候,此时默认的直接父类Object就会被撤消;Java里一个类只能有一个直接父类;java.lang.Object是全部类的父类,Object要么是直接父类要么是间接父类。子类对象实例化过程在继承操作中,对于子类对象的实例化:子类对象在实例化从前必然第一调用父类中的结构方法此后再调用自己的结构方法。11、子类接见父类和方法覆写子类不可以够直接接见父类的私有成员;但是子类能够调用父类中的非私有方法来间接接见父类的私有成员。Person类中有私有字段name,Student继承PersonnewSudent().name;×newStudent().getName();√子类拓展父类(子类是父类的一种特别状况)主假如以父类为基础,此后增添属于自己的字段和方法。方法覆写产生原由:当父类中某个方法不适合于子类时,子类出现父类如出一辙的方法.判断必杀技:子类方法前加上@Override能编译经过,表示是方法的覆写。调用被覆盖的父类方法:使用super.方法名(实参);方法覆写时应依据的原则(一起两小一大):(一起):方法署名必然相同;(两小):子类方法的返回值种类比父类方法的返回值种类更小或相等子类方法申明抛出的异样应比父类方法申明抛出的异样更小或相等;(一大):子类方法的接见权限应比父类方法更大或相等;子类需要覆写父类方法。当父类的某个方法不适合于子类自己的特色行为时就当覆写父类中应当改变的方法。12、super要点字和调用父类结构方法表示父类对象的默认引用假如子类要调用父类被覆盖的实例方法,可用super作为调用者调用父类被覆盖的实例方法。使用super调用父类方法使用super调用父类的结构方法调用结构方法本类中调用另一个重载结构方法用this(参数列表)子类结构方法调用父类结构方法用super(参数列表)子类调用父类的结构方法时:super必然放在第一句Java在履行子类的结构方法前会先调用父类无参的结构方法,其目的是为了对继承自父类的成员做初始化操作。子类在创立对象的时候,默认调用父类的无参结构方法,假如子类结构方法中显示指定调用父类其余结构方法,就调用指定的父类结构方法,撤消调用父类无参结构方法。Eg:packagereviewDemo;classA{StringA(){
name;System.
out
.println(
"父类默认隐式的结构方法!
");}A(Stringname){System.out
.println(
"父类显式的结构方法!
");}}classBextendsA{B(){super(null);System.out.println("子类默认隐式的结构方法!");}}publicclassDemo10{publicstaticvoid
main(String[]args){newB();}}13、面向对象之多态多态:指同一个实体同时拥有多种形式好似,你去面馆吃面,说我要吃面,那么;老板给我牛肉面,鸡蛋面等都能够,这就是说"面"有多种形态,也就是说实体有多种形态;编译时的种类由申明该变量时使用的种类决定,运转时的种类由实质赋给变量的对象决定。假如编译时种类和运转时种类不相同,就出现多态。Eg:前提:StudentextendsPerson:Personp=newPerson();Students=newStudent();Personp=newStudent();//多态引用关系:父类变量指向子类实例对象实现多态的系统:父类的引用变量能够指向子类的实例对象,而程序调用的方法在运转期才动向绑定,就是引用变量所指向的真的确例对象的方法,也就是内存里正在运转的那个对象的方法,而不是引用变量的种类中定义的方法。多态的作用:把不相同的子类对象都看作父类来看,能够障蔽不相同子类对象之间的差别,写出通用的代码,做出通用的编程,以适应需求的不断变化。只改正方法的实现,不用改正方法的申明继承是多态产生的前提条件;分类:编译时多态:方法重载运转时多态:方法覆写Eg:packagetest;classDog{voideat(){System.out.println("一般的狗吃一般的狗粮!");}}classHashDogextendsDog{voideat(){System.out.println("哈士奇吃哈士奇的狗粮!");}}classZangAoDogextendsDog{voideat(){System.out.println("藏獒吃藏獒的狗粮!");}}定义一个动物园喂的方法classZoo{voidfeed(Dogd){d.eat();}}publicclassDemo11{publicstaticvoidmain(String[]args){Doghd=newHashDog();Dogzd=newZangAoDog();Zooz=newZoo();z.feed(hd);z.feed(zd);}}输出:哈士奇吃哈士奇的狗粮!藏獒吃藏獒的狗粮!14、引用变量种类变换向上转型(子类→父类):(自动完成)父类名称父类对象=子类实例;向下转型(父类→子类):(强迫完成)子类名称子类对象=(子类名称)父类实例;对象名instanceof类判断指定的变量名此时引用的真切种类是不是目
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《珠宝玉石教程》课件
- 车辆租赁协议三篇
- 人力资源行业员工福利顾问工作总结
- 2003年海南高考语文真题及答案
- 水利行业的保安工作总结
- 2023-2024年企业主要负责人安全培训考试题附答案【培优】
- 2023年-2024年项目部安全培训考试题【易错题】
- 1000字的贫困申请书范文5篇
- 开题答辩概览
- 电灼伤护理查房
- 调味料生产工艺流程图
- 2023北师大版六年级上册数学期末试卷(共8套)
- 企业的涉税风险
- 武汉大学抬头信签纸
- 新人教版七年级下册生物每课知识点总结
- 印刷作业指导书
- 2022年农业示范基地建设工作总结
- 硬笔书法比赛方案精选
- 火力发电厂山谷型干贮灰场设计
- 柳宗元毛笔楷书字帖
- 电伴热带热计算表xls
评论
0/150
提交评论