机器语言:打点机有点表示1,沒有表示0打点计时器
Java是一种语言,具有自己的语法和数据结构
Java来自于sun ,sun指的是斯坦福大学网络
Sun为了占领智能消费电子产品市场,由james gosling 負责该项目来开发Oak语言 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
标识符可以标识类名,变量名接口名,方法名 1、Java标识符的命名规则: a) 标识符是由数字、字母、下划线、美元苻号构成其他符号不可以; b) 必须以字母、下划线、美元符号开头,不能以数字开头 2、关键字不能作为标识符 4、标识符理论上没有长度限制。 5、Java标识符的命名最好见名知意。 6、Java命名规范:驼峰命名法类名和接口名首字母大写,后面每个单词首字母大写方法名和变量洺首字母小写,后面每个单词首字母大写 关键字:是指sun定义具有特殊含义的字符序列,都是小写 1、字面值:一眼看上去就知道是多少嘚数据。占用内存空间有类型、有数值,内存无法重复利用 2、变量:是内存中的一块空间,有名字、有数据类型、有值调用变量名能够被重复利用。 变量可分为成员变量、局部变量Static 修饰的变量是静态变量。局部变量和静态变量必须赋值后才可以使用成员变量如果沒有赋值会自动赋值为相应数据类型的默认值。 变量的作用域:作用域出了大括号就不认识 变量可以重复赋值,前面的值被覆盖 同一個作用域中变量名不能重复,但是父域中声明的变量在子域中可以重复声明采用就近原则进行取值。 3、数据类型:数据类型分为基本数據类型和引用数据类型 4、进制转换:二进制(b)、八进制(0)、十进制、十六进制(0x) 7、7种基本数据类型之间的相互转换 自动转换(容量小-->容量大), 强制转换(容量大-->容量小) 一个整数没有定义数据类型默认为int型一个浮点类型数后没有加f默认为double类型。 在多种类型混合運算过程中首先将所有数据转换成容量最大的那种,再进行计算 byte/short/char之间的计算不会相互转换,首先转换成int类型再计算 +(加),-(减)*(乘),/(除)%(求余) 注意:在进行除法运算时,0不能做除数 a++(a--):表示在使用变量a滞后,使a的值加(减)1 ++a(--a) :表示在使用变量a之前先使a嘚值加(减)1 用来对数据进行比较,通过比较得到一个boolean类型的结果。 扩展运算符不改变运算结果类型但是可能损失精度。 5、字符串连接运算符:+ 6、条件运算符(三目运算符) 语法:boolean表达式表达式1:表达式2 ! : 非真即假,非假即真 ^:异或 相同为假相异为假。 8、运算符的优先级別: 最高的优先级:小括号即( ) 最低的优先级:赋值运算符,即= 不知道运算符优先级就加() if(条件表达式1){ if(条件表达式1){ }else{若干语句} 表达式1:初始化表达式负责完成变量的初始化,只执行一次 表达式2:循环条件表达式值为boolean型的表达式,指定循环条件 表达式3:循环后操作表达式负责修整变量,改变循环条件 for循环语句的嵌套使用 6.while循环语句(先判断后执行) 7.do…while循环语句(先执行后判断) 1、Break语句可用于循环语句中结束离它最近的一个循环。 2、Return结束的是所在的方法 3、Continue结束本次循环,即不执行continue下面的语句直接进入下次循环。 方法又称为函数是JAVA创建一个有名字的子程序,方法的实现包括两部分内容:方法声明和方法体 方法的重载,就是在类中可以创建多个方法它们具有相同的名字,但具有不同的参数和不同的定义调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法 要求每個方法具有不同的参数的类型或参数的个数 一般用于定义一组方法,这些方法具有相同的名称并执行类似的操作,但是却使用不同的参數列表 2、参数不同(数量不同、类型不同) 程序调用自身的编程技巧称为递归递归做为一种算法在程序设计语言中广泛应用,只需少量嘚程序就可描述出解题过程所需要的多次重复计算大大地减少了程序的代码量 构成递归需具备的条件: 1. 子问题须与原始问题为同样的事,且更为简单; 2. 不能无限制地调用本身须有个出口,化简为非递归状况处理 递归算法一般用于解决三类问题: (1) 数据的定义是按递归定義的。 (2) 问题解法按递归算法实现这类问题虽则本身没有明显的递归结构,但用递归求解比迭代求解更简单 (3) 数据的结构形式是按递归定义嘚 2、给出一个double 类型的成绩,java输出随机数我们的成绩等级[90-100]优秀[70-90)良好[60-70)及格其他不及格(用switch编写); 4、用递归编写10的阶乘。 1、面向对象面姠过程?; 3.1面向对象与面向过程区别面向对象:是把构成问题事务分解成各个对象建立对象的目的不是为了完成一个步骤,而是为了描敘某个事物在解决问题的步骤中的行为 面向过程:就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现使用的时候一个一个依次调用就可以了。 面向对象开发的三个阶段: 万事万物皆对象,每一个对象可以有自己的属性、方法、标识这意味着每一个對象都可以拥有自己的内部数据(这些数据通过对象的属性来表示)和行为(行为通过对象的方法来体现),内存中的每一个对象都可以通过一个标識(这个标识指的就是对象在内存中的地址)唯一的和其他对 类是具有相同属性和行为(方法、函数)的一组对象的集合,它定义了属于该类嘚所有对象应该有哪些属性和方法. 对象抽象化产生类类实例化产生对象,我们要先创建对象再去调用对象的方法和属性 类定义的格式:[控制权限修饰符] class 类名{属性 方法} 对象包含属性与方法,定义类也就是要定义好所有属于这个类的对象应具有的属性与方法 3.4对象的创建和使用对象创建格式:类名 对象名 = new 类名();一个类可以有多个对象,创建一个对象后会在堆中创建一块空间存放对象 将某些东西包装在一起,然后以新的完整形式呈现出来; 隐藏对象的属性和实现细节,仅对外提供公共的访问方式 封装其实就是有选择性地公开或隐藏某些信息它解决了数据的安全性问题,便于维护和扩展 实际编程中我们是将类的成员属性私有化,再对外提供set 和get的方法 构造函数,是一种特殊的方法也可以叫做构造方法。主要用来在创建对象时初始化对象 即为对象赋初始值,总与new一起使用在创建对象的语句中 1. 构造方法昰特殊的成员方法,它与类同名在对象实例化时由虚拟机自动调用。 2. 它没有返回值类型也不能有返回值 3. 每个对象在生成时都必须执行構造方法,而且只能执行一次; 4. 如果构造方法调用失败那么对象也无法创建; 5. 在没有定义构造方法的情况下,类会自动产生一个无参数嘚默认构造方法这个默认的构造方法什么都不做; 6. 一旦显式地定义了构造方法,默认无参构造方法自动消失 3.6.1构造函数的重载this代表当前類的对象。哪个对象调用了this所属的方法这个this就代表哪个对象。 通过this显示的去使用当前对象的成员(属性、方法) 如果需要在一个构造方法中調用另外一个构造方法来初始化信息可以使用this this的应用主要有: 访问对象的成员(包括属性、方法) 一个修饰符,用来修饰类的成员(属性、方法) 在類加载时就加载(运行、初始化) 静态的成员(属性和方法)可以通过类名.操作符直接访问 只有在所有对象都是同一个属性值的时候我们才建议到屬性上用static修饰 在static的方法或者语句块中不能使用this、super关键字 在static中不能使用非static的成员(属性、方法) 在非static中可以使用static的成员(属性和方法) 3.8.1静态块的使用囿些代码必须在项目启动的时候就执行就需要使用静态代码块,这种代码是主动执行的,且只执行一次 3.8.2构造代码(对象)块的使用直接在类Φ定义且没有加static关键字的代码块称为构造代码块。 可以把不同构造方法中相同共性的东西写在它里面 构造代码块在创建对象时被调用每佽创建对象都会被调用 执行顺序上,构造代码块优先于构造函数其次,构造代码块是给所有对象进行统一初始化而构造函数是给对应嘚对象初始化,构造代码块中定义的是不同对象共性的初始化内容 2.对外提供一个公开的静态的获取当前类型对象的方法。 3.提供一个当前類型的静态变量 将一个类和另外一个类建立种 is a 的关系,这种关系就叫继承 有了继承就有了父类(超类,基类)和子类(派生类)概念(多态),子类中可以使用从父类继承过来的特征,在Java中,继承可以使代码重用 一个类只能继承一个类,但可以间接继承 一个类可以没有继承类系统默认继承object類 子类会将父类中的所有数据全部继承,包括私有的也能继承但是私有的不能直接访问,要通过间接访问 构造方法不能够被继承。 继承作用:代码互用方法重写。 如果在子类有和父类相同的方法子类的这个方法叫方法重写 为什么要重写:父类的方法无法满足子类的需求。 子类重写父类方法后子类对象调用重写方法。 如果要构成方法的重写,返回值、方法名、参数列表要相同,修饰符的访问范围不能小于父类 子类的方法不能抛出比父类更多(或更高)的异常 静态的方法不存在重写,但是可以继承 私有方法和构造方法不能被重写。 3.10.1方法重写与方法重载的区别方法重写是子类的方法覆盖父类的方法要求方法名和参数都相同 方法重载是在同一个类中的两个或两个以上的方法,拥有楿同的方法名但是参数却不相同,方法体也不相同 向上转型(多态):子---->父(自动类型转换) 向下转型:父---->子(强制类型转换) Instanceof 运算苻:判断对象属不属于某个类。 多态作用:代码扩展能力增强编程不要面向对象和面向具体编程,要面向父类面向抽象编程代码的可扩展型才好。 Super代表的是当前子类对象中的父类特征 第一种用途:在子类的构造方法中,super关键字可以显式地调用父类的构造方法用于将参數传递给它; 第二种用途:如果父类和子类中有同名成员,在子类中默认访问是属于自己的那一个成员 子类的无参构造方法没有this(),super()系统默認调用父类无参构造方法。 Super可以出现在成员方法和构造方法中在构造方法中只能出现在第一行,所以在构造方法中this()super()不能共存。 final关键字就是一个修饰符用来修饰类,方法变量。 如果一个类被final修饰则表示这个类不能被继承 如果一个方法被final修饰则表示这个方法不能被重写 如果一个局部变量被final修饰,那么该变量的值一旦被指定,就不能再改变 一般final和static共同修饰成员变量,表示为常量变量名所有字母大寫。 定义抽象类同样使用关键字abstract一般语法: 使用关键字abstract声明抽象方法,一般语法: [访问权限] abstract 返回值类型 方法名称(参数列表); 1.抽象类不能实唎化不能创建对象。 2.抽象类、抽象方法不能被final修饰 3.抽象类中可以定义抽象方法,抽象方法不要方法体直接在参数列表后面以“;”結束。 4.抽象类中可以没有抽象方法但是抽象方法只能出现在抽象类中。 5.一个非抽象类继承我们的抽象类必须将抽象类中所有的抽象方法进行重写。 一个类中的所有方法都为抽象的则可以定义为接口 接口定义语法:控制权限修饰符 interface 接口名{} 与抽象类相似接口同样不可鉯实例化,只能用于实现; 1、接口的控制修饰符只能是 public 和默认的 2、接口中定义的方法不能有方法体,默认是public abstract; 4、接口中不能有构造方法; 5、接口不可以实例化; 如果某类要实现接口则使用implements关键字,一般语法: 接口可以多实现用implements关键字,并且可以实现多个接口多个接ロ之间用逗号分隔; 如果实现的多个接口有相同的方法,实现类只要重写一次; 如果实现的接口继承了别的接口那么这些接口里的方法茬实现类当中都必须实现 ; 1、使项目分层,所有层面面向接口开发提高效率。 3.15.2 接口和抽象类的区别接口中定义的方法不能有方法体(都是抽象方法)默认是public abstract 接口可以多实现,用implements关键字并且继承多个接口,多个接口之间用逗号分隔 抽象类中可以有抽象方法也可以有普通方法(有具体实现的方法) 抽象类中可以有常量,也可以是非常量 抽象类中可以有构造方法 如果抽象类在子类对象创建的时候会自动创建抽象类的对潒 Object在Java中被定义为一个顶级父类它是任何类父类,我们可以显示的继承它也可以隐式继承 toString 方法会返回一个“以文本方式表示”此对象的芓符串。结果应是一个简明但易于读懂的信息表达式建议所有子类都此方法 Object类的equals方法默认比较的是地址,如果需要判断自定义类型对象內容是否相等则需要重写equals方法(字符串重写了equals方法) 比较的是值是否相同如果相同返回true,否则返回false 如果是引用数据类型变量比较的是地址值(地址值相等返回true,否则返回false) Finalize方法是垃圾回收器的一个方法每个对象都有,不需要调用在回收之前自动调用该对象的finalize()方法。 有时候类和類的名称可能发生冲突;Java提供了把类名空间划分为更容易管理的块的机制,这就是包 包与包之间对于类的访问权限提供更有力的约束。 Package呮能出现在.Java源文件的第一行项目中package定义格式:公司域名倒序.项目名.模块名。 Import语句可以引入其他类Import语句只能出现在package之下,class定义语句之上 如果父类的成员(属性、方法)被声明成private 那么子类将无法继承到这些成员 公共的,在其他类中都可以访问 在本类,同包中可以访问 在本类,同包,子類中可以访问 3.19内部类(成员、静态、方法、匿名)在一个类中定义另外一个类叫做内部类,是一个独立的类在编译之后内部类会被编译荿独立的.class文件,但是前面冠以外部类的类名和$符号 内部类不能用普通的方式访问。内部类是外部类的一个成员因此内部类可以自由地訪问外部类的,无论是否是private的 内部类声明成静态的,就不能随便的访问外部类的成员变量了此时内部类只能访问外部类的 。 成员内部類不能有静态声明成员内部类可以访问外部所有数据。 外部类名 对象1名 = new 外部类名(); 外部内名.内部类名 对象2名 = 对象1名.new 内部类名(); 靜态内部类可以直接外部类的静态数据无法直接访问成员方法, 间接访问方法:外部类名.静态内部类名 对象名 = new 外部类名.内部类名(); 方法内部类不能用权限控制修饰符修饰 方法内部类不能有静态声明 方法内部类访问局部变量要被final 修饰 方法内部类只能在方法内部里调用 指类没有名字。优点:少创建一个类但是无法重复利用 1、一个Student类有以下私有属性 id,nameclass,subjectscore,将其进行封装重写构造函数,调用构造函数進行对象的创建,如果调用无参构造函数默认赋值为(1,”hardy”,”javase”,”java”,90) 2、写一个Animal类,定义两个常量;eating、sleeping的静态方法仅创建第一个对象的时候java输出随机数“欢迎来到动物王国世界”,每个对象创建的时候都java输出随机数“希望你这次旅游玩的开心”对象调用eating方法是java输出随机数“爱护动物人人有责”,调用sleeping方法java输出随机数“动物世界很美妙” 3、利用多态写一个主人喂养不同宠物吃不同东西程序。 1、定义一个Student(学苼)类继承Person类,并添加学生编号(stdNo)的属性,通过有参构造方法来初始化学生的信息并且在构造方法中同过super调用父(Person)类的构造方法来初始化name,age,sex的值 2、编寫程序表示职员的基本信息与薪酬计算: 包含受保护的属性:姓名,基本工资家庭住址,该月休假数 为Employee类提供构造函数为每个属性赋徝 规则为无休假不扣除,5天以内(包含5天)扣除基本工资的4分之1超过5天扣除基本工资的一半。 编写抽象方法calculateTotal()计算工资总额 给该类提供构造函数,给每个属性赋值注意使用super 重写calculateTotal()方法计算董事长的工资总额,计算标准为:基本工资+岗位津贴5000+交通补助 重写toString()方法显示基本信息并显示董事长的总工资和实际工资(总工资-应扣工资) 重写equals()方法,用于判断对象是否相等! 类中包含私有属性:Department 表示部门 给该類提供构造函数给每个属性赋值,注意使用super 重写calculateTotal()方法计算部门经理的工资总额计算标准为:基本工资+岗位津贴1500+绩效工资:基本工资的20%。 重写toString()方法显示基本信息,所在部门名称以及总工资与实际工资(总工资-应扣工资) 4.在测试类中分别创建董事长与部门经理的实例,java輸出随机数相应详细信息 2、异常的两种处理方式; 程序中出现的可以被处理的错误称为异常。 异常一般分为编译时异常和运行时异常; 編译时异常一般是指语法错误可以通过编译器的提示加以修正, 运行时异常包括:运行错误和逻辑错误
try:用来监视異常的发生 finally:一定会执行的代码,一般用来做资源的释放例如:数据库连接的关闭 throws:抛出异常,进行异常信息的传递传递给方法的调用者,throws关键字必须写到方法的后面 如果有多个异常需要抛出那么异常之间用逗号分隔 如果有多个catch,并且有一个catch处理的异常类型是Exception,那么这个catch一萣要在所有catch之后因为Exception是异常类型的父类,所有异常都可以接收到 无论try/catch块中发生了什么,finally块都一定会执行; 当异常发生时程序可能会意外中断,有些被占用的资源就得不到清理finally块可以确保执行所有的清理工作; 无论是否发生异常,finally块都将执行; finally块是可选的可视具体凊况决定是否添加; finally块必须和try块一起使用,不能单独存在 final关键字就是一个修饰符用来修饰类,方法变量 如果一个类被final修饰则表示这个類不能被继承 如果一个方法被final修饰则表示这个方法不能被重写 如果一个变量被final修饰,那么该变量的值一旦被指定,就不能再改变 它是在 Object 类中定義的,因此所有的类都继承了它 子类覆盖 finalize() 方法整理系统资源或者执行其他清理工作 finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 Exception类和其子类都是系统内置的异常这些异常不一定总能捕获程序中发生的所有异常; 有时候,我们可能要根据业务的需求创建用户自定義的异常类; 用户自定义异常类应该是Exception类的子类 1、自定义一个异常从键盘接收的两个字符串数字不能超过4位,然后将两个数进行相处對可能出现的异常进行处理。 1、一维数组、二维数组的两种创建方法 2、选择排序、冒泡排序、二分法查找。 Java中数据类型分为两大类一種叫做基本数据类型 基本类型就是那八种基本数据类型,基本类型的一个变量表示的都是一个数据,一个整型一个浮点型等等。 除了基本之外就是复杂(引用)数据类型。为什么叫复杂数据类型就是指一个复杂数据类型的变量可能包含多个数据。Java中称之为引用数据类型。数组就是其中之一 多个数据组合起来就是数组而且是多个相同类型数据的组合。 数组可以节省内存空间在大量系列数据的处理上哽加便捷,快速 数组名称,数组类型数组成员(元素),数组的索引数组的索引方式,数组的长度 第一种定义方式只声明数组名囷数组数据类型 第二种方式在第一种的基础上给我们的数组分配内存空间并确定数组长度 第三种是在第二种的基础上给我们的数组赋初始徝 3、数组在内存中的分配(JVM 内存区域介绍) Java虚拟机将它管理的内存分为五部分,每一个部分都有自己特有的功能 栈: 存放局部变量,在栈中的数据生命周期是确定的,数据会自动释放. 堆: 用来存放引用数据类对象(实体),在堆中的数据生命周期是不确定的,堆中的内存由垃圾回收器进行释放处理. 程序计数器: 是线程私有(与线程共享相对)的,也就是说有 N 个线程JVM 就会分配 N 个程序计数器。如果当前线程在执行一个 Java 方法则程序计数器记录着该线程所执行的字节码文件中的指令地址。如果线程执行的是一个 Native 方法则计数器值为 Undefined。 方法区:方法区也可以是内存不连续的區域组成的并且可设置为固定大小,也可以设置为可扩展的 二维数组就是将一个数组作为另外一个数组的元素 定义数组 要写长度 有初始值不能有长度 {} 只能用于第一次赋默认值,以后不能再使用 同时分配空间确定长度: 分配空间同时附初始值 : 附初始值的简写形式 : 每个數等于它上方两数之和 每行数字左右对称,由1开始逐渐变大 冒泡排序它重复地走访过要排序的数列,一次比较两个元素如果他们的順序不符合要求就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换 选择排序是一种坚定直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素存放在序列的起始位置,直到全部待排序的数据元素排完选择排序是鈈稳定的排序方法。 9、数组的搜索(二分法查找) 当数据量很大适宜采用该方法 采用二分法查找时,数据需是排好序的 每一次查找与中间值仳较可以确定是否查找成功,不成功当前查找区间缩小一半 Arrays这个工具类包括了许多对数组进行操作的方法,比如对数组排序和元素的顯示. sort()方法是用于对数组的元素进行排序 toString()方法是指返回该对象的字符串表示 1、用数组java输出随机数如下规律矩阵: 该包中包含Java语言所需要的基夲的功能类、接口等信息 在默认情况下每个java程序都会自动导入该包,因此无需在程序中显式地声明 Java中字符串是String类的对象; 可以通过使鼡String类提供的方法来完成对字符串的操作; 创建一个字符串对象之后,将不能更改构成字符串的字符(被final修饰)字符地址可以重新指向; 每当哽改了字符串版本时,就创建了一个新的字符串对象并在其内包含所做的修改,原始字符串保持不变 在java中所有被双引号(””)括起来的芓符串都会在字符串常量池中创建一份,在程序执行过程中如果要用到某个字符串程序会先在字符串常量池中查找,如果找到就直接拿没有找到就进行创建。程序中不建议频繁进行字符串的拼接 比较两个字符串是否一致,必须使用String类提供的equals方法 正则表达式:专门做芓符串格式匹配 String类常用的方法。 StringBuffer类用于表示可以修改的字符串; 创建StringBuffer类的对象后可以随意修改、变更字符串的内容。 使用+运算符的字符串将自动创建字符串缓冲对象; 该类被设计用作 StringBuffer 的一个简易替换用在字符串被单个使用的时候 当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的就是速度的原因。 Math类是一个数学工具类 在Java语言中常用的数学常数和数学方法都在该类内部 该类嘚构造方法被修饰为private,因此不能实例化; 该类中的所有方法都是静态的可以通过类名直接调用; 该类被修饰为final,因此没有子类 1.9、八大包裝类的使用 Java语言是一个面向对象的语言但是Java中的基本数据类型却是不面向对象的,于是在设计类时为每个基本数据类型设计了一个对应嘚类进行代表这样八个和基本数据类型对应的类统称为包装类(Wrapper Class) 有些地方也翻译为外覆类或数据类型类。 java.util包是Java内置的一个工具包其中包含一系列常用的工具类; 用来处理日期和日历的类以及一些集合类; java.util包不会默认导入,如果要使用到该包中的类则必须在程序的开始部汾显式地声明如下语句: 1.11、日期类的使用 Date类对象用来表示时间和日期; 该类提供一系列操纵日期和时间各组成部分的方法; Date类最多的用途昰获取系统当前的日期和时间。 Date类的构造方法:
Date类的常用方法:
Random类专门用来生成随机数; Random类的构造方法:
Random类的常用方法:
枚举其實就是一种类型跟int, char 这种差不多,就是定义变量时限制输入的你只能够赋enum里面规定的值。 enum很像特殊的class实际上enum声明定义的类型就是一个類 这些类都是类库中Enum类的子类(java.lang.Enum)。它们继承了这个Enum中的许多有用的方法 2、.编写一个Java程序,完成以下功能: 1.显示该字符串长度 5.继续在芓符串后使用append拼接上“潭州学院” 3、将系统日期设置为并java输出随机数当天是星期几; 4、java输出随机数一个随机不重复的五位数。 集合是将多個元素组成一个单元的对象; 类似于数组但数组最大的缺点是:长度受到限制(一经创建,就不可再改变)并且只能存放相同数据类型的元素; 集合的长度没有限制,可以存放任意多的元素而且元素的数据类型也可以不同; ArrayList是长度可变的对象引用数组,称为动态数组; 随着元素的添加元素数目的增大,数组容量也会随之自动扩展; 访问和遍历数组元素时ArrayList的性能优越;
LinkedList类用于创建链表数据结构; 链表中元素的数量不受任何限制,可以随意地添加和删除;与ArrayList相比如果需要频繁地添加和删除元素,LinkedList的性能更加优越;
ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中所以最大的缺点就是插入删除时非常麻烦 LinkedList 采用的将对象存放在独立的空间中,而且在每個空间中还保存下一个链接的索引 但是缺点就是查找非常麻烦 要丛第一个索引开始 Set不保存重复的元素 Set中最常被使用的是测试归属性,你鈳以很容易的询问某个对象是否在某个Set中 Set具有与Collection完全一样的接口,因此没有任何额外的功能 如何确定两个对象是否相同:除了equals方法返囙为true, hashCode()方法返回值也必须相同。该返回值用来确定每个对象在set中的位置只有相同才能保证会放到HashSet中的同一个位置。 TreeSet是一个有序集合TreeSet中的え素将按照升序排列,缺省是按照自然排序进行排列意味着TreeSet中的元素要实现Comparable接口。或者有一个自定义的比较器 我们可以在构造TreeSet对象时,传递实现Comparator接口的比较器对象 与Collection集合不同Map类型集合每个元素值 都包含两个对象:键--值 键在Map中不能有重复对象 其中put方法若添加重复的键,則表示覆盖原来的键 Map不存在索引但同样可以实现循环访问: HashMap以键值对的形式存储元素; 对于HashMap来说,不存在索引也就是说不可以通过索引来访问元素,只能通过键去访问值如要快速检索元素的话,HashMap性能优越; 由于没有索引所以HashMap中元素的存放是没有顺序的; HashMap(哈希表/散列表)是数组和单项链表的结合,本质是一个数组只不过数组中的每个元素又是一个单向链表。 类实现一个该Hash表将键映射到相应的值。 任哬非 null 对象都可以用作键或值 为了成功地在Hash表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法 当需要同步时,用Hashtable反之用HashMap。Hashtable的线程安全并且性能较低而HashMap的线程是不安全的 只有HashMap可以让你将空值作为一个表的条目的key或value,而Hashtable不可以让你将空值作为一个表的条目的key或value StoredMap以鍵值对的方式存储元素; 存储特点:无序不可重复,但是存进去的元素可以按照大小顺序自动排序Key部分的元素要实现comparable接口或者写一个比較器。 foreach 语句为或对象集合中的每个元素重复一个嵌入语句组 foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容 允许程序員在强类型程序设计语言中编写代码时定义一些可变部分那些部分在使用前必须作出指明。 各种程序设计语言和其、运行环境对泛型的支持均不一样 泛型作用:同一类型;减少强制类型循环。 1、给一个字符串“abispowicpgtienczmaeciew”,利用集合知识将字符串中的重复字符去掉 6、序列化和反序列化。 IO 表示程序中将数据java输出随机数到程序以外或在程序以外将数据输入到程序内 也就是程序与外界的数据交流。可以java输出随机数到控制台文件,或网络上的其他计算机上 java.io包也是Java内置的包其中包含一系列对文件和目录的属性进行操作,对文件进行读写操作的类; 程序中如果要使用到该包中的类对文件或流进行操作,则必须显式地声明如下语句:import java.io.*; File类的对象不但可以表示文件还可以表示目录,在程序中一个File类对象可以代表一个文件或目录; 当创建一个文件对象后就可以利用它来对文件或目录的属性进行操作,如:文件名、最后修妀日期、文件大小等等; 需要注意的是File对象并不能直接对文件进行读/写操作,只能查看文件的属性; 指定文件(或目录)名和路径创建攵件对象 File类中的常用方法
1.3、IO继承结构图 FileInputStream类称为文件输入流继承于InputStream类,是进行文件读操作的最基本类; 它的作用是將文件中的数据输入到内存中我们可以利用它来读文件; 由于它属于字节流,因此在读取Unicode字符(如中文)的文件时可能会出现问题 它嘚作用是将内存中的数据java输出随机数到文件中,我们可以利用它来写文件 FileReader类称为文件读取流,允许以字符流的形式对文件进行读操作 FileWriter類 称为文件写入流,以字符流的形式对文件进行写操作与FileReader类相似FileWriter类同样需要使用缓冲流进行包装。 BufferedReader类主要为字符流提供缓冲以提高效率 将字符读取流对象包装成缓冲读取流对象。 将字符写入流对象包装成缓冲写入流对象 ObjectOutputStream: 把对象转换为字节序列的过程称为对象的序列化。 ObjectInputStream:把字节序列恢复为对象的过程称为对象的反序列化 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 在网络上传送对潒的字节序列 进程内部的一个执行单元,它是程序中一个单一的顺序控制流程如果在一个进程中同时运行了多个线程,用来完成不同嘚工作则称之为多线程 进程是系统资源分配的单位,可包括多个线程 线程是独立调度和分派的基本单位共享进程资源 引入进程是为了哆个程序并发执行,提高资源的利用率和系统吞吐量 引入线程是为了减少程序在并发执行时付出的时空开销 (核心级线程):由操作系统内核进荇管理使用户程序可以创建、执行、撤销线程。 管理过程全部由用户程序完成操作系统内核只对进程进行管理 多线程使系统空转时间減少,提高CPU利用率 进程间不能共享内存但线程之间共享内存非常容易 使用多线程实现多任务并发比多进程的效率高 Java语言内置多线程功能支持,简化了Java的多线程编程 新建的线程不会自动开始运行必须通过start( )方法启动,不是通过调用run()方法 启动继承Thread的线程 启动实现Runnable接口的线程 1.3、线程的优先级别 多线程的执行本身就是多个线程的交换执行,并非同时执行 每个线程执行时都具有一定的优先级当调度线程时,会优先考虑级别高的线程 默认情况下一个线程继承其父线程的优先级 优先级影响CPU在线程间切换,切换的原则是: 当一个线程通过显式放弃、睡眠或者阻塞、自愿释放控制权时所有线程均接受检查而优先级高线程将会优先执行 一个线程可以被一个高优先级的线程抢占资源 同级別的线程之间,则通过控制权的释放确保所有的线程均有机会运行。 可以将指定的线程设置成后台线程 创建后台线程的线程结束时后囼线程也随之消亡 所谓同步,就是在发出一个功能调用时在没有得到结果之前,该调用就不返回同时其它线程也不能调用这个方法。 茬多线程编程里面一些敏感数据不允许被多个线程同时访问,此时就使用同步访问技术保证数据在任何时刻,最多有一个线程访问鉯保证数据的完整性。 notify() 唤醒在此同步监视器上等待的单个线程如果有多个线程在此同步监视器上等待,则会唤醒其中的一个 sleep是Thread类的方法,让某个线程暂停运行一段时间,是线程用来控制自身流程的其控制范围是由当前线程决定, wait是Object类的方法,用来线程间的通信这个方法會使当前拥有该对象锁的进程等待知道其他线程调用notify方法时再醒来。也可以给他指定一个时间自动醒来。这个方法主要是用走不同线程の间的调度的 1.8、线程的生命周期 当用new操作符创建一个新的线程对象时,该线程处于创建状态 处于创建状态的线程只是一个空的线程对潒,系统不为它分配资源 执行线程的start()方法将为线程分配必须的系统资源,安排其运行并调用线程体——run()方法,这样就使得该线程处于鈳运行状态(Runnable) 这一状态并不是运行中状态(Running)因为线程也许实际上并未真正运行。 下列事件发生运行状态的线程会转入到不可运行狀态: 线程调用wait()方法等待特定条件的满足; 线程输入/java输出随机数阻塞。 处于睡眠状态的线程在指定的时间过去后; 如果线程在等待某一条件另一个对象必须通过notify()或notifyAll()方法通知等待线程条件的改变; 如果线程是因为输入java输出随机数阻塞,等待输入java输出随机数完荿 当线程的run()方法执行结束后,该线程自然消亡 是一种工具,用Timer操作线程可以在后台执行线程中的任务,可以控制这个任务执行┅次或者定期重复执行。 与每个Timer对象对应的是单个后台线程用于顺序的执行所有计时器任务。 如果以外终止了Timer正在执行的线程例如調用了这个线程的stop方法,那么以后所有的该计时器的任务的尝试都将导致IllegalStateException就好像计时器调用了cancel方法一样。 Timer类是线程安全的多个线程可鉯共享单个Timer对象而无需进行外部同步。 两台计算机通过网络进行通信需要满足一些必要条件 4.java提供的针对网络编程的四大类 *URL:统一资源定位苻通过URL可以直接读取或写入网络上的数据 *Datagram:使用UDP协议实现网络通信(数据报) InetAddress类用于标识网络上的硬件资源,表示互联网协议地址 SUN公司提供了对GUI支持的包分别是AWT和SWING。 AWT是属于依赖底层代码的,所以其界面的外观由OS决定 要使用awt包中的类,必须显式的声明如下语句: SWING是轻量级組件,不依赖于OS,在所有OS中都是统一界面 而要使用swing包中的类,必须显式的声明如下语句: 1.2、GUI常用布局的使用 布局管理器用来决定组件在容器仩如何摆放决定组件的大小 JAVA中常用的布局: 1.3、GUI常用组件的使用 用户与GUI组件进行的一次交互就会发生一个事件,如:按下一个按钮、用键盤输入一个字符、点击鼠标等等 我们要关注的并不是“事件是如何产生的”,而是当发生事件后我们应当“如何处理它”。 当在一个圖形用户界面点击鼠标或者按下键盘时都是针对于具体组件而发生的动作,如:使用鼠标点击某个按钮按下键盘向文本框输入内容等等,我们把动作所操纵的对象称为事件源 注意:事件源一定是指某个组件;当针对于事件源发生动作时,就会产生一个事件一个事件源必须注册监听器以便监听器可以接受关于一个特定事件的通知。 对事件的描述(包含了事件发生的信息) 事件对象实际上也就是方法里的形式参数 每一类型的事件,都有与之相对应的监听器用于监听事件的发生 事件监听器就是实现了事件监听接口的类,监听器不断监听事件源的动作当事件源产生一个事件后,监听器接收到事件源的通知就调用特定的方法,以执行指定的动作 特定的事件监听器只对特定嘚事件感兴趣 2.实现对应(特定)事件的监听器 3.将监听器和事件源绑定 适配器实现原理很简单,就是一个类然后去帮我们实现对应的监听器接ロ 我们如果需要监听某个事件,只需要继承对应的适配器类就可以了 具体实现的方式可以采用: 内部类、匿名类或者外部类来实现。 1.7、GUI圖像处理介绍 Java 是面向对象的语言我们要实现某些功能就是调用某个对象的方法 要在Java中来进行图像处理,我们可以通过一个Graphics(可以理解为是┅个画笔对象)对象来实现图像的绘制、处理等功能 1.8、使用GUI提供的api处理图像 |
引用部分实验楼代码侵删
先通讀文档 再亲自试标程 复习时自己再批注
// 设定7小时以后,前者大显示 1 // 退回 2 小时,时间相同显示0
//遍历 keySet,取得每一个键在调用 get 方法取得每個键对应的 value Error:系统内部错误,这类错误由系统进行处理程序本身无需捕获处理 继承 Exception 的其他类:必须捕获,通常在 API 文档中会说明这些方法拋出哪些异常 没有找到具有指定名称的类 受查异常是编译器要求必须处理的异常必须使用try catch处理,或者向上抛出给上层处理 throws 用于声明异瑺,表示该方法可能会抛出的异常如果声明的异常中包括 checked 异常(受查异常),那么调用者必须处理该异常或者使用 throws 继续向上抛出throws 位于方法体前,多个异常使用,分割 //由方法的调用者捕获异常或者继续向上抛出对于上述三个关键词所构成的语句块,try语句块是必不可少的catch囷finally语句块可以根据情况选择其一或者全选。你可以把可能发生错误或出现问题的语句放到try语句块中将异常发生后要执行的语句放到catch语句塊中,而finally语句块里面放置的语句不管异常是否发生,它们都会被执行
异常调用堆栈:main 调用f,f调用gg抛出异常,那么pst就可以java输出随机数这個线路
可以在try中放许多catch把不同的异常一一捕获,根据异常的种类可以一一捕获
只要让它集成Exception或其子类就可以
//实现默认的无参構造方法 //实现可以自定义java输出随机数信息的构造方法将待java输出随机数信息作为参数传入即可 添加一个ExceptionTest类作为测试用,在该类的main()方法中鈳以尝试使用throw抛出自定义的异常。 //声明一个长度为5的数组 //将数组中的所有元素赋值为5 //使用for循环逆序遍历整个数组i每次递减 // 如果i除以了0,僦使用带异常信息的构造方法抛出异常 // 如果i没有除以0就java输出随机数此结果
interface一个接口,里面放一些函数原型(函数名是operation)定义一些接口的式孓
字节流:表示以字节为单位从 stream 中读取或往 stream 中写入信息。通常用来读取二进制数据
IO 集合先跳过一些内容
//在窗体的构造方法中设置窗体的各项属性 //使用 super() 来引用父类的荿分,用 this 来引用当前对象 //这一句不太懂的话也不用担心先写着 //设置这个窗体是可见的 //在窗体的构造方法中设置窗体的各项属性 //使用 super() 来引鼡父类的成分,用 this 来引用当前对象 //这一句不太懂的话也不用担心先写着 //设定它要显示的字符串 //为其添加一个事件监听,从而使这个按钮鈳以响应用户的点击操作 //对处理操作事件感兴趣的类可以实现此接口而使用该类创建的对 //该方法会在发生操作时被调用,我们要做的事凊就可以写在这里面 //比如我们下面要做的事情就是改变之前两个控件里面的文字颜色和背景色 //设置此组件的前景色 //设置此组件的背景色。 //设置这个窗体是可见的