java学习笔记.docx_第1页
java学习笔记.docx_第2页
java学习笔记.docx_第3页
java学习笔记.docx_第4页
java学习笔记.docx_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

服务行业的两条准则:1. 客户永远是对的。2. 客户如果错了,请参照第一条。程序员的大脑应该向一本词典的目录,而不是一本词典。JAVA配置环境变量(02_Java创世纪.mp4)在“系统变量”中设置3项属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓)。若已存在则点击“编辑”,不存在则点击“新建”。a) JAVA_HOME C:Program FilesJavajdk1.5.0_06b) PATH %JAVA_HOME%binc) CLASSPATH .;%JAVA_HOME%libtools.jarjava_home环境变量可以不设置。它的作用是显而易见的。path环境变量是操作系统外部命令的搜索路径。classpath环境变量时类文件搜索路径。虚拟机在运行编译后的class文件时候寻找的路径,默认系统的编译好的class都在tools.jar中。最前面的.;(逗号、分号)hi把当前路径也进行寻找,否则在运行当前文件夹class的文件时候会出错。java的数据类型(05_Java的基本数据类型.mp4)(1) 布尔型变量1. boolean类型适用于逻辑运算,一般用于程序流程控制。2. 在java当中的boolean类型只有两种取值可能true和false。eg: boolean b = false;注意的是不能用0和非0,或者空或非空来表示。(2) 字符型变量char类型数据用来表示通常意义上的字符。1. 字符是由单引号包括起来的单个字符。eg:char c = a;2. java字符使用Unicode字符集。由于java在设计的初期就考虑到将该语言使用在互联网当中,所以设计者们就选用了unicode字符集,这也使得java在程序能够在互联网当中更好的流通,也正是由于这样的原因,以下代码是合法的:char c = 中; 。(3) 数值型变量1. 整数类型(1) java语言整数常量的三种表示形式: 十进制整数,如12,-314,0。 八进制整数,要求以0开头,如012。 十六进制整数,要求以0x或0X开头,如0x12。(2) java 语言的整数常量默认为int型,如: int I = 3;(3) 申明long型常量可以后加l或L,如long l = 3L; 尽量大写,因为小写l与数字1很像。2. 浮点类型数值类型表示范围:byte short int long float = 赋值运算符 = += -= *= =字符串连接运算符 +面向对象(12_面向对象基础(一).mp4)C 面向过程: 他的思维方式是模拟cpu执行指令的顺序。Java 面向对象: 按照现实世界中是怎样的就怎样思考问题。面向对象的目标就是消除程序中的重复代码。面向对象的思维方式1. 首先确定谁来做,其次确定怎么做;2. 首先考虑整体,其次考虑局部;3. 首先考虑抽象,其次考虑具体。(越是抽象的东西越不容易错)生成对象的方法(13_面向对象基础(二).mp4)格式: 类名 对象名 = new 类名();例如: Dog dog = new Dog();执行过程可分为三个步骤:1. Dog dog = new Dog();创建一个Dog的引用2. Dog dog = new Dog();创建一个Dog对象3. Dog dog = new Dog();将创建的对象赋给这个引用Java虚拟机将内存分为两个部分:栈内存,堆内存。堆内存中存放对象的本体,而栈内存中存放对象的名字。对象的名字又有个专业术语,叫对象的引用。匿名对象的使用(14_面向对象基础(三).mp4)可以不定义对象的引用名称,而直接调用这个的方法。这样的对象叫做匿名对象,如:new Dog().jump();没有名字的对象就叫做匿名对象,如同没有署名的信叫匿名信。因为没有名字,匿名对象的使用通常是一次性的。如:new Dog().jump();new Dog().jump();两个看似一样,其实生成了两个两个对象。重载的定义 (15_面向对象基础(四)1. 两个或多个函数在同一个类中2. 函数名相同3. 参数列表不同this的使用方法 (16_this的使用方法.mp4)(1) this代表调用当前成员函数的对象。通俗地讲,this相当于在现实生活中的你我他中的“我”字,这个这个字很奇怪,在不同人嘴里代表不同的含义。public class Person String name;void talk() /参数名和成员变量名不冲突,这种情况一般我们省略thisSystem.out.println(my name is + ); public class Main public static void main(String args) Person p1 = new Person(); = zhangsan;Person p2 = new Person(); = lisi;p1.talk(); /this代表p1p2.talk(); /this代表p2(2) 如果成员函数的参数与成员变量同名,那么加上this代表成员变量,不加代表函数参数。public class Person String name;void talk(String name) System.out.println(my name is + );/这时name为成员变量System.out.println(my name is + name);/这时name为函数参数对于上述情况,引申了this的另一个用法:构造函数。public class Person String name;int age;public Person(String name, int age) = name;this.age = age;下面是不好的写法:不容易阅读和维护。public class Person String name;int age;public Person(String n, int a) name = n;age = a;(3) This的另外一种用法:用于调用本类中的成员函数:public class Person String name;int age;String address;public Person(String name, int age) = name;this.age = age;public Person(String name, int age, String address) this(name, age); /调用了本类中参数为(String,int)的构造函数,位置只能放在第一句!this.address = address;static关键字的使用(17_static关键字的作用.mp4)静态成员变量可以直接使用类名来调用,但不是必须,即也可以用对象调用。非静态成员变量的使用必须先创建对象,再调用。静态成员变量不是属于某个对象,而是属于这一个类。,静态成员函数同静态成员变量,也可以用类名来调用。(另外,众所周知,一个非静态成员函数只有创建对象才可通过对象调用。)静态成员函数中不能使用非静态的成员变量。前面学过成员函数中的成员变量都省略了this,代表调用这个成员变量的对象。因为假设可以使用静态成员变量,当用类名调用静态方法时,接违背了上面的原则,this就没有对象可代表了 。这条规则可以概括为:在静态函数中不能使用this。静态代码块:在装这这个类时执行。主要作用是静态变量赋初始值。public class Person String name;int age;static int count;static count = 0;System.out.println(静态代码块);public class Main void main(String args) Person person;person = new Person();继承初步 (18_继承初步.mp4) 使用继承是为了减少重复代码。Java支持单继承,不允许多继承继承 关键字 extends (英文原意:扩展)接口实现 关键字 implements (英文原意:实现)子类实例化过程 (19_子类实例化过程.mp4)子类的实例化过程:当我们要调用子类的构造函数来生成子类的时候,一定需要调用父类的构造函数,如果你没有写,编译器会自动的帮你在子类的构造函数第一语句前添加一行super();用于调用父类当中无参数的构造函数。如果想调用有参数的构造函数,就在super();中添加相应的参数就可以了。那么编译器为什么非得给我们加上构造函数呢?由于子类继承父类的成员变量和成员函数, 但却无法继承父类的构造函数,所以说在为成员变量赋值的时候有可能产生重复代码。怎么解决重复代码的问题呢,既然不能继承父类的构造函数,但我们可以使用supe();调用父类的构造函数,从而解决赋值时的重复代码问题。用this调用本类中的构造函数,用super调用父类中的构造函数。作为一个程序员,看到重复代码,就像别人往你脸上吐了一口吐沫一样,要马上解决掉,这玩意太恶心了。public class Person String name;int age;public Person() public Person(String name, int age) = name;this.age = age;void eat() System.out.println(吃饭);public class Student extends Person int grade;public Student() super(); /不写的话,编译器也给加上System.out.println(无参数的构造函数);public Student(String name, int age, int grade) /=name; /重复代码/this.age=age;super(name, age);this.grade = grade;复写(override)也被称为覆盖或者重写(20_函数的复写.mp4)1. 在具有父子关系的两个类中2. 父类和子类各有一个函数,这两个函数的定义(返回值、函数名和参数列表)完全相同复写的原因,一般情况下因为父类提供的成员函数功能不健全,而不是全盘否定。因此,在复写时候可以使用super.父类成员函数进行调用父类中的要复写的函数。这是super语句是可以放在任何位置的,不必为第一条语句。 程序员的优良品德之一就是要懒,越懒你的重复代码越少。对象的转型 (21_对象的转型.mp4)1. 向上转型 将子类的的对象父子给父类的引用:Student继承自PersonStudent s = new Student();Person p = s;向上转型的的前提是这两个类一定要有继承关系,并且是子类的对象赋给父类的引用,否则编译报错。一个引用能够调用哪些成员(变量和函数),取决于这个引用的类型。一个引用调用的是哪一个方法,取决于这个引用所指向的对象 。2. 向下转型 将父类的对象赋值给子类的引用Student s1 = new Student();Person p = s1;Student s2 = (Student) p;向下转型的前提是首先进行向上转型。而且要有强制类型转换。3. 对比向上转型 成功的前提是有继承关系。向下转型 成功的前提是首先进行向上转型。抽象类和抽象方法(23_抽象类和抽象函数.mp4)抽象函数:只有函数定义,没有函数体的函数: abstract void fun();抽象类:使用abstract定义的类被称之为抽象类;1抽象类不能够生成对象;2如果一个类当中包含有抽象函数,那么这个类必须被声明为抽象类;3如果一个类当中没有抽象函数,那么这个类也可以被声明为抽象类。抽象类天生就是用来当爹的。什么意思呢?抽象类就是用来被继承的,它自己不能生成对象,但是它的子类可以生成对象。抽象类不能生成对象,但是有构造函数,想想子类的实例化过程就知道了。为什么使用抽象类?(24_为什么用抽象类.mp4)现在编程理论认为,如果一段代码在语义上是有错误的,那么在语法上也应该是有错误的。但这只是一个没有实现的想法而已,不过抽象类的使用,是比较契合这条理论的。就是说如果我们的代码在语义上有错误,我们最好让它在语法上也有错误。我在父类中定义了一个函数 void fun() ,本意是让子类去复写它,但是这种情况不复写是没有语法错误的。当如果这样写abstract void fun(); ,子类不复写的话,编译器会报语法错误。软件包 (25_包和访问权限(一).mp4)所谓的软件包就是把类放在不同的文件夹下,解决命名冲突的问题。将类放置到一个包当中,需要使用package ”包名” 。编译时需要使用 d 参数,该参数的作用是依照包名生成相应的文件夹。如:javac d . Test.java , 其中”.”表示当前路径。打包之后一个类的全名应该是: “包名” + ”.” + ”类名”一个包包含一个或多个类。软件包2 (26_包和访问权限(二).mp4)1. 如果一个类被声明为public权限,那么这个类的名字必须和源文件的名字相同。2. 两个类如果在不同的包中,如果一个类想调用另一个类,那么另一个类必须被声明为public的。这个类的成员变量和成员函数亦是如此。3. 被声明为private的成员变量和成员函数只能在本类中使用。4. 如果类或其变量或成员前没有权限修饰符,那么便可以在同一包的任意类中引用。(default权限:包级别访问权限)5. 权限总结:1.public 可以修饰类、成员变量和成员函数没有任何限制,同一个包当中,或者不同包当中的类都可以自由访问2.private 可以修饰成员变量和成员函数(可以修饰匿名类)只能在本类当中使用3.default(不写权修饰符,就是default权限)可以修饰类,成员变量和成员函数在同一个包当中,可以自由访问权限由大到小为:public同包或不同包protect同包或不同包的父子类中default同包中private同类中编程最小原则:一个类或其成员权限,在满足业务的基础上,应该尽可能小。软件包3 (27_包和访问权限(三).mp4)如果子类和父类不在同一包当中,则子类无法继承到父类当中的default权限的变量和成员函数(这句话不对)如果子类和父类不在同一包当中,子类可以继承到父类当中的default权限的变量和成员函数,但是由于权限不够,无法使用protect权限首先拥有和default一样的功能,但是该权限只能修饰成员变量和成员函数,其次在default的基础上增加了跨包继承权限。相对于public来说,包外只能在其子类中访问。接口 (28_结构的基本语法.mp4)接口是一种特殊的类,具有下列性质:1. 使用interface定义。2. 接口是最特殊的抽象类,因为接口当中的方法都是抽象的。因此,在定义一个接口时,方法前的abstract关键字可以不写。3. 接口当中的方法都是public权限。public可以省略。4. 实现接口使用implements关键字,要复写里面的全部抽象方法5. 一个类可以实现多个接口6. 一个接口可以继承多个接口因为接口是用来被实现的,因此,就是不写public,也是public权限(默认应该是default权限)。综上,就是说一个interface可以省两个关键字abstract和public。但不推荐这么做。工厂模式(29_接口的应用.mp4)使用new来调用构造函数的这样代码,把它封装在工厂类。异常 (30_Java当中的异常(一).mp4)在面向对象的体系当中的一切都是对象,异常也不例外,异常是一种对象。当程序运行不正常因素时,虚拟机帮我们产生异常对象。异常中断了正常指令流。JDK提供的异常类的继承关系:程序员对Error无能为力(JVM直接死掉),只能处理Exception。RuntimeException及它的子类为uncheck Exception。对于check Exception编程时必须进行try catch处理或进行声明,否者编译不通过。说明:非运行期异常是由外界运行环境决定异常抛出条件的异常,例如文件操作,可能受权限、磁盘空间大小的影响而失败,这种异常是程序本身无法避免的,需要调用者明确考虑该异常出现时该如何处理方法,因此非运行期异常必须有throws子句标出,不标出或者调用者不捕获该类型异常都会导致编译失败,从而防止程序员本身疏忽。运行期异常是程序在运行过程中本身考虑不周导致的异常,例如传入错误的参数等。抛出运行期异常的目的是防止异常扩散,导致定位困难。因此在做异常体系设计时要根据错误的性质合理选择自定义异常的继承关系。还有一种异常是Error 继承而来的,这种异常由虚拟机自己维护,表示发生了致命错误,程序无法继续运行例如内存不足。我们自己的程序不应该捕获这种异常,并且也不应该创建该种类型的异常。IO (32_Java当中的IO(一).mp4)1. Java的IO:字节流的核心类:(用于非文本文件)InputStream和OutputStream是所有字节流的类的父类,并且是抽象类。他们最常用的子类分别为 FileInputStream和FileOutputStream。核心方法为:InputStream:int read(byte b, int off, int len)OutputStream:void write(byte b, in t off, int len)字符流的核心类:(用于文本文件)Reader和Writer是所有字符流的类的父类,并且是抽象的。他们最常用的子类分别为 FileReader和FileWriter。核心方法为:Reader:int read(char c,int off,int len)Writer: void write(char c,int off,int len) 2. 常见的处理流 BufferedReader:常用的方法public String readLine() throws IOException Reads a line of text. A line is considered to be terminated by any one of a line feed (n), a carriage return (r), or a carriage return followed immediately by a linefeed.模式者装饰 (34_Java当中的IO(三).mp4)Java 类库中采用了大量设计模式,其中IO类库中使用了装饰者模式。节点流:被装饰者处理流:装饰者线程 (36_Java当中的线程(一).mp4)1. 创建线程的方法方式1:定义一个线程类,它继承类Thread并重写其中的方法run(),方法run()称为线程体。由于java只支持单继承,用这种方法定义的类不能再继承其他类。示例代码如下:MyThread.javaclass MyThread extends Threadpublic void run()for(int i = 0; i + i);Test.javaclass Testpublic static void main(String args)/生成线程类的对象/联想到操作系统了的进程(线程)状态转换图, 将线程对象添加到新建队列MyThread t = new MyThread();/启动线程 不能用t.run(); 这样的话,不会启动新的线程还是在当前线程中执行,因为咱们重写的run()函数和其他的成员函数没有区别/将线程对象从新建队列放到就绪队列,开始抢占CPUt.start();for(int i = 0; i + i);方式2:(比方式1用得更多,也推荐第二种)提供一个实现接口Runnable的类作为线程的目标对象,在初始化一个Thread类或者Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体。示例代码如下:RunnableImpl.javaclass RunnableImpl implements Runnablepublic void run()for(int i = 0; i + i);Test.javaclass Testpublic static void main(String args)/生成一个Runnable接口的实现类的对象RunnableImpl r = new RunnableImpl();/生成一个Thread对象,并将Runnalbe接口的实/现类的对象作为参数传递给该Thread对象Thread t = new Thread(r);t.start();for(int i = 0; i + i);2. 线程的简单控制方法线程睡眠:Thread.sleep() 参数为休眠的毫秒数,时间到了之后线程不是马上进入执行状态,而是进入就绪状态。线程暂停:Thread.yield() 引起当前线程暂停执行,以允许其他线程执行。线程仍处于可运行状态,但此时可选择其他同优先级的线程执行。如无其他同优先级的线程处于可执行状态,则当前线程继续执行。yield()方法能控制线程间的合作,保证在有工作时不让CPU闲置。3. synchronized的作用: 1.同步方法,2.同步代码块总结:A. 无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象,而不是把一段代码或 函数当作锁,所以首先应知道需要加锁的对象B每个对象只有一个锁(lock)与之相关联。C实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制数组(40_Java当中的数组.mp4)数组是一种效率最高的存储和随机访问对象的一种方式。一个数组由两部分构成:数组引用变量、数组对象。数组引用变量指向数组对象的内存地址。int a;/为引用变量分配空间 a=new int4;/数组对象初始化,默认值为0数组的类型: int arr = 1, 2, 3 ; / 说明:arr是整型数组类型,也是引用类型。数组的使用:/ 数组的静态定义方法int arr = 1, 2, 3 ;for (int i = 0; i arr.length; i+)System.out.println(arri);/ 数组的动态定义方法int arr2 = new int10;for (int i = 0; i arr2.length; i+)System.out.println(arr2i);/ 二维数组的静态定义方法, 元素为长度不同的一维数组int arr3 = 1, 2, 3, 4, 5 , 6, 7 , 8, 9, 10 ;for (int i = 0; i arr3.length; i+)for (int j = 0; j arr3i.length; j+)System.out.println(arr3ij);/ 二维数组的动态定义方法int arr4 = new int35;for (int i = 0; i arr4.length; i+)for (int j = 0; j arr4i.length; j+)System.out.println(arr4ij);Java 类集框架(41_类集框架(一).mp4)(相当于C+中的STL库)1、类集框架是一组类和接口2、位于java.util包中3、主要用于存储和管理对象4、主要分为三大类-集合、列表和映射 类集框架架构图(虚框:接口 ,实框:实现类)(1) 简介:集合中的对象不安特定的方式排序,并且没有重复的对象。列表中的对象按照索引位置排序,可以有重复的对象。映射中的每个元素包含一个键对象和一个值对象,键不可以重复,值可以重复。(2) 继承和实现关系类集框架最大的接口:Collection、Map、Iterator、EnumerationCollection(接口):存放单值 |-List(接口):允许有重复内容|- LinkedList: |-ArrayList:同步处理,新的操作类,非线程安全 |-Vector:同步处理,旧的操作类,线程安全,支持Enumeration输出 |-Set(接口):不允许有重复内容,靠hashCode()和equals()进行重复的验证|-HashSet:无序存放 |- LinkedHashSet:|-SortedSet(接口) |-TreeSet:有序存放,按Comparable排序Map(接口):存放一对值 |-HashMap:新的类,异步处理,非线程安全,允许有null |- LinkedHashMap: |-Hashtable:旧的类,同步处理,非线程安全,不允许有null|-Properties:属性操作类 |- SortedMap(接口) |-TreeMap:有序排列,按key排序,根据Comparable指定排序规则Iterator(接口): 迭代输出,依靠Collection接口中的iterator方法输出,是新的输出标准Enumeration(接口):旧的输入操作。 (使用方法参见 自己写源码)(3) 主要方法Collection(类集)接口主要方法:boolean add(Object o)向集合中加入一个对象void clear()删除集合当中的所有对象boolean isEmpty()判断集合是否为空remove(Object o)从集合中删除对象的引用int size()返回集合中元素的数目Iterator iterator()生成一个迭代器对象,该对象用于遍历整个集合 Iterator(迭代器)主要成员方法:boolean hasNext() 判断当前游标还有没有下一个元素next() 返回下一个元素,之后游标向后移动一位(迭代器设计模式:在不暴漏存储细节的情况下,能够把数据结构当中的对象一个一个的取出来)(4) 网上其他资料1:上图显示了每个接口的实现类,应当注意的是,map不是collection的子接口。 1.Collection 接口是一组允许重复的对象。 2.Set 接口继承 Collection,但不允许重复。 3.List 接口继承 Collection,允许重复,并引入位置下标。 4.Map 接口既不继承 Set 也不继承 Collection。(5) 网上其他资料2:Map 映射表, 一个key只能对应一个value(它的反命题,一个value只对应一个key不成立) 最常用的有: Map L- HashMap (key可以null) L- HashTable (key不能为null) L-Properties (适合读取.properties格式的文件) L- SortedMap(interface根据Key排序) L-TreeMap(用二叉树实现key排序) List 和 Set 都是线性的,主要区别是List里面存放的内容可以重复,而Set同一对象只保留唯一的一个。因此,Map里面,提取Key集合的返回类型是Set,而提取Value集合的类型是Collection(List/Set)的父类型。 常用的有 List L-LinkedList(链表) L-ArrayList(动态数组,所有方法不同步) L-Vector(动态数组,所有方法同步) L-Stack(可以实现LIFO的栈) (6) java的泛型不支持基本类型/ 正确的HashMap myHashMap;/ 语法错误:Syntax error on token int, Dimensions expected after this token.HashMap myHashMap2;Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。原始类型 封装类boolean Booleanchar Characterbyte Byteshort

温馨提示

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

评论

0/150

提交评论