当前位置: 首页 > news >正文

域名备案查询 网站备案查询网站的栏目关键词

域名备案查询 网站备案查询,网站的栏目关键词,下载的asp网页模板怎么应用到网站,wordpress多站点 用户同步提起Java内部类(Inner Class)可能很多人不太熟悉#xff0c;实际上类似的概念在C里也有#xff0c;那就是嵌套类(Nested Class)#xff0c;关于这两者的区别与联系#xff0c;在下文中会有对比。内部类从表面上看#xff0c;就是在类中又定义了一个类(下文会看到#xff…提起Java内部类(Inner Class)可能很多人不太熟悉实际上类似的概念在C里也有那就是嵌套类(Nested Class)关于这两者的区别与联系在下文中会有对比。内部类从表面上看就是在类中又定义了一个类(下文会看到内部类可以在很多地方定义)而实际上并没有那么简单乍看上去内部类似乎有些多余它的用处对于初学者来说可能并不是那么显著但是随着对它的深入了解你会发现Java的设计者在内部类身上的确是用心良苦。学会使用内部类是掌握Java高级编程的一部分它可以让你更优雅地设计你的程序结构。下面从以下几个方面来介绍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()方法就是这么做的。那么还有没有别的方法呢当然有其语法格式如下outerObjectnew outerClass(Constructor Parameters);outerClass.innerClass innerObjectouterObject.new InnerClass(Constructor Parameters);注意在创建非静态内部类对象时一定要先创建起相应的外部类对象。至于原因也就引出了我们下一个话题 非静态内部类对象有着指向其外部类对象的引用对刚才的例子稍作修改public class Goods {private int valueRate 2;private class Content implements Contents {private int i 11 * valueRate;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();}}在这里我们给Goods类增加了一个private成员变量valueRate意义是货物的价值系数在内部类Content的方法value()计算价值时把它乘上。我们发现value()可以访问valueRate这也是内部类的第二个好处 一个内部类对象可以访问创建它的外部类对象的内容甚至包括私有变量这是一个非常有用的特性为我们在设计时提供了更多的思路和捷径。要想实现这个功能内部类对象就必须有指向外部类对象的引用。Java编译器在创建内部类对象时隐式的把其外部类对象的引用也传了进去并一直保存着。这样就使得内部类对象始终可以访问其外部类对象同时这也是为什么在外部类作用范围之外向要创建内部类对象必须先创建其外部类对象的原因。有人会问如果内部类里的一个成员变量与外部类的一个成员变量同名也即外部类的同名成员变量被屏蔽了怎么办没事Java里用如下格式表达外部类的引用outerClass.this有了它我们就不怕这种屏蔽的情况了。静态内部类和普通的类一样内部类也可以有静态的。不过和非静态内部类相比区别就在于静态内部类没有了指向外部的引用。这实际上和C中的嵌套类很相像了Java内部类与C嵌套类最大的不同就在于是否有指向外部的引用这一点上当然从设计的角度以及以它一些细节来讲还有区别。除此之外在任何非静态内部类中都不能有静态数据静态方法或者又一个静态内部类(内部类的嵌套可以不止一层)。不过静态内部类中却可以拥有这一切。这也算是两者的第二个区别吧。局部内部类是的Java内部类也可以是局部的它可以定义在一个方法甚至一个代码块之内。public class Goods1 {public Destination dest(String s) {class GDestination implements Destination {private String label;private GDestination(String whereTo) {label whereTo;}public String readLabel() {return label;}}return new GDestination(s);}public static void main(String[] args) {Goods1 g new Goods1();Destination d g.dest(Beijing);}}上面就是这样一个例子。在方法dest中我们定义了一个内部类最后由这个方法返回这个内部类的对象。如果我们在用一个内部类的时候仅需要创建它的一个对象并创给外部就可以这样做。当然定义在方法中的内部类可以使设计多样化用途绝不仅仅在这一点。下面有一个更怪的例子public class Goods2 {private void internalTracking(boolean b) {if (b) {class TrackingSlip {private String id;TrackingSlip(String s) {id s;}String getSlip() {return id;}}TrackingSlip ts new TrackingSlip(slip);String s ts.getSlip();}}public void track() {internalTracking(true);}public static void main(String[] args) {Goods2 g new Goods2();g.track();}}你不能在if之外创建这个内部类的对象因为这已经超出了它的作用域。不过在编译的时候内部类TrackingSlip和其他类一样同时被编译只不过它由它自己的作用域超出了这个范围就无效除此之外它和其他内部类并没有区别。匿名内部类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通过内部类加上接口可以很好的实现多继承的效果。
http://www.zqtcl.cn/news/405606/

相关文章:

  • 怎么做网站首页弹幕外贸网站高端定做
  • asp.net mvc 做网站做网站原型的软件
  • wordpress网站恢复北京app建设 网站开发公司
  • 给别人做设计的网站aso优化师工作很赚钱吗
  • 网店网站建设规划方案入门编程软件
  • 网站布局企业安全文化建设导则
  • 胶东国际机场建设有限公司网站2021重大军事新闻
  • 企业网站优化的方式萍乡市建设局网站王丽
  • 做网站的收费标准社保网上服务大厅
  • php网站开发安全网站建设管理教程视频教程
  • 网站建设的空间是什么意思海络网站
  • 深圳华强北今晚网站优化推广公司
  • 网站建设行业好做吗太原网站改版
  • 寿光企业建站流程个人网站用什么软件
  • 网站建设与管理自考本全国卷wordpress 关闭文章修订
  • 兴义市建设局网站首页网站开发项目实训总结
  • 个人网站空间收费网络软文营销案例
  • 网站开发文件结构组成微网站移交
  • 西安全网优化 西安网站推广网页浏览器缩略词
  • 网站开发及企业推广营销型网站建设怎么收费
  • 网站建设与管理ppt课件百度云盘关键词推广营销
  • c asp.net网站开发书宁波建设业协会网站
  • 政务网站建设发言材料知名互联网公司有哪些
  • 网站搭建制作建e室内设计网画图
  • 重庆市建设工程施工安全管理信息网北京seo公司网站
  • 国外做调查问卷的网站建设邮费自己的网站 要不要购买服务器的
  • 网站建设和优化排名四川建设网官网证书查询入口
  • 如何搜名字搜到自己做的网站电子商务平台icp备案证明
  • 网站建设与管理工作内容北京网站建设价
  • 做网站选哪个语言软文营销的方法