您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > 毕向东Java学习笔记
Java基础学习笔记1.JRE和JDKJRE(JavaRuntimeEnvironment):Java运行环境,包括Java虚拟机和Java所需的核心类库等。JDK(JavaDevelopmentKit):Java开发工具包,供开发人员使用,JDK中包括了JRE。其中的开发工具包括:编译工具(javac.exe)、打包工具(jar.exe等)2.静态(static)用法:修饰符用来修饰成员(成员变量、成员函数)static修饰内容被对象所共享。被static修饰的成员可以直接被类名调用(类名.静态成员)特有数据随对象存储static特点:1.随着本类的加载而加载,随着类的消失而消失。2.优先于对象存在(静态先存在,对象后存在)。3.被所有对象所共享。4.可以直接被类名所调用。实例变量和类变量区别:1.存放位置:类变量随类的加载存在于方法区中。实例变量随对象的建立而存在于堆内存中。2.生命周期:类变量生命周期长随着类的消失而消失。实例变量生命周期随着对象的消失而消失。静态使用注意事项:1.静态方法只能访问静态成员,非静态方法既可以访问静态也可以访问非静态。2.静态方法中不可以定义thissuper关键字,因为静态优先于对象存在所以静态方法中不可以出现this。3.主函数是静态的。静态的利弊:利:对对象的共享数据进行单独空间的存储节省空间;可以直接被类名调用;弊:生命周期过长;访问出现局限性。什么时候使用静态?1.当对象中出现共享数据时,该数据被静态所修饰。对象中的特有数据要定义成非静态存在于堆内存中。什么时候定义静态函数?当功能内部没有访问到非静态数据(对象的特有数据那么该功能可以定义成静态的)每一个应用程序中都有共性的功能可以将这些功能进行抽取独立封装以便复用。将方法都静态后可以方便使用但该类还可以被其他程序建立对象为了严谨强制让该类不能建立对象可以通过将构造器函数私有化完成。静态代码块:static{静态代码块中执行的语句}特点:随着类的加载而执行用于给类进行初始化。3.抽象类当多个类中出现功能相同,但是功能体不同,可以进行向上抽取,这时,只抽取功能定义,不抽取功能主体。抽象的特点:1.抽象方法一定在抽象类中。2.抽象方法和抽象类都必须被abstract关键字修饰。3.抽象类不可以用new创建对象,因为调用抽象方法没意义。4.抽象类中的抽象方法要被调用,必须有子类复写其所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,那么子类仍然是抽象类。抽象类比一般类多了抽象函数。抽象类不可以被实例化。抽象只能用来修饰类和方法。特殊:抽象类可以不创建抽象方法,这样做仅仅是不让该类创建对象。模板方法设计模式:在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分,在使用不确定的部分,那么这时就将不确定的部分暴漏出去,由该类的子类去完成。4.this用法this代表它所在函数所属对象的引用(简单说:哪个对象在调用this所在函数。this就代表哪个对象)this的应用:当定义类中功能时该函数内部要用到调用该函数的对象时,这时用this来表示这个对象但凡本类功能内部使用了本类对象都用this表示。this语句用于构造函数之间互调。this语句只能放在构造函数的第一行,因为初始化语句要先执行5.关键字finalfinal:最终,作为一个修饰符可修饰类、方法、变量。被final修饰的类不可以被继承,为了避免被继承,被子类复写功能。被final修饰的方法不能被复写。被final修饰的变量是常量,只能赋值一次,既可以修饰成员变量也可以修饰局部变量。常量的书写规范:所有字母大写,当有多个单词组成时单词间通过下划线(_)连接。6.接口(interface)接口:可以认为是一个特殊的抽象类,当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。class用于定义类。interface用于定义接口。接口定义时格式特点:1.接口中常见定义,常量,抽象方法。2.接口中的成员都有固定修饰符。常量:publicstaticfinal;方法:publicabstract。记住:接口中的成员都是public的。接口不可以创建对象,因为有抽象方法。需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化,否则子类是一个抽象类。接口可以被类多实现。接口之间可以多继承。接口的特点:1.接口是对外暴露的规则。2.接口是程序的功能扩展。3.接口可以用来多实现。4.类与接口之间是实现关系而且类可以继承一个类的同时实现多个接口。5.接口与接口之间可以有多继承关系。基本功能定义在类中,扩展功能定义在接口中。事物之间的关系:聚集:has-a(一个事物中包含另一事物);聚合:同类事物组成一个集合(如球员与球队的关系);组合:如手是身体的一部分。7.构造函数构造函数特点:1.函数名与类名相同;2.不用定义返回类型;3.不可以写return语句;作用:给对象进行初始化对象一建立构造函数就被执行当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数,当在类中自定义构造函数后默认的构造函数就没有了。构造代码块:格式:{执行语句};作用:给对象进行初始化,对象一建立就运行而且优于构造函数执行。构造代码块给所有的对象进行统一初始化而构造函数是给对应的对象初始化。构造代码块中定义的是不同对象共性初始化内容。构造函数可以被私有化。8.理解面向对象面向过程强调的是功能行为。面向对象:将功能进行封装进对象强调具备了功能的对象。1.面向对象是相对于面向过程而言的。2.面向对象和面向过程都是一种思想。3.面向过程强调的是功能行为。4.面向对象将功能封装进对象,强调具备了功能的对象。5.面向对象是基于面向过程的。9.单例模式(Singleton)饿汉式(先初始化对象,Singleton一进内存就已经创建好了对象)(开发一般用饿汉式):[java]classSingleton{privatestaticSingletons=newSingleton();privateSingleton(){}publicstaticSingletongetInstance(){returns;}}懒汉式(对象时方法调用时才被初始化,也叫做对象的延时加载。Singleton进内存时对象还没有存在,只有调用了getInstance方法时才建立对象)[java]classSingleton{privatestaticSingletons=null;privateSingleton(){}publicstaticsynchronizedSingletongetInstance(){if(s==null){s=newSingleton();}returns;}}改进:[java]classSingleton{privatestaticSingletons=null;privateSingleton(){}publicstaticSingletongetInstance(){if(s==null){synchronized(Singleton.class){if(s==null)s=newSingleton();}}returns;}}使用原则;定义单例建议使用饿汉式。10.封装封装;指隐藏对象属性和实现细节仅对外提供公共访问方式。好处:1.将变化隔离;2.便于使用;3.提高重用性;4.提高安全性封装原则:1.将不需要对外提供的内容隐藏起来;2.把属性都隐藏提供公共方法对其访问。Java中的函数本身就是一个最小的封装体。private私有权限修饰符,私有只在本类中有效。私有不是封装,私有仅仅是封装的一种表现形式。成员变量都有默认值存储在堆内存中。11.继承继承:1.提高代码复用性。2.使类与类之间产生关系,有了这个关系才有了多态的特性。注意:不要为了获取其他类的功能简化代码而继承,必须是类与类之间有所属关系才可以继承。所属关系is-a。java语言:只支持单继承,不支持多继承,因多继承会带来安全隐患(当多个父类中定义了相同功能,当功能内容不同时,子类不确定要运行哪一个。但是java保留了这种机制,并用另一种体现形式来完成表示:多实现。)java支持多层继承。1.变量:如果子类中出现非私有同名成员变量时,子类要访问本类中的变量用this,子类要访问父类中的同名变量用super。this代表本类对象的引用,super代表父类对象的引用。2.函数:当子类出现和父类一模一样的函数时,当子类对象调用该函数,会运行子类函数的内容。如同父类的函数被覆盖一样,这是函数的另一个特性重写(覆盖override)3.子父类中的构造函数:先执行父类的构造函数再执行子类的构造函数。在对子类函数进行初始化时父类的构造函数也会运行,是因为子类的构造函数默认第一行有一条隐式语句,super();super会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是:super();为什么子类一定要访问父类中的构造函数?因为父类中的数据子类可以直接获取,所以子类对象在建立时需要先查看父类是如何对这些数据初始化的。所以子类在对象初始化时,要先访问以下父类中的构造函数。如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。super语句一定要定义在子类的构造函数的第一行。子类的所有构造函数,默认都会访问父类中空参数的构造函数。因为子类每一个构造函数内的第一行都有一句隐式super();当父类中没有空参数的构造函数时,子类必须手动通过super或者this语句形式来指定要访问的构造函数。当然子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。子类中至少会有一个构造函数访问到父类中的构造函数。没有条件的递归就是死循环。覆盖:1.子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。2.静态只能覆盖静态。重写:子类和父类方法一模一样。重载:只看同名函数的参数列表。12.Java的编译方式Java有两种编译方式:(1)直接把源代码编译成和本地机器平台相关的机器语言,叫即时编译;(2)把源文件编译成一种中间的字节码与机器平台无关叫解释型。13.匿名对象匿名对象使用方式一:当对象的方法只调用一次时可以用匿名对象来完成。这样写比较简化如果对一个对象进行对个成员调用必须给这个对象起名字,匿名内部类调用成员变量无任何意义。匿名对象使用方式二:可以将匿名对象作为实际参数进行传递。14.泛型泛型是JDK1.5出现的新特性,用于解决安全问题是一个类型安全机制。好处:1.将运行时期出现的ClassCastException问题转移到编译时期,方便程序员解决问题,让运行时期问题减少,安全。2.避免了强制转换的麻烦。泛型格式:通过来定义要操作的引用数据类型。泛型应用场合:通常在集合框架中很常见,只要见到就要定义泛型,其实就是用来接收类型的。当使用集合时,集合中要存储的数据类型作为参数传递到即可。什么时候定义泛型类?当类中要操作的引用数据类型不确定时,早期定义Object来完成扩展,现在定义泛型来完成扩展。泛型类:泛型可以定在类上也可以定义在方法上。泛型类定义的泛型在整个类中有效,如果被方法使用,那么泛型类明确要操作的具体类型后,所有要要操作的类型都已经确定了。为了让不同方法可以操作不同类型而且类型不确定,那么可以将泛型定义在方法上。泛型方法:特殊之处:静态方法不可以访问类上定义的泛型。如果静态方法操作的应用数据类型不确定可以将泛型定义在方法上。静态泛型方法:泛型定义在接口上:?表示引用数据类型不明确,?通配符泛型限定:?extendsE可以接受E类型或者E的子类,上限。?superE可以接受E类型或者E的父类15.String类字符串是一个特殊的对象一旦被初始化就不能改变。publicfinalclassStringequals方法比较内存地址值。常见字符串操作:1.获取1.1字符串中包含的字符数也就是字符串的长度。intleng
本文标题:毕向东Java学习笔记
链接地址:https://www.777doc.com/doc-2274369 .html