JAVA语言笔记.docx_第1页
JAVA语言笔记.docx_第2页
JAVA语言笔记.docx_第3页
JAVA语言笔记.docx_第4页
JAVA语言笔记.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

JAVA 语言学习的笔记Java1. 快捷键: Ctrl+ Alt +/ 迅速补全命令名称。2. 输入.后,如:System.会自动出现选项,或者“Alt+/”3. Static 静态变量,有效范围可以跨类,4. 一、final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。 final类不能被继承,没有子类,final类中的方法默认是final的。 final方法不能被子类的方法覆盖,但可以被继承。 /private 方法不能被继承final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 final不能用于修饰构造方法。 注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。5. static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。 被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。1、 static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是: 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。 对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。2、 静态方法 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆! 因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。静态方法中不可以使用this关键字;静态方法中不可以直接调用非静态方法;3、 static代码块 static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。例如:public class Test5 private static int a; private int b; static Test5.a=3; System.out.println(a); Test5 t=new Test5(); t.f(); t.b=1000; System.out.println(t.b); static Test5.a=4; System.out.println(a); public static void main(String args) / TODO 自动生成方法存根 static Test5.a=5; System.out.println(a); public void f() System.out.println(hhahhahah); 运行结果: 3 hhahhahah 1000 4 5 利用静态代码块可以对一些static变量进行赋值,最后再看一眼这些例子,都一个static的main方法,这样JVM在运行main方法的时候可以直接调用而不用创建实例。6. private变量或者方法可以通过设置一个public方法来调用出来。7. 变量的类型可以通过包装类转换,数字运算有数字类8. 继承:子类中的继承的方法修饰权限只能扩大范围:如protected为父类方法修饰,子类只能为public,而父类的private方法不能被继承。构造方法中用super();来调用父类的代码。9. 实例化子类时候,父类的无参构造方法自动调用,首先调用最老的父类。10. 向上转换就是儿子可以代表父亲,但父亲不能代表儿子。因为父亲的范围大。可以通过instantof来判断,且显示类型转换。11. 多态:父类实现统一函数,子类有不同的特性。public class Quadrangle / 实例化保存四边形对象的数组对象private Quadrangle qtest = new Quadrangle6;private int nextIndex = 0;public void draw(Quadrangle q) / 定义draw()方法,参数为四边形对象if (nextIndex qtest.length) qtestnextIndex = q;System.out.println(nextIndex);nextIndex+;public static void main(String args) / 实例化两个四边形对象,用于调用draw()方法Quadrangle q = new Quadrangle();q.draw(new Square(); / 以正方形对象为参数调用draw()方法/ 以平行四边形对象为参数调用draw()方法q.draw(new Parallelogramgle();class Square extends Quadrangle / 定义一个正方形类,继承四边形类public Square() System.out.println(正方形);/ 定义一个平行四边形类,继承四边形类class Parallelogramgle extends Quadrangle public Parallelogramgle() System.out.println(平行四边形);运行结果:正方形0平行四边形112. 抽象类的子类必须实现父类中的抽象方法13. 接口:提供一种继承多父类的方法,接口所有字段都自动是static和final的。14. 接口也可以向上转型:interface drawTest / 定义接口public void draw(); / 定义方法/ 定义平行四边形类,该类继承了四边形类,并实现了drawTest接口class ParallelogramgleUseInterface extends QuadrangleUseInterfaceimplements drawTest public void draw() / 由于该类实现了接口,所以需要覆盖draw()方法System.out.println(平行四边形.draw();void doAnyThing() / 覆盖父类方法/ SomeSentenceclass SquareUseInterface extends QuadrangleUseInterface implementsdrawTest public void draw() System.out.println(正方形.draw();void doAnyThing() / SomeSentenceclass AnyThingUseInterface extends QuadrangleUseInterface void doAnyThing() public class QuadrangleUseInterface / 定义四边形类public void doAnyTthing() / SomeSentencepublic static void main(String args) drawTest d = / 接口也可以进行向上转型操作new SquareUseInterface(), new ParallelogramgleUseInterface() ;for (int i = 0; i d.length; i+) di.draw(); / 调用draw()方法结果:正方形.draw()平行四边形.draw()15. 定义为final的变量要以大写字母开头16. static final 变量的值永远不会变,如Random()类产生的对象;17. final类不能被继承;18. final方法不能被重写;19. 内部类:内部类inner访问不同级别的变量 index, this.index, outer.this.index20. 外部类访问内部类:Outer outer=new Outer();Outer.Inner inner=outer.getinner(); /通过间接方式创建内部类,不能直接new Inner();Outer.Inner inner=outer.new Inner();这样也可以直接产生内部类对象21. 内部类可以实现向上转型为接口:可以很好的隐藏实现细节,还可以在外部类中多次实现同一个接口。package com.lzw;interface OutInterface / 定义一个接口public void f();public class InterfaceInner public static void main(String args) OuterClass2 out = new OuterClass2(); / 实例化一个OuterClass2对象/ 调用doit()方法,返回一个OutInterface接口OutInterface outinter = out.doit();outinter.f(); / 调用f()方法class OuterClass2 / 定义一个内部类实现OutInterface接口private class InnerClass implements OutInterface InnerClass(String s) / 内部类构造方法System.out.println(s);public void f() / 实现接口中的f()方法System.out.println(访问内部类中的f()方法);public OutInterface doit() / 定义一个方法,返回值类型为OutInterface接口return new InnerClass(访问内部类构造方法);结果:访问内部类构造方法访问内部类中的f()方法22. 匿名类实际上生成一个对象内部类:一次见面public interface Contents int value();public interface Destination String readLabel();public class Goods private class Content implements Contents private int i = 11; public int value() return i; protected class GDestination implements Destination private String label; private GDestination(String whereTo) label = whereTo; public String readLabel() return label; public Destination dest(String s) return new GDestination(s); public Contents cont() return new Content(); class TestGoods public static void main(String args) Goods p = new Goods(); Contents c = p.cont(); Destination d = p.dest(Beijing); 在这个例子里类Content和GDestination被定义在了类Goods内部,并且分别有着protected和private修饰符来控制访问级别。Content代表着Goods的内容,而GDestination代表着Goods的目的地。它们分别实现了两个接口Content和Destination。在后面的main方法里,直接用 Contents c和Destination d进行操作,你甚至连这两个内部类的名字都没有看见!这样,内部类的第一个好处就体现出来了隐藏你不想让别人知道的操作,也即封装性。 同时,我们也发现了在外部类作用范围之外得到内部类对象的第一个方法,那就是利用其外部类的方法创建并返回。上例中的cont()和dest()方法就是这么做的。那么还有没有别的方法呢?当然有,其语法格式如下:outerObject=new outerClass(Constructor Parameters);outerClass.innerClass innerObject=outerObject.new InnerClass(Constructor Parameters); 匿名内部类 java的匿名内部类的语法规则看上去有些古怪,不过如同匿名数组一样,当你只需要创建一个类的对象而且用不上它的名字时,使用内部类可以使代码看上去简洁清楚。它的语法规则是这样的:new interfacename().; 或 new superclassname().; 下面接着前面继续举例子:public class Goods3 public Contents cont() return new Contents() private int i = 11; public int value() return i; ; 这里方法cont()使用匿名内部类直接返回了一个实现了接口Contents的类的对象,看上去的确十分简洁。在java的事件处理的匿名适配器中,匿名内部类被大量的使用。例如在想关闭窗口时加上这样一句代码:frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); 有一点需要注意的是,匿名内部类由于没有名字,所以它没有构造函数(但是如果这个匿名内部类继承了一个只含有带参数构造函数的父类,创建它的时候必须带上这些参数,并在实现的过程中使用super关键字调用相应的内容)。如果你想要初始化它的成员变量,有下面几种方法:如果是在一个方法的匿名内部类,可以利用这个方法传进你想要的参数,不过记住,这些参数必须被声明为final。 将匿名内部类改造成有名字的局部内部类,这样它就可以拥有构造函数了。 在这个匿名内部类中使用初始化代码块。 为什么需要内部类? java内部类有什么好处?为什么需要内部类?首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你可以建一个内部类实现这个接口。由于内部类对外部类的所有内容都是可访问的,所以这样做可以完成所有你直接实现这个接口的功能。不过你可能要质疑,更改一下方法的不就行了吗?的确,以此作为设计内部类的理由,实在没有说服力。真正的原因是这样的,java中的内部类和接口加在一起,可以的解决常被C+程序员抱怨java中存在的一个问题没有多继承。实际上,C+的多继承设计起来很复杂,而java通过内部类加上接口,可以很好的实现多继承的效果。本文

温馨提示

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

评论

0/150

提交评论