Java SE笔记(全).doc_第1页
Java SE笔记(全).doc_第2页
Java SE笔记(全).doc_第3页
Java SE笔记(全).doc_第4页
Java SE笔记(全).doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Day01 JDK的安装,MyEclipse的使用一、 jdk的安装a) 跟普通的软件安装过程一样。jdk-6-windows-i586,默认的路径在C:Program FilesJava,可以改变。b) 在记事本下去编写java程序,所有的java文件的扩展名都是*.java,类的文件名称每个单词的首字母必须大写。c) 如何定义类:public class HelloWorldd) 如果要在一个类中去体现效果出来,确切来说是要将java程序执行出来,那必须写上一个方法,主方法:public static void main(String args)e) Java文件要显示效果出来,那必须经历2个过程,1,编译过程,需要使用javac命令。2执行过程需要使用java命令。f) 当我们要去编译和执行java类的时候,需要使用javac和java命令。假如现在在任何一个地方写一个java文件。首先先找到java文件,进入某个盘符d:,要进去该文件的目录中 cd D:kende宝Java EEOracle培训Java_南医3day01,现在已经进来了该文件中的目录中,那么还需要使用javac命令和java命令去编译和执行java程序。g) Javac命令和java命令存在jdk中的bin目录中。为了在任何一个地方写的java文件,都可以随意的使用javac命令和java命令。那必须先将这2个命令所处在的路径配置在环境变量path中。h) Path环境:C:Program FilesJavajdk1.6.0bin,如果有多个路径,那么用;隔开。i) 编译java文件,javac HelloWorld.java,不区分大小写,当编译好了之后,会在当前目录下生成相对应的字节码文件*.classj) 执行java文件,执行*.class文件,用java HelloWorld,这个时候区分大小写。k) 执行的过程是先将已经编译好的字节码文件*.class交给jvm去执行处理,但是jvm首先应该先找到*.class的位置,然后要去调用jdk中的类库对象(lib目录),执行处理的时候,首先应该先将以上的2个路径配置好作为classpath的环境变量。l) Classpath:.; C:Program FilesJavajdk1.6.0lib二、 第一和HelloWorld程序常见的几个错误:a) 如果类的文件名称和带public修饰符的类名名称不同的话,会出现这样的错误,那就类名是公共的,应在名为*.java中去定义。b) 如果将主方法的public static void main(String args)中的public ,static ,void , main, String中的任何一个改变,都不是规定的主方法,但是执行的java文件的时候,必须要去规定的主方法中去执行处理,如果找不到,那么会显示找不到主方法的错误出来。c) 软件包或者是类名的每个单词的首字母必须大写,在类中不能无中生有,也就是除了类名,属性名称,方法名称可以自己定义之外,其他全部按照规范来写代码。d) 标点符号必须是在英文字符下的标点符号,否则会出现“非法字符“错误。e) 一个类文件中*.java中可以包含有多个类名,比如类A,类B.,但是只有一个类名是带public修饰符的,而且是跟类的文件名称是相同的。当编译的时候就会生成相对应的多个字节码文件,但要去执行的时候,那么只需要执行相对应的字节码文件即可。f) 在用命令编译程序的时候,注意看程序里是不是有包名,如果有包名则在进入路径的时候就不要尽在最底层,这是进到上一层(cd .)编译的时候java day01/Test三、 MyEclipse的使用:a) 新建工程:因为讲解的时候JavaSE,所以只需要新建java Project即可。b) 当工程新建好了之后,JavaSE_nayi3的时候,其下有2个目录,一个src(放源码的地方),一个是jre(MyEclipse自带的lib包)c) 在我们安装之前是否需要安装:i. 当建立的是的时候,不需要安装,因为本身中已经包含了包,所以我们通过这个工具来写的任何一行的代码中,如果有调用到了类库对象中的类,那么都去这个工具中集成的中去访问。ii. 当建立并且部署(装载)的的时候,因为的需要使用服务器(比如,),可以通过以上的任何一个服务器去装载的的项目。这些服务器都是通过来写的,所以你要能够正常使用以上的服务器,那必须首先服务器要去找到相关的的类库对象(中的或者是的目录)。iii. 当建立项目的时候也需要iv. 总结:除了建立的的时候不需要安装之外,那么建立其他的工程(,的等等)这些都需要先安装好。d) 在中去建立包名,包名全部的字母都小写。比如定义包名我们通常是这样来定义,比如com.chat.togogo,以后做javaEE的项目需要通过这样来命名包名,但是现在为了复习的方便,全部用day01,day02e) 通过HelloWorld引入一个简单的Student类。(基本上是没有注释),在包名中新建一个class类。f) 如何导入工程:当你们拿到我的工程,需要导入到Myeclipse中去,file-import-general-existing project into workspace-接下来连接工程的路径即可。练习总结:1.有返回值的自定义方法,在调用的时候必须是以打印的方式调用,不能直接调用,但是没有返回值的构造方法就可以直接调用。调用属性也是以打印的方式调用。四、 常见问题总结:为什么要配置环境变量path与classpath?a) 一个*.java的文件需要将效果执行出来,那必须要经历2个过程,编译和执行的2个过程。i. 编译的过程是由编译器编译的,需要用到javac命令去编译ii. 执行的过程是由jvm(java虚拟机)去执行处理的,需要用到java命令去执行处理。b) 以上2个命令(javac和java命令)存在哪里?存在jdk下的bin的目录,所以为了在任何一个路径下写的java程序,都能够运用上javac和java命令,必须将bin路径配置作为系统的环境变量pathc) b)中就已经阐述了为何需要配置pathd) 通过javac命令去编译通过之后,就会生成相对应的字节码文件,字节码文件要交给jvm去执行处理。i. 首先要让jvm去找到字节码文件,那是当前路径,用.来表示ii. 需要让jvm去找到类库对象,因为字节码文件中包含有jdk中的类库对象(存在lib目录中)。为了能够找到lib,所以需要先将lib的路径配置作为classpath环境变量。Day02 类的结构,引用与势力变量与常量的区别,控制流程语句一、 类的结构1、如何定义属性: 1)结构:访问权限 + 返回类型 + 属性的名称;a、访问权限:4个访问权限 public - protected -默认的访问权限-private public-在任何一个包下的类都可以访问。 protected-在同一个包下的类才能去访问或者在不同包下的子类可以去访问。 默认的访问权限-在同一个包下的类才能去访问。 private-在本类中才可以访问b、返回类型: 包含有2大类: 1)基本数据类型8大 整型的基本数据类型: 1个字节:byte(字节型) 2个字节:char(字符型),short(短整型) 4个字节:int(整型) 8个字节:long(长整型) 布尔类型: 1个字节:boolean(布尔类型) 浮点型: 4个字节:float(单精度浮点型) 8个字节:double(双精度浮点型) 2)引用类型(对象类型) 引用类型可以分为3类 i.自定的引用类型:比如自己定义Student2类ii. 类库类型:比如String类型,凡是在api中可以找得到的所有的类型都是类库类型。iii. 数组类型: iv. 枚举v. New出来的东西vi. 包装类(Byte Short Integer Long Character Boolean Float Double) 有方法的c、属性的名称如何命名: 成员变量:可以修改的变量,变量从第二个单词以后的每个单词的首字母开始大写,其他全部小写. studentScore变量声明后就可以使用了,但是,在不同的地方声明,它的作用范围是不一样 的,如果超出了她的使用范围就会出错在类中声明的变量称为成员变量,一般在类开始出声明,可在整个类中使用(在该类的一个大括号类)。在方法中声明的变量叫做局部变量,它的使用范围当然只能局限在该方法中。 常量:不能修改的,是被final,所有字母全部大写. d、属性是否一定要赋值: 可以赋值,也可以不赋值, 当不赋值的时候,系统会给它一个默认值,如果返回类型是基本数据类型 那么它的默认值可以有以下值:0,false,0.0,null2、构造方法2、如何定义构造方法:结构:public + 类名() 1)无参数的构造方法(将值写死了) 2)有参数的构造方法(没有将值写死,给调用的人去赋值) 无参数的构造方法和有参数的构造方法的最大区别那就是: 有参数的是没有将值写死,给调用的人去为它进行赋值 无参数的已经在构造方法将属性和引用类型的变量的值写死了 无参数的构造方法和有参数的构造方法都可以为一下的内容进行赋值: 1、为当前类的属性进行赋值 2、为引用类型的变量进行赋值。 但是通常来说要进行赋值都是写在有参数的构造方法中进行。当该类中没有写任何的构造方法的时候,系统也会默认的给一个无参数的构造方法。如果只写了有参数的构造方法,那么有参数的构造方法就会将无参数的构造方法覆盖掉了所以只要写了有参数的构造方法进来,那么按照习惯也将无参数的构造方法也写进来。3、自定义方法3、如何自定义方法:1)结构:访问权限 + 返回类型/void + 方法名称() 2)访问权限跟属性的访问权限是一样的。 3)如果有返回类型跟属性的返回类型一样了。但是方法可以没有返回类型,那就是void 有返回类型的时候,需要在方法体中return相关类型的值给它 没有返回类型的时候,在方法体中不需要出现任何的return。 4)方法的定义可以分为: 方法的声明:访问权限 + 返回类型/void + 方法名称() 方法的实现: 5)方法的命名规则跟属性的命名规则一样。 6)方法有参数列表,但有参数的时候,将参数写到(),当没有参数,那就空在那里。关键字不能做包名和类名4.程序的入口二、 java重要基础知识a) 阐述引用和实例,变量和引用变量的区别:b)局部变量(public void g()int i;)在使用之前必须初始化,但是属性(class int=I;)与形参(public void g(int i))就可以不用初始化 局部变量必须要赋值,而且在其他方法中不可以访问。三、 Java中的流程控制语句:a) 循环语句:i. For循环:在第一次迭代之前要进行初始化(initialization)。随后,它会进行条件测试,而且每次迭代结束时,进行某形式的”步进”(step)for(initialization;Boolean-expression;step) 注:里面可以为空statementii. While循环:在循环开始时,会计算一次布尔值,而在语句的下一次迭代开始前会再进算一次while(Boolean-expression)statementiii. Dowhile循环:先计算一次再循环,尽管刚开始是false 但是都会执行一次,其他的不会。dostatementwhile(Boolean-expression) b) 条件判断语句:i. If条件语句:if(Boolean-expression)statementii. Ifelse的嵌套: if(Boolean-expression)Statementelsestatementiii. Switchcase四、 练习:a) 写一个计算员工工资的类:i. 刚入职的基本工资(给定的,每个员工都不一样)ii. 总的工龄工资1. 工作时长:(n年,可以是1-n年)2. 第1年的工龄工资是给定的,当工作年龄1年以上的时候才有工龄工资,以后的每年的工龄工资都相当于上1年工龄高工资的1.5倍iii. 总工资 = (刚入职的基本工资 + n年来的总的工龄工资)iv. 实际拿到的工资待遇 = 总工资交完税和交完住房公积金之后剩余的部分。1. 当总工资待遇是在3500元以下(不包含)的时候,不需要交任何的税收,也不需要交任何的住房公积金2. 当总工资待遇是在6000元以下(不包含)的时候,需要交2%税收,也需要交3%住房公积金3. 当总工资待遇是在10000元以下(不包含)的时候,需要交3%税收,也需要交4%住房公积金4. 当总工资待遇是在10000元以上(包含)的时候,需要交4%税收,也需要交6%住房公积金Day03 访问控制符,异常一、 练习B=a+ :后置用法:是在使用变量之后,在对变量的值进行加1 如a=5 那么 B=5,a=6B=+a 前置用法:是在使用变量之前,先使变量的值加1二键盘输入方法:Scanner a=new Scanner(System.in);三不同访问修饰符1)在同一个包中只有私有的不能被另一个类访问,也只有私有的不能被继承。2)在不同包没有任何关系的两个类,只有public类的public成员才可以被另外一个包中的类访问。3)在不同包中有继承关系的两个类,只有public类的public成员和protected成员可以被另外一个包中的子类在内部使用,但是在子类的外部,通过子类对象名只能访问父类的public成员。四常用操作程序:1)键盘输入:public static BufferedReader getKey() return new BufferedReader(new InputStreamReader(System.in);2)自定义类异常: public class UserExistException extends RuntimeExceptionpublic UserExistException()this(用户已经存在!);public UserExistException(String msg)super(msg);public class Test public static void test()/调用自定义的异常类UserExistException exception = new UserExistException();/主动方法抛出throw exception;public static void main(String args) test();Day04 数组,封装一、 数组:a) 概念:之前讲的其他的数据类型(基本数据类型和自定义的引用类型,类库类型的引用类型)都是只能保存一个数据。但是现在的数组是可以保存多个同种类型的数据(比如可以保存多个int类类型的数据)。b) 如何创建数组(2种方式):i. 比如创建String类型的数组,String values = null;ii. String values = null;c) 如何定义数组(2种方式):i. String values = new String5;-指明了数组中的空间大小是5个。但是里面的所有元素的值都是默认值nullii. String values = “kende”, “Jason”, “togogo”;-不但指明了数组的空间大小,而且已经明确的指明了数组中每个元素的值。d) 从现在开始要学会查看帮助文档(api文档)e) 当需要导入类的包的时候,可以点击左边红色的灯泡,当然也可以使用快捷方式ctrl + shift + of) 遍历数组:for循环进行查询g) 数组的排序:通过Arrays类中的sort方法,将所需要排序的数组放到sort方法的参数中去,就可以将这个数组进行升序的排序。h) 数组的拷贝:也就是数组中元素值的修改功能。System.arraycopy(5个参数);i. 思路:定义2个数组,我们从其中的一个数组A中的某几个元素拷贝到另外一个数组B中去,达到改变另外一个数组B元素值的目的。i) 数组总结:i. 当定义了一个数组的时候,数组中的空间大小是确定的。比如是5个空间大小,那就永远都是5个空间,不能减小或者增大的空间。也就是说数组一旦定义了,是不能够进行删除和添加的功能。ii. 数组可以进行查询元素,和修改元素的功能。iii. 所以根据不能删除和添加元素的缺陷,那么后面也会学到一个叫集合的对象可以代替数组的功能,而且有添加和删除元素的功能。iv.j) 如何定义二维数组和遍历二维数组:i. 比如定义一个二维的int类型的数组int lengthList =1,2,3,10,20,30,40;ii. 二维数组其实里面的每个元素同时又是一个一维数组。iii. 遍历二维数组的思路:1. 遍历二维数组,得到一维数组2. 遍历一维数组,得到具体元素的值。二、面向对象的特性:1、封装1)概念:是把一段通用性很强的代码封装起来(或者说包装起来),称为*.jar,只能去调用,但是不能修改源代码。2)目的:是为了隐藏具体的技术细节,因为这个封装起来的代码含金量非常高,不希望其他无关的人员去查看源代码。最终来说来说为了程序员的开发效率。3)框架的团队或者是中间件的团队去完成封装的这样的工作。这样的团队中的每个成员必须是具有非常丰富的项目开发经验的人才能去写。4)封装的具体的几种形式:A中间件或者是框架:中间件指的是公司里的小型的框架,只是适用于这个公司的小型的框架;框架是适用于整个行业中的,是每个开发人员或者是每个公司都适用的框架。B javaBean或者实体类:它是做JavaEE的项目的时候需要使用到,或者说只要跟数据表进行打交道的都需要定义相对应的实体类对象。它是跟数据表进行对应的,比如我现在需要做一个用户模块,对应一张用户表user_list(user_id, user_account, user_password),这个时候有一个相对应的实体类对象User(userId, userAccount,userPassword).,并且将所有的属性进行私有化,希望不要直接去修改或者访问属性的值,而是提供属性的set方法和get方法进行访问。set方法指的是设置属性的值,get方法是获取属性的值。实体类对象到底用在哪里?通过JavaBean实体类对象的图去阐述。C接口中的封装的属性和方法。(第4个特性去讲)Day05 继承 多态 抽象类2、继承1)概念:如果一个类A继承了类C,那么类A就可以去获取类C中可以(如果访问权限是私有的那么就不能访问)获取的属性和方法。关键字extends 例如:c extends a除了private的不能访问 其他的可以访问。如果没有extends的字样,那么默认为是java.lang中的obiect子类。2)优点:是为了节省代码量。3)举个例子来说明继承的概念:比如写一个父类Father,一个子类Son,Son去继承Father4)虽然子类可以去获取父类可以获取的属性和方法,但是如果子类中相关的方法跟父类中的相关方法的实现部分不一样,那就不能继承。而必须将父类中的那个方法重新的改写一遍,这个概念成为重写或者改写或者覆盖。5)重写方法的调用:采取的是最近原则,如果再当前类中可以找到该方法,那么就执行当前类方法中的内容(重写)否则就执行父类中方法的内容(继承)6)为何需要重写:是因为子类中相关方法的实现部分跟父类中的相关方法的实现部分不一样,所以不能继承,只能将方法重写写一遍(重写的概念)7)重写的条件:是需要将父类中方法的声明部分完全一样的搬下来,但是访问权限可以稍微修改一下(那就是可以扩大和相等,但是不能缩小访问权限)3、多态1)概念:它是在继承的概念基础上去延伸的另外一个概念(与属性没关系的,多态体现的是父类的方法),具体来说是一种父类的类型,可以出现多个不同的子类的类型(或者是形态)。(同样的代码,实现不同的功能如。class A extends B; . A aa=new A; B bb=new B; aa.f();bb.f(); aa=bb; aa.f();)最后aa.f()就是多态。2)多态的表示形式:A)父类的引用指向子类的实例B)接口的引用指向实现类的实例3)多态首先是基于继承的基础上:如果子类满足父类的要求,那就将父类的方法继承下来(在子类不需要写相关的方法);如果子类中不满足父类的要求,那就将父类的方法重写下一遍(在子类需要写相关的方法,而且需要将实现部分改掉),这种也就是重写。3)举一个例子。4、抽象类和接口(接口文件与调用的文件必须要放在不同的包里)1)抽象类:A)概念:当一个类中有一个以上的方法只有声明部分,没有实现部分(即是抽象方法),那么该类就称为是抽象的类,这个类需要在class的前面加上abstract。B)抽象方法:只有声明部分,没有实现部分(大括号里面没有内容)。需要在方法的返回类型/void的前面加上abstract。C)举一个例子:通过举这样一个例子充分说明抽象类的特性。D)抽象类在哪里用?由谁定义的。是开发组临时为了移交认为给另外一个人去做,是由程序员自己定义的。但是这个人完成不了事情,所以需要将没有完成事情的这个类变成是抽象的类,那么另外一个直接去继承这个抽象类即可。 E)不能new出对象,但是可以定义一个指向抽象类的引用,而且可以利用这个抽象类的引用指向它真正的实现的子类对象,利用多态调用它子类的方法。Day06 接口2)接口:A)概念:硬件中有相关的接口。同样软件中也有接口。是用来指定规范和标准。是不可以修改的。比如像中国的法律规范也好比是一套规范,不能随便乱改的。B)接口中的特性:它是一个特殊的抽象类。里面的所有的方法都是抽象的(属性或者抽象方法public void f(),不能有非抽象方法如:public void f();),默认接口中的方法是被public abstract.;里面所有的属性都是常量,默认是被public static final C):如果一个类只实现一个接口的部分方法,则该类必须声明为抽象类 D)一个类可以在继承一个父类的同时实现一个或者多个接口,但是extends关键字必须放在impements关键字前面。如:class A extends B implements It1,It3 E)不可以new接口对象,但是可以定义一个接口引用类型的变量并将其指向实现接口的对象,达到多态的目的。c)接口到底用在哪里,是由谁定义的?接口是一套标准和规范,所以在开发组开发项目之前需要由系统架构师去架构整个系统中的代码详细设计(需要将接口中的属性和方法全部定义好),之后需要将这些接口进行打包(生成*.jar的形式).接下来生成api文档。然后给到开发组中去按照这套接口的标准去开发项目了。d)接口如何定义:通常情况下整个项目是按照模块来进行分工的。必须每个模块定义一个相对应的接口。比如现在需要去定义系统中的用户模块中的接口(I + 类名),用户模块中的业务的接口 IUserService。E)接口定义好之后需要进行打包,给到开发组去调用了。去写一个相关的类去实现这个接口。F)接口的打包:(接口必须是新建Interface文件) 右键Export-java-JAR filenext-选择相应的文件G)接口文档的生成接口文档的生成:右键点击包ExportjavaJavadocconfigure(找到jdk文件下的lib,然后找到javadoc.exe)finash.H)如何导入*.jar包。复制jar包 pase到目录(为了防止文件很乱 可以先新建一个文件lib放在下面)。右键PropertiosJava Build pathlibrariesAdd jars选择相应src下lib文件。如果导入成功,到最下面Referenced Libraries查看Day07 object,String ,this, super,final,static一、 Object类:a) Object类是类层次结构中根类,所有的类(类库类型的类,自定义的类,数组类型)都去继承Object,所以这些所有的类即便是没有写任何的属性和方法,都可以去调用一些属性和方法,这些属性和方法就是从Object类继承下来。b) Object类中的equals方法指的是比较2个Object类中的引用所指向的对象(引用或者地址)是否相等。c) Object类中的toString方法:表示的是Object类引用所指向地址值(16进制的字符串),这个字符串是不简明不容易读懂的字符串,通常情况,建议所有的子类都需要重写toString,变成简明或者易于读懂的信息。d) 数据类型的转换问题:i. 基本数据类型之间的转化:1. 向下转型(由大-小的类型),比如由long类型-int类型。2. 向上转型(由小-)大的类型),比如有int类型-long类型。ii. 引用类型的之间的转化e) 调试的技巧:i. 通过debug as进行调试,将调试的窗口和variable窗口显示出来,就可以看到上一行代码中的参数或者变量的值到底如何变化的。ii. 当光标需要跳到下一行代码,那就step overiii. 当光标需要跳入到当前代码中的某个方法中去调试,那就step into二、 String类:a) String类中的toString方法:从父类Object类中改写下来的方法,意思是栈中保存的具体的内容。b) String类中的equals方法:比较的2个引用所指向的栈的内容是否相等。跟在Test2类中改写的equals方法一样。c) String类中的内存机制:i. 定义String类型的引用可以通过2种方式1. 直接赋值比如String str = “kende”;2. 调用构造方法String str = new String(“kende”):ii. 以上定义的2种方式到底有何区别,通过画图来解释String类中的内存机制问题。iii. 通过内存机制,我们需要做这2件事情:1. 比较2个String类型的引用的地址值是否相等(堆的地址空间是否相等),通过=进行比较。总结:如果2个引用都是通过直接赋值的方式去创建引用,而且栈的内容也相等,那么比较地址就为true的结果。其他情况的比较结果都为false2. 比较2个String类型的引用所指向的栈的值是否相等(对象池的内容是否相等),通过equals方法进行比较一、 this和super,final statica) thisi. 可以表示当前类的引用ii. 可以调用当前类的属性:属性与形参名一样就加this 如:=nameiii. 可以调用当前类的构造方法:表示现在正在创建的对象iv. 可以调用当前类的方法:实际上每个非static方法中都隐含这一this指针。指向当前正在调用的方法的对象。比如说new 了两个相同的方法,那么this。方法就代表调用该方法 如:构造方法是class A;show(); A aa=newA; A aa1=new A aa.shou()v.vi. 表示“非静态”的意思,不能放在静态的方法比如主方法中去调用(类的加载的时候去讲)b) superi. 可以表示调用父类的属性ii. 可以表示调用父类的构造方法:必须放在构造方法下面的第一行,不能放在普通方法下面;可以写super(i) 调用有参的,前提是前面必须要有有参的构造方法。也可以写super()调用无参的,前提是前面必须有无参的构造方法,否则报错;一个构造函数中不能写多个super(参数列数)语句;调用父类的构造方法的语句必须借助于super,不能直接写父类的类名。iii. 可以表示调用父类的方法iv. 表示“非静态”的意思,不能放在静态的方法比如主方法中去调用(类的加载的时候去讲)c) Finali. 可以修饰类:代表这个类没有子孙ii. 可以修饰属性:代表这个属性是一个常量。也可以固定值iii. 可以修饰方法:代表这个方法不能被子类重写。d) Statici. 在属性前面加static 表示这个类下的属性是n个对象共用一个属性如i。如public static int i=9ii. Static属性i是属于类本身,或者讲:没有对象,我们任然可以通过类名的方式访问类部static属性。如:class A public static int i=10public ststic void main(String args)System.out.println(A.i) 也可以直接调用构造方法如构造方法是public static void f() 那么后面就是A.f()iii. Static只能修饰普通方法不能修饰构造方法.如不能这样写:public static A()iv. Static属性和方法虽然属于类本身,虽然可以通过类名的方式访问但是static属性和方法很明显也属于类对象,当然也可以通过类对象名的访问v. 注意:非private的static成员才可以通过类名的方式访问vi. 非静态方法可以访问静态成员,静态方法不能访问非静态成员(因为静态的时候可能还没对象,而非静态有对象所以不能访问)vii. Static可以修饰类名,但是必须是内部类viii. 当用引用去调用的时候当通用性很强的代码,这个类中的其他地方都要去调用这个到吗,那么这个代码可以放在静态代码块,非静态代码块,构造方法,为了各司其职尽量放在静态代码块中区ix. 当用类名的方法去调用时候把通用性强的代码放在静态代码块x.Day08 类的加载 优先级 删除添加文件一、 类的加载:a) 静态和非静态,表面上看静态的是加了static,非静态是没有加staticb) 静态和非静态,本质上:i. 静态代表是类的级别ii. 非静态代表是对象级别iii. 类的级别:1. 类2. 加了static来修饰的属性,方法,静态的代码块3. 如果是在父子关系的类中,也把父类当成是类的级别iv. 对象的级别:1. 没有加static修饰的属性,自定义方法,非静态的代码块,构造方法2. 如果是在父子关系的类中,也把子类当成是对象的级别v. 优先级:1. 类的优先级高于对象级别:因为类是先产生的,只有当类产生之后才能产生对象级别。2. 父类的优先级高于子类。所以通过父子关系的类去里理解,类的级别都不去调用对象级别。3. 非静态代码块的优先级高于构造方法vi. 写一个类,该类中包含有静态的代码块,非静态的代码块,构造方法,静态的自定义的方法。调用该静态的方法的时候,可以通过2种方式去调用1. 通过引用去调用(不推荐)2. 通过类名去调用(推荐的方式)vii. 总结:1. 凡是类的级别都不能直接去访问对象级别的,如果要去访问,那必须通过引用去调用。2. 即便是主方法中没有写任何一行的代码,如果该类中已经包含了静态的代码块,也会加载。new的方法会去加载非静态代码块及非静态构造方法的内容。new的构造方法不去加载自定义的方法,除非去引用。(如day08例题中System.out.println(new SubManager().age))3. 当该类中包含了这么3块内容,也就是静态的代码块,非静态的代码块,构造方法。如果当调用构造方法的时候,是如何加载的。先加载静态代码块,然后加载非静态代码块,最后才加载构造方法4. 当该类中包含非静态代码块和构造方法。如果当调用构造方法的时候,是先加载非静态代码块,然后再加载构造方法5. 在一次执行过程中,静态的代码块是最先加载,而且只加载一次。对象级别的就是调用了几次,就加载几次。6. 当有父子关系的类的时候,在子类中用引用的方法去调用子类的构造方法的时候,加载的顺序是如何的呢?最先加载父类和子类的类的级别的静态代码块,其次加载父类的对象级别(非静态代码块,构造方法),最后加载子类的对象级别(非静态代码块,构造方法)7. 当有父子关系的类的时候,在子类中用类名的方法去调用子类的构造方法的时候,加载的顺序是如何的呢?最先加载父类和子类的类的级别的静态代码块,其次加载类名调用的自定义方法viii. 类的加载的好处:1. 为了考证2. 为了程序的效率更加高:在多个自定义的方法都需要去写相同的代码的时候,这个时候可以将相同的这段代码块写在静态的代码块,非静态的代码块或者构造方法中去。到底放在哪个地方要根据优先级来看。ix. 写另外一个类SuperManager,作为以上写的那个SubManager类中的一个父类。该类中包含有静态的代码块,非静态的代码块,构造方法,静态的自定义的方法。在子类中去调用子类中的静态的方法,可以通过2种方式去调用通过引用去调用(不推荐)如:SubManager sub = new SubManager();sub.testSub();1. 通过类名去调用(推荐的方式)因为这种方式是类级别,优先级高于对象级别,所以不会加载对象级别的(非静态的代码块和构造方法)如testSub()一、 文件对象:a) File对象能够对路径(目录或者文件夹)进行操作i. 创建一级的文件夹mkdirii. 创建多级的文件夹mkdirsiii. 删除文件夹:1. 从最后一级的文件夹开始删除2. 只能删除存在而且空的文件夹(里面没有东西的文件夹)iv. 通过File对象去获取绑定路径(存在与否都没关系)的全路径的名称,父路径的名称,当前文件夹的名称。b) File对象能够对文件(后缀名)进行操作i. 创建新的文件(必须是不存在,否则创建失败)createNewFileii. 通过File对象去获取绑定路径(存在与否都没关系)的全路径的名称,父路径的名称,当前文件的名称。c) 遍历一个目录下(各级目录)的所有的文件和文件夹i. 思路:想办法将每一级目录中的所有的文件和文件夹都需要装在一个数组中。必须通过File对象下的一个方法(返回类型是数组类型即可)d) 删除一个目录下(各级目录)的所有的文件和文件夹i. 思路:将最后一级的文件先删除,然后再删除上一级目录的空的文件夹。e) 删除一个目下的指定的格式的文件(比如ppt,txt,doc这三种格式的文件)。if(newFile.getName().endsWith(.ppt)|newFile.getName().endsWith(.txt)|newFile.getName().endsWith(.doc)Day09集合 List Set Mapadd(E e ) E:表示所以引用对象一、 集合和数组的区别:数组的空间大写一旦确定了,就不可以改变了。添加元素和删除元素都会受到障碍,但是集合可以在数组的基础上改良了。可以进行增删改查的操作,而且速度更快.二、 集合a) Collection是一个集合接口(接口),它的超级接口Iterable;Collections是一个工具类(类)b) 常见的集合的子接口有List,Set, Map(map不是Collection下的子接口,是一个键值对的,也就是包含有2个参数的元素(key和value)c) List接口常见的实现类有ArrayList,LinkedList,Vectori. ArrayList的操作1. 增,add2. 删除,remove3. 修改,set 4. 查询a) 下标查询(for循环)b) 迭代查询(首先需要通过集合去获取迭代器对象(接口),其下面有相关的方法可以将集合中的元素遍历出来)5. 总结:a) 查询元素的方式有2种,查询的顺序都是按照插入元素的顺序查询出来。b) List集合中的实现类都是没有排重功能,也就是元素可以重复。c) ArrayList和LinkedList是线程不安全的(不同步的,没有加synchronized关键字),相等于多线程,速度快。Vector是线程安全的(同步的,加了synchronized),相当于单线程,速度慢ii. LinkedList1. 是链表的集合,实现的原理是跟栈的实现原理是一样的(后进先出)2. 跟栈(Stack)的原理是一样的。iii. Vector和LinkedList实现的机制都是Stack的方式。后进先出的原理。d) Set接口中常见的实现类i. HashSet:1. 查询元素只有迭代查询,没有下标查询2. 迭代出来元素的顺序不能保证它的迭代顺序,特别是不能保证该顺序恒久不变。3. 添加元素可以添加任意的引用类型进来。4. 允许null元素添加进来。5. 具备排重功能,能够将相同的元素排重了(相同的元素不会打印出来),跟String下的相关的方法有关系(toString,equals)6. 线程不安全ii. TreeSet1. 查询元素的方式跟HashSet是一样的,只能通过迭代查询2. 能够对元素进行排序(能够对自然元素即是同种类型的元素进行排序)3. 而且能够对自定义的对象进行排序,但是自定义的对象必须去实现Comparable接口,而且需要去重写compareTo方法,重写Object类中的toString方法。4. 添加元素只能添加同种类型的元素进来(是因为只能对同种类型的元素进行排序),否则出现类转换的异常错误。5. 不允许null元素添加进来,否则出现空指针异常。6. 具备排重功能,能够将相同的元素排重了(相同的元素不会打印出来),跟String下的相关的方法有关系(toString,equals)7. 线程不安全ArrayList,LinkedList, Vector的对比:1、ArrayList与Vector进行比较:实现的方式是数组方式,跟Vector非常相似,唯一不同的地方是前者是不同步后者是同步 2、ArrayList与LinkedList进行比较:前者实现的方式是数组,后者实现的方式堆栈(后进先出) 3、LinkedList与Vector:前者是链表,实现的方式是堆栈,后面是向量,实现的方式也是堆栈。前者是不同步,后者是同步的 归根起来总结:ArrayList和LinkedList是不同步,Vector是同步的。e) Map接口常见的实现类:i. HashMap1. 同一个元素中有2个参数,一个key,一个是value,key和value是绑定在一起的。2. key必须是唯一的,value可以相同。3. 只有迭代查询。只需要知道key,那就知道key相对应的value/把全部的key值保存在Set接口中的,然后再通过Set接口中迭代查询的方式去查询。4. 添加元素是允许为null值的,而且可以添加不同类型的key值进来。5. 查询元素的顺序是不能保证该顺序恒久不变,是Hash系列的Set类似。ii. TreeMap1. Tree系列的Map跟Tree系列的Set是类似的,也是能够对自然元素进行排序(类库类型和自定义的类型),如果对自定义的进行排序,不需要实现Comparable接口,只需要添加自定义对象进来即可。 只需要去对key值进行排序即可.2. 添加元素的时候跟Tree系列的Set一样,也是只能添加同种类型的元素进来f) 集合总结:i. List和Set是Collection集合接口的子接口,但是Map不是,它是键值对的。ii. 查询方式:List是有2种查询方式(下标查询和迭代查询),但是Set和Map仅有迭代查询iii. 查询顺序:List中查询出来的顺序是按照插入元素的顺序查询出来;但是Set中Hash系列的Set(HashSet)没有排序功能,而且不能保证每次顺序都恒久不变的顺序,Tree系列的Set(TreeSet)是能够对自然元素,自定义的对象(必须去实现Comparable接口)进行排序。Map中的Hash系列的Map不能保证查询的顺序恒久不变,Tree系列的Map也是能够对自然元素,自定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论