尚学堂Java学习笔记

合集下载

!尚学堂150_j2se_笔记

!尚学堂150_j2se_笔记

150班尚学堂j2se总结1. 解决问题的办法仔细阅读-> 思考环节-> 进行调试(不要一字一句的对照)-> 问google -> BBS2. 学习方法-> 敲/ 背/ 调3. 程序员的桌面设置(详细列表/ 显示所有文件/ 标题栏地址栏全路径)第一章λ1. java的历史与体系结构2. java的运行过程(类装载器(ClassLoader)/ 字节码校验器等)3. java的核心机制(虚拟机/ 垃圾收集)4. java的特点(面向对象/ 安全/ 跨平台)5. java是编译型还是解释型(先编译,后解释)6. path (尽量改用户path / 改完要重新启动DOS窗口/ Echo %path%)7. classpath (放置.class文件的路径, *.jar也是一个路径)8. JDK&JRE 的概念9. HelloWorlda) NoClassDefFoundError 一般是类名错误或者是classpath设置不对b) 看见bug不许害怕养成记录Bug、进行知识管理的好习惯c) 类/ 类体/ public class 只能有一个,且和文件名字需要一致d) Javac不区分大小写,跟classapth没关系10. 程序格式的问题(视频)11. java类装载器的运行机制(懒加载)12. java垃圾收集器的运行机制第二章λ1. 标识符的规则不用记关键字表不用记2. 二进制/ 十进制/ 十六进制3. 程序运行过程a) Load into memory -> find the main method -> run line by line4. 操作系统或运行环境对于内存的分块(Code Segment / Data Segment / Heap / Stack)5. 变量的本质(内存中的某一块区域)6. java的char类型是两个字节,String(内码)UTF-87. 分析表达式应该从里到外8. 变量的作用域(只在声明的{}内部)9. 变量之间的类型转换(默认转换和强制转换)10. 方法(形参实参返回值返回值类型)a) 方法调用给形参和返回值分配临时空间/ 把实参的值copy到形参/ 方法执行λλ执行完毕后释放所有和方法有关的局部变量内存11. if (可以省略大括号,但是不推荐省略)12. swtich (小心Case穿透/ 必须int类型)13. for (三个表达式都可以省略)14. while do while break continue15. 递归调用(内存分析图)a) 重点考虑递归方法(名字、参数、返回值)其中参数一定是在不断变化的,并能最终让方法结束。

尚学堂程序员笔记

尚学堂程序员笔记

1、一个Java源程序是由若干个类组成。

2、class是Java的关键字,用来定义类。

3、Java应用程序中有多个类时,java命令后的类名必须是包含了main方法的那个类的名字。

4、一个Java应用程序必须且只有一个类含有main方法。

5、在一个Java应用程序中main方法必须被说明为publicstaticvoid。

6、Java中所有程序都使用方法,应用程序以main方法开始。

7、Java源文件中有多个类,但只能有一个类是public类。

8、Java源程序编译后生成的字节码文件扩展名为class。

9、用来标识类名、变量名、方法名、类型名、数组名、文件名的有效字符序列称为标识符。

10、Java语言规定标识符由字母、下划线、美元符号和数字组成,并且第一个字符不能是数字。

11、关键字就是Java语言中已经被赋予特定意义的一些单词,不可以把这类词作为名字来用。

12、使用关键字boolean来定义逻辑变量。

13、关键字就是Java语言中已经被赋予特定意义的一些单词。

14、结构化程序设计的基本数据类型包括逻辑类型、整数类型、字符类型、浮点类型。

15、Java中byte型数组在内存中的存储形式是补码。

16、对于int型变量,内存分配4个字节。

17、对于byte型变量,内存分配1个字节。

18、对于long型变量,内存分配8个字节。

19、对于short型变量,内存分配2个字节。

20、结构化程序设计的基本数据类型包括整数类型、逻辑类型、字符类型、浮点类型。

21、使用关键字char来定义字符变量。

22、结构化程序设计的基本数据类型包括字符类型、逻辑类型、整数类型、浮点类型。

23、java中,浮点型变量的类型有float和double两种。

24、对于float型变量,内存分配4个字节。

25、对于double型变量,内存分配8个字节。

26、结构化程序设计的基本数据类型包括字符类型、逻辑类型、整数类型、浮点类型。

27、Java使用Unicode字符集。

java-课堂笔记-第一章至第八章知识点梳理

java-课堂笔记-第一章至第八章知识点梳理

Java-课堂笔记-第一章至第八章知识点梳理1.控制台程序开发1.1 开发Java程序的步骤(1)编写源程序:Java源程序文件后缀名.java(2)编译源程序:使用javac命令编译源程序,编译之后的文件后缀名.class (3)运行使用java命令运行编译之后的.class文件1.2 程序开发环境记事本、Eclipse或MyEclipse1.3 控制台输入/输出(1)从控制台输入信息使用Scanner对象第一步:创建一个Scanner扫描器对象Scanner input = new Scanner(System.in);第二步:导入Scanner包import java.util.Scanner;第三步:获取从控制台输入的整数int num = input.nextInt();获取从控制台输入的小数double num = input.nextDouble();获取从控制台输入的字符char ziFu = input.next().charAt(0);获取从控制台输入的字符串String str = input.next();(2)从控制台输出信息使用System.out.print();System.out.println();转义字符:\n:换行\t:一个制表符(8个空格)1.4 程序注释Java中的注释有3种:(1)单行注释://这里是注释内容(2)多行注释:/*这里是注释内容*/(3)文档注释:/**这里是注释内容*/1.5 程序调试2.变量和运算符2.1 变量变量:变量就是变化的量,是数据存储空间的表示,即数据在内存空间地址的别名(1)变量的声明语法:数据类型变量名;举例:int score;//声明一个int类型的变量score,保存成绩(2)变量的赋值(初始化)基本数据类型的赋值使用“=”赋值语法:变量名 = 值;举例:score = 98;引用数据类型使用new关键字语法:数据类型变量名 = new 数据类型();举例:Scanner input = new Scanner(System.in);2.2 常量2.3 运算符(1)赋值运算符:=、+=、-=、*=、/=、%=举例:sum += i;//相当于sum = sum + i;(2)算术运算符:+、-、*、/、%(3)关系运算符:>、<、>=、<=、==、!=(4)逻辑运算符:&&、||、!(5)自增运算符:i++或++ii++ 相当于 i = i + 1;(6)自减运算符:i--或--ii-- 相当于 i = i - 1;(7)三目运算符:?:3.数据类型与数组3.1 数据类型(1)基本数据类型整型:byte、short、int、long浮点型:float、double字符型:char布尔型:boolean(2)引用数据类型String、数组、类(class)、接口(3)数据类型转换自动数据类型转换自动数据类型转换的条件1.目标类型和源类型数据类型要兼容,数值类型(整型和浮点型)相互兼容2.目标类型要大于源类型,double型可以存放int型数据,因为double型变量分配的空间宽度足够存储int型变量强制数据类型转换语法:(数据类型)表达式;3.2 数组(1)数组的基本用法数组声明语法:数据类型[] 数组名;或数据类型数组名[];数组分配空间语法:数组名 = new 数据类型[数组长度];数组赋值静态赋值:给数组元素单个赋值如:scores[0] = 98;scores[1] = 87;动态赋值:使用for循环动态给数组元素赋值如:for(int i=0;i<scores.length;i++){ //每次循环把输入的数值赋值给数组元素scores[i] = input.nextDouble();}直接创建数组:方式一:数据类型[] 数组名={值1,值2,值3,....};方式二:数据类型[] 数组名=new 数据类型[]{值1,值2,值3,..};访问数组元素:语法:数组名[下标值];获取数组长度:语法:数组名.length;(2)数组应用数组排序:1.import java.util.Arrays;//导入Arrays工具包2.Arrays.sort(数组名);求最大值:(见第七章数组课堂笔记)求最小值:(见第七章数组课堂笔记)4.流程控制语句4.1 分支结构(选择结构)(1)if选择结构if(判断条件){执行语句;}(2)if-else选择结构if(判断条件){执行语句1;}else{执行语句2;}(3)多重if选择结构if(判断条件1){执行语句1;}else if(判断条件2){执行语句2;}else if(判断条件3){执行语句3;}else{执行语句4;}(4)嵌套if选择结构if(判断条件1){if(判断条件2){执行语句1;}else{执行语句2;}}else{执行语句3;}(5)switch选择结构switch(表达式){case 常量1:代码块1;break;case 常量2:代码块2;break;case 常量3:代码块3;break;.......default:代码块n;break;}4.2 循环结构(1)while循环while(循环条件){循环操作;}特点:先判断,后执行(2)do-while循环do{循环操作;}while(循环条件);特点:先执行,后判断(3)for循环for(循环初始变量;循环条件;循环变量的更新){循环操作;}循环次数固定的时候,优先选用for循环while、do-while、for三种循环的对比,需要重点看下4.3 跳转语句(1)break用在switch选择结构中,表示跳出switch选择结构用在循环结构中,表示跳出整个循环或结束整个循环用在二重循环结构中,表示结束内层循环,继续执行外层循环(2)continuecontinue只能用在循环结构中,表示结束本次循环,进入下一次循环用在二重循环结构中,表示结束内层循环的本次循环,进入下一次循环(3)return。

尚学堂java300集学习笔记

尚学堂java300集学习笔记

如何做正确的选择1、一个人不能太笨2、要有浓厚的兴趣3、要有丰富的信息源尚学堂java300集学习笔记6、标识符:A、标识符不能用数字开头B、标识符不能包含除了字母、数字、下划线、$符号之外的其他符号。

C、不可以是java的关键字D、java标识符对大小写敏感,不限制长度Java保留字7、数据类型基本数据类型数值型—>整数型:byte、short、int、long浮点型:float、double字符型布尔型引用数据类型进制转换 Integer.toBinaryString转成二进制、Integer.toOctalString转成八进制、Integer.toHexString转成十六进制8、浮点数存在舍入误差,如果需要不产生误差的精确数据运算,则需要使用BigDecimal 类。

BigInteger类则可以表示超过8字节的大整数。

Boolean类型有两个类型:true false12、A、java是一种强类型语言,每一个变量都必须声明其变量类型B、变量要素包括变量名、变量类型、作用域。

C、变量在使用时必须对其声明,只有在变量声明以后,才能为其分配相应长度的存储单元,声明格式为:Type varName [= value][(varName[=value])]D、局部变量,方法体内,使用前必须声明&初始化并赋值;方法体外的为实例变量或者成员变量15、eclipse16、eclipse的debug模式17、控制语句A、顺序B、选择C、循环选择包括:单选结构、双选结构、多选结构24、方法(method function)方法是完成特定功能的代码片段,声明格式:【修饰符1 修饰符。

2】返回值类型方法名称(参数列表){java代码。

} return语句的作用:1、返回值2、结束方法的运行设计方法的原则:方法就是实现某个功能的语句块的集合,我们设计方法的时候最好确保一个方法实现一个功能,这样有利于我们后期的扩展。

尚学堂学习笔记1-前言

尚学堂学习笔记1-前言

Java基础:1.语法基础:变量、循环、分支2.OO:面向对象(最重要)3.Exception:异常4.Array:数组5.基础类(常用类)6.I/O Stream:输入输出流7.Collection/Generic:集合类8.Thread:线程9.TCP/UDP:网络底层10.GUI:Graphical User Interface(图形用户界面、图形化用户接口)窗口11.Meta Data:与EJB3.0息息相关12.Regular Expression:正则表达式Java体系:JDK初步:其他方向的基础数据结构及算法:排序算法、搜索算法、时间复杂度(重要)、链表(涉及到算法会考)Java本身把数据结构知识包装的特别好,中型往上公司面试都会考数据结构算法知识,中小型公司考数据结构会比较少。

Java Web编程:针对Web程序J2EE:企业级应用J2ME:移动设备移动增值(3G):移动增值业务比较火(短信、彩信、彩铃)SP运营商学习Java知识以及后面的框架,掌握了原理比掌握了什么都强,掌握了原理性及基础的东西,学习新知识其实很轻松。

掌握一些基础知识以后才能培养自学能力教学方式:巨无霸式的教学:理论、举例、理论回顾、练习、讲解注重结合工程实践注重传授自学能力时间比较短强度比较大,改背一些东西就背能力的三个层次:知识:学习前人的知识解决问题的方法:灵活运用学到的知识解决问题的思路:创造解决问题的思路学习没有捷径,要培养自己的耐心;企业不在乎你学的知识点到底有多深,而是在乎你到底做过哪些项目。

把浮躁的心压下来。

运用自学的能力:读(读别人代码)、写(最重要)、查、背预备知识:英语(多看)、计算机基本操作没有人天生英语都好,都是自己学出来的。

企业管理软件咨询行业更注重管理和协调的能力,无论做哪一行勤奋和努力是必须的。

共享软件:技术需要全面,比如迅雷、360等。

企业与学校之间的区别:时限、实用为主浩瀚知识的分类:1.实际开发中经常使用的(牢牢掌握)2.不经常使用用时就能查得到的(了解)3.八辈子用不着一回的(运用自己的能力去查)4.把所有精力放到工作中马上就能用得上的知识学习上,不要过于钻某个知识点细节,管好自己的精力。

尚学堂java笔记

尚学堂java笔记

CoreJava编程思想: 如何把现实的问题,找到计算机的求解办法面向过程的思想:大过程->细化若干小过程 ->逐个实现每个过程面向对象的思想对象:一切客观存在的事物属性:对象有什么方法:对象能做什么对象的属性可能又是一个对象对象间彼此方法调用一个对象既可能是方法的提供者,也可能是方法的调用者客观世界是一个面向对象的世界人们解决客观问题时,采用的是面向对象的思想1. 先找到能够解决问题的对象2. 让对象间有机的结合,完成需求计算机问题一定来自于现实中的需求在计算机领域中使用面向对象的思想 (模拟现实)计算机中的对象:1.对客观对象的抽象2.JVM中的一块数据用来代表生活中的对象面向对象的优势1.各司其职简单的对象组成复杂的系统2.弱耦合性组成系统的对象之间联系比较松散3.可重用性对象可以重复使用4.可扩展性在原有对象的基础上扩充新的功能========================================================类1.客观对象在人脑中的主观反映对客观对象共性的抽象是人对对象的认识2.对象的模板属性: 实例变量 (对比局部变量)局部变量: 定义在方法内部的变量(包括方法的形参)1.先赋值,后使用2.作用范围:从定义开始,到定义它的代码块结束3.重合范围中,不允许两个局部变量命名冲突实例变量: 对象中的属性,定义在类中,却不在任何方法中1.有默认值2.作用范围:至少是全类的内部3.重合范围中,允许和局部变量命名冲突,冲突时局部优先方法:方法的定义(声明):对象能做什么修饰符返回值类型方法名 (参数表) 抛出的异常方法的实现:对象怎么做方法的重载 (Overloading)可以定义多个方法,方法名相同,参数表不同参数的个数不同参数的类型不同参数类型的排列不同形参的名字不同不算重载!!编译时多态:在程序编译时,由编译器根据实参的类型,匹配某个重载的方法将对象的同类方法,由于参数表的不同造成的差异,对对象的调用者屏蔽=========================================================构造方法1.没有返回值类型2.方法名必须和类名相同3.不允许手工调用在对象的构造过程中自动调用一次如果一个类中,没有定义任何构造方法,系统会提供一个默认的无参的构造方法! 类的组成: 属性-构造方法-方法类名变量名=new 类名(实参);Student s=new Student();s.study(); //调用s引用所指向的对象的study方法简单变量: int a 存值对象变量: Student s 存地址引用Java参数传递规则:简单类型参数: 传值对象类型参数: 传引用实参和形参会指向同一个对象========================================================this1.引用当前对象当实例变量和局部变量发生命名冲突时,用this.去访问实例变量2.用在构造方法中调用本类其它构造方法必须是构造方法的第一句话=========================================================三大特性封装继承多态封装 :隐藏对象的属性和实现类,仅对外公开接口.private 私有只能在本类内部访问public 公开在哪都可以访问数据隐藏属性私有,提供setXXX方法,和getXXX方法 (访问方法)方法可以私有只给对象自身使用的方法,应该私有方法公开声明公开实现隐藏实现的改变对架构的影响最小继承父类-子类一般-特殊父类: 把子类之间的共性抽象出来 (共性放在父类)extends可扩展性父类的什么属性和方法能继承给子类<==>子类能访问父类的什么属性和方法访问修饰符严-->宽private 私有,本类内部可以访问不能继承(default) 本类+同包可以访问同包子类可继承protected 本类+同包+不同包的子类能继承public 公开能继承构造方法不能继承!方法的覆盖 Override子类用特殊的方法实现替换掉父类继承给它的一般实现方法名,参数表,返回值类型都要相同对象的构造过程:1.分配空间属性被赋予默认值2.递归的构造父类对象3.初始化本类属性属性被赋予初始值4.调用本类某个构造方法常常被用来给属性赋值A<---B构造B对象 new B();1.分配空间 A,B空间2.初始化A属性3.调用A构造方法4.初始化B属性5.B() supersuper1.引用 super. 父类对象用来访问父类被遮盖的属性,或者调用父类被覆盖的方法2.构造方法中指定调用父类的哪个构造方法必须是构造方法的第一句话如果一个构造方法第一句话,不是this(...),也不是super(...),系统默认添加super();Java中的继承:单继承一个类只能有一个直接父类简单类之间会形成树状结构===========================================================多态运行时多态子类对象是特殊的父类对象,子类的对象可以看做是父类的对象!子类对象可以放入父类的引用!Animal a=new Dog();1.对象类型不变2.只能对引用,调用其引用类型中定义的方法3.运行时,根据对象实际类型,找子类覆盖之后的方法子类引用赋值给父类引用,可以直接赋值父类引用赋值给子类引用,需要强制转换(引用 instanceof 类名) 判断引用所指向的对象,和类名是否兼容用在强制类型转换之前,避免类型转换异常把不同的子类对象都当做父类对象看待,屏蔽了不同子类的差异多态用在方法参数上:method(A a): method方法允许用A的任何子类对象做实参多态用在方法返回值上A method(): method方法可能返回的是A的任何子类的对象引用类型?引用中的对象类型?根据引用类型,决定该引用能调用什么方法根据对象类型,决定实际调用哪个方法==========================================================修饰符访问修饰符不能修饰局部变量private 属性方法构造方法default 属性方法构造方法类protected 属性方法构造方法public 属性方法构造方法类static 静态的1.属性类变量全类公有类名访问类加载的时候初始化类加载: 当JVM第一次使用一个类的时候,它需要通过ClassPath找到这个类对应的class文件,将这个文件中包含的类的信息读入JVM并保存起来,这个过程叫类加载在类加载的过程中,会对类变量分配空间,并初始化2.方法静态方法类名直接访问静态方法中只能访问类的静态成员 this也不能访问静态方法只能子类的静态方法覆盖,而且没有多态!3.初始代码块静态初始代码块类加载的时候执行一次类加载:创建对象,访问类的静态成员会加载声明类的引用,不会加载加载子类,要先加载父类final1.变量常量一旦赋值,不能改变对于final属性,系统不再提供默认值final 实例变量:初始化属性,或者构造方法中赋值final 类变量:初始化属性,或者静态初始代码块中赋值2.方法不能被子类覆盖3.类不能被子类继承abstract 抽象的1.类抽象类可以声明引用,不能创建对象2.方法抽象方法: 只有定义,没有实现如果一个类中有抽象方法,这个类必须是抽象类抽象类中未必有抽象方法子类继承抽象类,如果子类不希望也成为抽象类,就必须实现父类中所有的抽象方法允许把方法的定义放在父类,把方法的实现留给子类语法: 多态的要求思想: 更好体现共性放在父类的特点abstract 不能和static,private,final 联用写一个类有什么用?1.声明引用2.创建对象3.调用静态方法 (访问静态属性)============================================================接口 = 特殊的抽象类1.所有的属性都是公开静态常量2.所有的方法都是公开抽象方法3.没有构造方法一个类实现接口,如果这个类不希望成为抽象类,就必须实现接口中所有方法接口之间可以多继承一个类在继承一个父类的同时,还可以实现多个接口interface A{}method(A a): method方法必须用A的某个实现类对象做实参A method(): method方法返回的是A的某个实现类的对象接口的作用1.多继承对事物的共性做再抽象,抽象出次要类型不会破坏类之间树状关系的简单性2.标准实现弱耦合性把标准的实现者,和标准的使用者分离抽象类 PK 接口接口: 没有构造方法全是抽象方法多继承抽象类: 有构造方法未必全是抽象方法单继承传统的开发: 先有标准的实现者,再有标准的使用者基于接口的开发: 标准的实现者和使用者分离,谁先谁后无所谓接口回调: 先有标准的使用者,后有标准的实现者============================================================ Object Java中所有类的父类,是类继承关系树的树根Object o; o引用中可以装任何对象Object类中的方法是所有Java对象都有的方法finalize():供GC(垃圾收集器)调用认定垃圾对象 (零引用)垃圾回收器什么时候回收垃圾? 内存即将耗光时垃圾回收器回收垃圾对象之前,最后调用垃圾对象的finalize方法一般不会覆盖finalize()方法toString() :String返回对象的字符串形式打印对象 == 打印对象的toString方法的返回值String1. 有字面值,字面值为形如"Hello World",用双引号括起来的字符串2. 有加法,字符串加法表示字符串的连接3. 字符串加上任何其他类型,结果都是字符串字符串字面值都放在字符串常量池中StringBuilderappend(XXXX xxxx){//1. xxxx追加到末尾// thisreturn this;}equals()public boolean equals(Object o)o1.equals(o2) : 判断o1和o2内容是否相同o1==o2 : 判断o1和o2地址是否相同判断两个引用是否指向同一对象==========================================================包装类8种基本类型 => 类对基本类型的封装为基本类型提供对象形式int <---> Integerchar <---> Characterboolean <---> Booleanbyte <---> Byteshort <---> Shortlong <---> Longfloat <---> Floatdouble <---> Double自动封箱: 5.0 由编译器自动完成基本类型和包装类对象之间的转换Object o=12; --> Object o=new Integer(12);Integer ii;int i=ii; --> int i=ii.intValue();ii++; --> ii=new Integer(ii.intValue()+1);id属性最好是Long,而不是long, 区分Id为0 和没有Id(id=null)===========================================================内部类成员内部类可以直接访问外部类的私有成员静态内部类只能访问外部类的静态成员局部内部类(写在方法里面) 作用范围:从定义开始,到定义它的代码块结束可以访问外部类的私有成员可以访问外部类的局部变量,但外部类的局部变量必须声明为final匿名内部类1. 特殊的局部内部类2. 实现某个接口,或者继承某个类3. 只会创建一次对象interface IA m1(); m2();//局部内部类的写法class Impl implements IA{public void m1(){}public void m2(){}}IAa=new Impl();//匿名内部类的写法IA a = new IA(){public void m1(){}public void m(){}};method(IA a){}method(new IA(){public void m1(){}public void m2(){}});注意:静态代码块抛出异常只能抛出ExceptionInInitializerError();======================================================================================================================================== ===============================================================********************************************************集合框架封装 -- 可重用性封装数组 --> MyList集合(容器) : 用来存储管理对象的对象1.接口的特点2.接口中的方法3.如何遍历4.接口的实现类Collection接口特点:元素是Object接口中的方法:add(Object o):把对象放入集合中addAll(Collection c):把集合c中所有的对象放入当前集合clear(): 清空集合contains(Object o):判断集合中是否存在对象oremove(Object o):从当前集合中删掉对象osize():返回集合中的元素个数遍历: 迭代List接口特点:元素有顺序,可以重复接口中的方法:add(int pos,Object o):把对象o添加到集合中的pos位置get(int pos):获得集合中指定位置的元素indexOf(Object o):获得对象o在集合中的下标 (不存在,则返回-1)remove(int pos):删除集合中指定位置的元素遍历:for: 下标遍历迭代遍历实现类:ArrayList 用数组实现查询快增删慢jdk1.2 轻量级线程不安全LinkedList 用链表实现查询慢增删快Vector: 用数组实现jdk1.0 重量级线程安全Set接口特点:元素无顺序,元素的内容不可以重复(唯一)接口的方法:add(Object o):把对象放入集合中addAll(Collection c):把集合c中所有的对象放入当前集合clear(): 清空集合contains(Object o):判断集合中是否存在对象oremove(Object o):从当前集合中删掉对象osize():返回集合中的元素个数遍历:迭代遍历实现类:HashSetHashSet如何保证元素内容不重复哈希算法对象放入HashSet,怎样保证没有重复对象?1.覆盖hashCode方法,保证相同对象返回相同的hash码2.覆盖equals方法,保证相同对象返回true3.为了提高HashSet的运行效率,应该尽量保证不同对象hash码不同SortedSet接口特点: Set的子接口,排序的Set实现类: TreeSetTreeSet 如何保证元素内容不重复排序规则s1,s2 ==> TreeSet pareTo(s2) == 0 s1 s2 只有一个能进来Map接口特点: 元素键值对 key--value 通过key,查找对应的valuekey: 唯一不重复 value: 可以重复接口中的方法:1.containsKey(Object key) : 判断key是否存在2.containsValue(Object value): 判断value是否存在3.Object get(Object key) :返回key对应的value4.put(Object key,Object value):把key-value键值对添加到Map中,如果key已经存在,新的value 会替换过去的值5.size(): 返回Map中键值对的个数6.remove(Object key):删除key所对应的键值对遍历:1.值遍历 values() 返回Map中所有的值对象 Collection2.键遍历 keySet() 返回Map中所有的键对象 Set参考 3.*键值对遍历 entrySet() 返回Map中所有的键值对 SetMap.Entry getKey() getValue()实现类:1.HashMap : 1.2 轻量级线程不安全允许null作为key或者value2.Hashtable :1.0 重量级线程安全不允许null作为key或者value3.Properties : Hashtable的子类key value 都是String 用作配置文件的处理4.TreeMap : SortedMap的实现类自动对key排序jdk5.0中的新集合范型==================================day15异常处理(异常处理注意是指:运行时异常,不同与编译错误)提高程序的容错性Throwable 所有异常类的父类子类Error 错误很严重并且无法避免,无法处理Exception 异常可以处理Exception 的子类RuntimeExcption子类未检查异常 UncheckedException 不严重的异常,可以避免的异常以避免为主,可处理可不处理非RuntimenExcption子类已检查异常 CheckedException 不可避免的异常不可避免,必须处理如果编译器发现,某代码可能发生已检查异常,则要求必须有处理代码,否则编译出错.throw 异常对象thow后面跟的对象叫抛出异常,把异常对象作为返回值返回,在此throw相当于return异常的产生:由程序恶的某个方法thow出来异常的传递:沿着方法throws方法覆盖时,子类覆盖方法不能比父类的被覆盖方法抛出更多的异常其中更多的异常是指:要么子类抛出的异常于父类抛出的异常相同,要么是父类抛出的异常的子类方法覆盖1 . 修饰符访问修饰符相同或更宽statatic静态方法只能被静态方法覆盖,并且没有多态2.返回值类型:相同3.方法名相同4.参数表相同(参数不同构成重载)5.不能比父类抛出更多的异常如果有多个catch语句,则捕获子类异常写在前面,捕获父类异常写在后面有多个语句,如果后面的语句以前面的语句为前提,则应该放到同一个try块中,否则应到放到不同的try块中===========================================================线程多线程编程进程:OS系统(操作系统)中运行的一个程序(任务)多进程(任务):利用CPU时间片技术宏观上并行,微观上串行CPU时间片:把CPU时间片分别分给不同的进程,并在多个进程中快速切换时间片的分配和调度由OS负责多线程线程:一个进程中并发的某个顺序执行的流程一个系统并发多个进程;一个进程并发多个线程=====================================================如何给线程代码1.继承Thread类,覆盖其run方法2.实现runnable接口,实现run方法如何创建线程创建了一个线程对象不同与OS系统中的线程线程是由底层的OS创建的,要创建新线程必须调用start方法,通过虚拟机让OS创建一个线程方法1. 创建对象(继承Thread类,覆盖其run方法),调用start方法例如,计算大于某一规定值的质数的线程可以写成:class PrimeThread extends Thread {long minPrime;PrimeThread(long minPrime) {this.minPrime = minPrime;}public void run() {// compute primes larger than minPrime. . .}}然后,调用start方法,创建并启动一个线程:PrimeThread p = new PrimeThread(143);p.start();方法2. 创建Runnable类型的目标对象(实现runnable接口,实现run方法),利用目标对象创建Thread对象,对Thread对象调用其start方法class PrimeRun implements Runnable {long minPrime;PrimeRun(long minPrime) {this.minPrime = minPrime;}public void run() {// compute primes larger than minPrime. . .}}然后,对Thread对象调用其start方法,创建并启动一个线程:PrimeRun p = new PrimeRun(143);new Thread(p).start();注意:1.当程序中所有线程都结束时,程序才能结束2.创建Thread对象并不等于创建新线程3.调用run方法没有创建新线程多线程数据:栈空间独立,堆空间共享每个线程都有各自对独立的局部变量,但是不同线程访问的是同一个堆空间,即对象可以被多个线程访问.栈:存局部变量堆:存对象每个线程都有各自独立的局部变量不同线程访问的是同一个堆空间,即对象可以被多个线程访问线程三要素:CPU:OS分配代码:覆盖或者继承run方法数据:栈空间独立,堆空间共享=================如何在线程之间共享数据:通过对象线程的状态转换线程的状态1.初始状态(创建对象)2.可运行状态(调用start)3.运行状态(被OS系统选中)4.阻塞状态5.终止状态6.锁池状态===========================线程的同步临界资源:多线程共同访问的对象多线程并发访问同一对象(临界资源),则有可能产生不一致的情况注意:局部变量不会有同步问题. synchronized1.修饰同步代码块synchronized(object){}其中object称为锁标记,java中任何对象有且仅有一个锁标记.当代码块执行结束时会释放锁标记.同步代码块锁的不是代码块是对象object如果一个线程要进入同步代码块,则必须要获得同步代码块相应对象的锁标记;如果一个线程获得了相应对象的锁标记,则其他线程不能访问任何对同一个对象加锁的对象加锁的同步代码块2.修饰方法同步方法synchronized锁的是当前对象,即:synchronized(this)当一个线程访问某个对象的同步方法时,其他线程不能访问该对象任何一个同步方法3.修饰静态方法synchronized锁的是类对象,即:synchronized(xx.class)=========================================IO(input,output)escape sequence:转义字符File类:代表了系统中的一个文件或文件夹File类的字符串参数:1. Windows路径用反斜杠时需要转义2. Windows路径可以使用斜杠1. File对象代表的文件或文件夹可以不存在2. 创建File对象并没有创建新文件注:eclipse中的当前目录指的是工程目录File类的常用构造方法三个构造方法创建文件:creatNewFile创建目录:mkdir,mkdirs删除文件/文件夹:delete(命令执行后立即删除),deleteOnExit(主程序运行结束后才才删除)判断:isFile,isDirector,exists获得路径名:getAbsolutePath,getPath,getName,getParent,getCanonicalPath文件夹操作:listFiles====================IO框架流:是一种专门用来传输数据的对象流的分类1. 按照方向分:输入流/输出流(输入/输出是针对JVM而言的)2. 按照数据单位分:字节流/字符流字节流能够读写所有类型的文件,字符流只能读写文本文件3. 按照功能分:节点流/过滤流节点流:真正完成底层数据传输的流过滤流:为其他流增强功能的流设计(面向对象的软件设计)模式:装饰模式(见图)----------------========================================================节点流FileInputStream 输入字节节点流构造方法:抛出FileNotException 当文件不存在时抛出这个异常close方法:释放资源,关闭文件流int read():每次从流中读入一个字节并把读入的值返回;当读到流末尾时,再读就返回-1. int read(byte[] bs)参数:读入的数据放入bs中返回值:调用read方法读入的字节数,如果已经读到流的末尾,再读就返回-1.--------------------FileOutputStream:输出字节节点流构造方法:1. 有可能抛异常FileNotFoundException 如果存在同名的文件夹则抛这个异常2. 如果文件不存在,则会创建该文件3. 如果文件已存在,则会覆盖该文件4. 如果构造方法带一个true作为参数,则文件存在的时候,以追加的方式写入close方法:同上void write(int ):写入一个字节void write(byte[] ):==========================IO中的异常处理作业从命令行上读入一个文件路径如果该文件存在,则在相同路径下,创建一个copy原文件名的文件该文件的内容为原文件内容的拷贝================================================过滤流DataOutputStream:输出字节过滤流构造函数:接收一个流作为参数(过滤流的特点)写过滤流编码的步骤:1. 创建节点流2. 封装过滤流3. 读/写数据4. 关闭外层流DataInputStream/DataOutputStream:输出字节过滤流读写八种基本类型和字符串,一般用来读写8种基本类型.BufferedInputStream/BufferedOutputStream缓冲区功能关闭时会清空缓冲区flush:清空缓冲区ObjectInputStream/ObjectOutputStream:输出字节过滤流功能1. 缓冲对象2. 读写八种基本类型3. 读写对象(写的是对象的属性以及相关的信息)读到文件末尾会抛出异常采用对象序列化的方式读写对象实现序列化的方法:实现Serialzable这个标记接口.对象要放在流上传输,必须实现Serializable接口Serizable是一个标记接口判断:实现Serizable的类中的对象都是可序列化对象(X)因为他的对象可能是transient修饰的,这样,编译运行也能通过transient修饰符只能与修饰属性,表示该属性不参与序列化-----------------------PrintStream 字节输出流节点/字符功能1. 缓冲2. 写8种基本对象,字符串3. 写对象(写的是toString方法返回值)==================================================字符流编码/解码/编码规范编码把符号转换成数字字符--编码-->数字解码把数字转换成字符数字--解码-->字符编码规范ASCII(美国标准信息传输码)ISO-8859-1(把所有西欧字符都放进去了)GB2312(国标2312,规定了常用字的编码)-->GBK(康熙字典里的字基本都有)BIG5(大五码,台湾用码)这么多编码方式,导致了乱码乱码:编解码方式不一致则会出现乱码.国际标准组织退出了一种国际统一的编码方式:Unicode:变种utf-8注意:所有的编码方式都兼容ASCII码.-------------------------字符流的顶层:Reader/Writer获得字符流的一种方式:FileReader/FileWriter:不能指定编码方式,采用系统默认的编码方式另外一种获得文件字符流的步骤:1. 创建字节流2. 利用InputStreamReader/OutputStreamWriter完成桥转换,可以指定编码方式,唯一一个可以指定编码方式的桥转换.3. 封装过滤流4. 读/写数据5. 关闭外层流字符流中的过滤流BufferedReader:缓冲区String readline();读入一行文本,当读到文件末尾时,返回null.(注意与空相区别,空字符则返回空)BufferedWriter:缓冲区PrintWriter:1. 缓冲区2. 写8种基本类型和字符串3. 写对象读写字符串用字符流,其他情况用字节流----------------------------随即读写文件:RandomAccessFile:用于随即读写文件Piped流:管道流,用于线程之间通信=============================================网络TCP编程Socket: IP地址端口号TCPServer写法1:1. 创建ServerSocket, 并指定端口号2. 等待客户端连接Socket accept()3. 利用socket对象的getInputStream/getOutStream进行IO操作4. 关闭socketTCPClient写法:1. 创建Socket对象并连接2. 利用socket对象的getInputStream/getOutStream进行IO操作3. 关闭socketTCPServer写法2:1. 创建ServerSocket, 并指定端口号while(true){2. 等待客户端连接3. IO操作4. 关闭socket}TCPServer写法3(多线程):1. 创建ServerSocket, 并指定端口号while(true){2. 等待客户端连接启动新线程(传递socket对象作为参数)}新线程的run方法{3. IO操作4. 关闭socket}-------------------UDP常用类DatagramSocket:UDP SocketDatagramPacket:UDP 数据包UDP发信1. 创建socket(连接)2. 创建packet,并给定目标地址3. socket.send(packet)...socket.close()UDP收信1. 创建socket2. 创建空packet3. socket.receive(packet)...socket.close()------------------------------URL编程:url : 统一资源定位符(网址, eg:http://172.16.0.64/aa.jpg)1. 创建URL对象2. openConnection() 返回URLConnection对象3. 对Connection对象调用getInputStream方法, 获得输入流4. IO操作5. 关闭IO流=================================================================================== 反射底层编程通用编程脆弱低效类对象 : 封装了类的信息类加载的产物获得类对象的引用:1. 类名.class (也包括 int.class)2. 类的对象.getClass()3. Class.forName("类名") 通过类名(全名)获得类对象,如果该类没有加载,就会先加载类对象 --> Field对象封装属性的信息类对象 --> Method对象封装方法的信息类对象 --> Constructor 封装构造方法信息getMethods() : 返回所有公开方法,包括父类的getDeclaredMethods() 返回本类的所有方法包括非公开的类对象 --> 类的对象方法对象 --> 对某个对象调用这个方法=====================================================Annotation普通注释: 描述代码的文字标注 : 描述代码的代码标记标注(没有属性) @标注名单值标注(一个属性) @标注名(属性名=属性值)多值标注(多个属性) @标注名(属性名=属性值,属性名=属性值 ...) 对于单值标注,如果属性名为value 则"value="可以省略。

JAVA笔记(根据马士兵的java视频整理)

JAVA笔记(根据马士兵的java视频整理)

JAVA视频教程尚学堂---手把手教程Call:86-主讲教师马士兵SCM系统--------Java+VC跨平台(电信宽带运营平台-------Java+WEB(J2EE)跨平台远程教学平台----Java+WEB(tomcat)VOD视频监控-----VCERP视频会议---------VC新闻发布系统-----Java+XML(模板)网上商城课堂内容、教学方法、学习方法、预备知识、教学资源JAVA基础贯穿数据结构的知识(时间复杂度、链表)---非常重要语法基础【变量、循环、分支】最核心的东西—原理--学好OO【面向对象是最重要的】有新东西学是好事----个人价值Exception 从Java Web开始,框架巨多无比Array【数组】基础类、常用类I/O StreamCollection/Generic【集合类】Thread【线程】TCP/UDP【网络底层】GUI【Graphic User Interface 图形化用户接口窗口】Meta Data【以后讲,与紧密相关】Regular Expression【正规表达式】JDK初步Java Web编程【主攻一个框架---讲原理,略讲其他框架】针对Web程序J2EE【一套标准,包含Java Web 、JDPC、JSP、SP、JB/开源框架—就分步式来说,目前(2005)无东西与之抗衡】(比较,,)企业级应用J2ME移动设备移动增值SP运营商3G,2.5G,要火爆起来【网络先铺起来,应用才能上来;3G的网络还没有铺开、火爆起来,讲3G的应用超前了】巨无霸式的教学理论举例理论回顾练习讲解【三片面包加两片肉】注重结合工程实践【完全结合】注重传授自学能力【自学的东西相当重要,授人以鱼,不如授人以渔;慢慢学会掌握一定基础后才有,灌输、背,融成血液里的一部分,心中无剑,手中有剑—前提—心中有剑手中也有剑;时间短,强度大,该背就背】个人能力分三个层次知识学习前人的知识---学习能力的一个表现,被动地接受—接受能力{自己学习了知识后考虑如何去应用,去---学习解决问题的方法【类似问题遇到过】灵活运用学到的知识【碰到什么问题采用什么方法】解决问题的思路【最高层次】创造解决问题的方法【思路掌握了,遇到新问题,自己拓展一条思路,解决问题,不可能一口吃成一个胖子,沿着这三个层次一点一点往上升首先打造自己学习知识的能力,先把该掌握的知识掌握了,再谈如何应用---如何教---教大家写项目每一个知识教太深—给项目留得时间特别短---不合适;自学一些东西,慢慢去培养解决问题的思路,试着朝这个方向去培养,工作后慢慢遇到新问题使劲去思考了积累起来逐渐会有这个能力,灵活一点、再灵活一点!基础知识要背—灵活应用的东西不能背,无一定之规,在实践中慢慢锻炼—实践的越多—敲的代码越多(掌握思路后自主敲代码,哪怕敲不出来再看别人的思路—收获远远不一样,学习要自主一点,多思考思路才能开阔—无捷径,努力锻炼自己的就业能力。

尚学堂马士兵java第4章异常处理笔记(精)

尚学堂马士兵java第4章异常处理笔记(精)

尚学堂马士兵java第4章异常处理笔记.txt精神失常的疯子不可怕,可怕的是精神正常的疯子!第四章异常处理java异常的概念:运行期出现的错误1、java异常是java提供的用于处理程序中错误的一种机制2、所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出、数组下表越界、所要读取的文件不存在)。

3、设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。

4、java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被提交给java运行时系统,这个过程称为抛出(throw)异常。

5、当java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。

异常的分类:Throwable:Error和ExceptionError:不能处理系统错误(如java虚拟机错误)Exception:可处理的异常Runtime Exception:一类特殊的异常,如被0除、数组下表炒范围等,其产生比较频繁,处理麻烦,如果显式的声明或捕获将对程序可读性和运行效率影响很大。

因此由系统自动检测并将它们交给缺省的异常处理程序(用户可不必对其处理)。

try语句:1、try{...}语句指定了一段代码,该段代码就是一次捕获并处理例外的范围2、在执行过程中,该段代码可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做相应的处理3、如果没有例外产生,所有的catch代码段都被略过不执行catch语句:1、在catch语句块中是对异常进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象2、在catch中声明的异常对象(catch(SomeException e))封装了异常事件发生的信息,在catch语句块中可以使用这个对象的一些方法获取这些信息3、例如:A、getMessage()方法,用来得到有关异常事件的信息B、printStackTrace()方法,用来跟踪异常事件发生时执行堆栈的内容finally语句:1、finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,承购对长须的状态做一个统一的管理2、无论try所指定的程序块中是否抛出例外,finally所指定的代码都要被执行3、通常在finally语句中可以进行资源的清除工作,如:A、关闭打开的文件B、删除临时文件C、。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java各组件缩写:
JDK包含JRE,JRE包含JVM
JDK: Java Development Kit
JRE: Java Runtime Environment JVM: Java Virtual Machine
JDK 7新增特性
下划线分割符
Eclipse快捷键
CTRL+左键:查看类的说明CTRL+T:查看父类
数据类型:
数值型
如果整形数值不能用Long来表示,就用BigInteger;如果不能用double来表示小数就用BigDecimal这个类来表示
十进制转成二进制的类Integer.toBinaryString
Ie.System.out.println(Integer.toBinaryString(a))
十进制转成八进制的类Integer.toOctalString
十进制转成十六进制的类Integer.toHexString
数值型常量默认是int类型
Ie.int a=10,10的默认类型是int
如果常量数据的大小没有超过byte,short,char的表述范围,则可以自动转型
浮点数常量默认类型是double
字符型
强制转型:在要转型的数值前加要转成的类型,并加括号,例:(char)99 字符串定义的时候,被定义的值要加双引号,例:String str=“abc”
Boolean类型
数据转换
容量指的是表述范围
变量,常量及命名规则
常量要使用大写;单词间用下划线间隔
运算符
算术运算符
逻辑运算符
异或:相同得0,不同得1
位运算符
扩展运算符
三目运算符
Instanceof:xx是xx的实例对象
控制语句
选择结构
单选择结构
双选择机构
多选择结构If-else if-else
Switch
Switch里的表达式返回值是int或自动转为int的类型,还有枚举型;JDK7支持表达式返回值是字符串
碰到break才会退出,如果没有break会发生case穿透的现象
循环结构While
Do-While
For
Break & Continue
方法
Return:结束方法的运行并返回值
设计方法的原则:方法的本意是功能块,实现某个功能的语句块的集合。

我们设计方法的时候,最好保持方法的原则性,就是一个方法只完成1个功能,这样利于我们后期的扩展。

递归结构
API和Package
Application Programming Interface
接收键盘输入—Scanner类
对象和类
实例变量系统会自动初始化,局部变量要初始化后才能使用,系统不会自动初始化局部变量。

内存分析
栈的特点:自动分配连续的空间,后进先出;放置成员变量
堆的特点:不连续;放置new出来的对象
方法区:属于堆的一部分;放置代码信息,static变量,常量池等
Java垃圾回收
构造器
作用:构造该类的对象,经常也用来初始化对象的属性
重载
Static关键字
在静态的方法里不能调用非静态的东西
This隐式参数
面向对象三大特征
继承
什么是继承
方法的重写
Super关键字
每个普通方法里都有2个隐式参数,一个是this,还有一个是super;this指向当前整个对象,super指向直接父类对象
继承VS组合
组合:继承里的父类通过新建对象的方式写在当前类里。

例:Animal animal=new Animal()
Final关键字
封装/隐藏什么是封装
访问控制符
多态
什么是多态
为了适应需求的多种变化,使代码变得更加通用
内存分析
抽象类
包含抽象方法(只有方法申明,没有方法体,例:public abstract void run();)的类抽象方法的意义在于将方法的设计和方法的实现分离了。

接口
比抽象类还要抽象的类
接口中只有常量和抽象方法
一个类可以实现多个接口
回调的实现
内部类
数组基本概念
例: int[] a=new int[3];
数组也是对象,数组元素相当于对象的成员变量。

语法
String StringBuild StringBuffer。

相关文档
最新文档