文档章节

[Core Java® for the Impatient]重载Java2

小紅
 小紅
发布于 2016/04/20 18:57
字数 737
阅读 41
收藏 1

Chapter 2. Object-Oriented Programming

  1.     Set(Mutator Methods)方法改变对象的状态,Get(accessor methods)方法则不;

  2. Java中变量不持有对象,他们引用对象;

  3. 变量的实例和方法的实现在类的声明部分声明;

  4. 对象调用自身实例化的方法,靠this引用

    5.    构造方法与类同名,一个类可以拥有多个构造方法;

    6.    静态变量不属于任何对象,静态方法不通过对象调用

    7.    类之间通过包来组织,使用import声明使得你不需要在程序里写完整的包名;

    8.    类可以嵌套;

    9.    内部类是非静态的嵌套类,其实例拥有构造过的嵌入类的引用;

    10.    Java doc工具处理源文件产生HTML格式的代码注释;


基本概念:

encapsulation 封装

inheritance 继承

polymorphism 多态


mutator => setter

accessor => getter

Java8 多了一种参数方式,receiver parameter

我们可以使用this作为参数,但是要保证JDK版本,否则

jls有详细说明:

http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.1

Here are some examples of receiver parameters in instance methods and inner classes' constructors:
class Test {
    Test(/* ?? ?? */) {}
      // No receiver parameter is permitted in the constructor of
      // a top level class, as there is no conceivable type or name.

    void m(Test this) {}
      // OK: receiver parameter in an instance method

    static void n(Test this) {}
      // Illegal: receiver parameter in a static method                         

    class A {
        A(Test Test.this) {}
          // OK: the receiver parameter represents the instance
          // of Test which immediately encloses the instance
          // of A being constructed.

        void m(A this) {}
          // OK: the receiver parameter represents the instance 
          // of A for which A.m() is invoked.

        class B {
            B(Test.A A.this) {}
              // OK: the receiver parameter represents the instance 
              // of A which immediately encloses the instance of B 
              // being constructed.

            void m(Test.A.B this) {}
              // OK: the receiver parameter represents the instance 
              // of B for which B.m() is invoked.
        }
    }
}
B's constructor and instance method show that the type of the receiver parameter may be denoted with a qualified TypeName like any other type; but that the name of the receiver parameter in an inner class's constructor must use the simple name of the enclosing class.


内部类不可以拥有静态变量和静态方法,但是可以拥有常量。

public class Test {
    class TestClass {
        private final static int num = 0;// right
        private static int id = 0;//Error:(17, 28) java: Illegal static declaration in inner class com.scb.smarttrans.utils.generator.Test.TestClass
  modifier 'static' is only allowed in constant variable declarations

        public static int addOne() {
            return ++id;
        } //Error:(19, 27) java: Illegal static declaration in inner class com.scb.smarttrans.utils.generator.Test.TestClass
  modifier 'static' is only allowed in constant variable declarations
    }
}

作者趁机小黑了一把Java Designer

Inner classes cannot declare static members other than compile-time constants. There would be an ambiguity about the meaning of “static.” Does it mean there is only one instance in the virtual machine? Or only one instance per outer object? The language designers decided not to tackle this issue.

文档注释有些不常见的用法:

/**
* An <code>Invoice</code> object represents an invoice with
* line items for each part of the order.
*
* @param byPercent the percentage by which to raise the salary (e.g., 10 means 10%)
* @author Fred Flintstone
* @author Barney Rubble
* @version 1.1
*          <p>
*          Raises the salary of an employee.
* @return the amount of the raise
* @see com.horstmann.corejava.Employee#raiseSalary(double)
* @see <a href="http://en.wikipedia.org/wiki/Leap_year">Leap years</a>.
* @see "Core Java for the Impatient"
* {@link package.class#feature label}
* <img src="doc-files/uml.png" alt="UML diagram"/>.
* @since version 1.7.1
* @deprecated Use <code>setVisible(true)</code> instead
*/



© 著作权归作者所有

小紅

小紅

粉丝 12
博文 43
码字总数 30598
作品 0
塘沽
程序员
私信 提问
新手入门必看的30个问题!!!!!!

看了好多资料,还是对一些基本问题比较头大。在论坛看完这个帖子,脑子里的基本概念有了。 1 什么是Java、Java2、JDK?JDK后面的1.3、1.4.2版本号又是怎么回事? 答:Java是一种通用的,并发的,...

精华之王
2009/04/11
257
0
centos7 yum安装java运行环境,初识hadoop

安装java运行环境 1.实验机相关信息: [root@node2 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@node2 ~]# uname -r 3.10.0-327.el7.x86_6 2.配置epel源,以y......

smile68
2018/04/21
0
0
freemaker中遍历List>

freemaker中遍历List> [{ java所定义的版本中不包括() =[{1=java2 EE}, {2=java2 ME}, {3=java2 SE}, {4=java2 HE}]}]...

陈炎辉
2016/08/09
1K
1
在线P2P金融理财项目,Spring+MVC开发,求兼职。

网站Java开发,开发框架:Spring+MVC,功能已经开发一部分,还剩极少的2-3个功能,需要做后期的调试及添加这2个小功能。一个为支付接口调试(接口变更);第二,加块固定收益产品功能。提供未...

老鼠dcy
2015/01/17
1K
8
什么是Java语言?java语言简介

Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的W...

阿秀a
2010/10/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何有效地计算JavaScript中对象的键/属性数量?

计算对象的键/属性数的最快方法是什么? 是否可以在不迭代对象的情况下执行此操作? 即不做 var count = 0;for (k in myobj) if (myobj.hasOwnProperty(k)) count++; (Firefox确实提供了一...

技术盛宴
38分钟前
4
0
百度网址安全中心拦截解除的办法分享

临近2019年底,客户的公司网站被百度网址安全中心拦截了,公司网站彻底打不开了,影响范围很大,于是通过朋友介绍找到我们SINE安全公司寻求帮忙解封,关于如何解除百度的安全拦截提示,下面就...

网站安全
50分钟前
7
0
Tomcat8源码分析-启动流程-start方法

上一篇:Tomcat8源码分析-启动流程-load方法 前面讲了启动流程中的Catalina.load,进一步调用绝大部分组建的init操作,主要完成对server.xml解析,并根据解析的结果结合设置的Rule(规则)构造...

特拉仔
58分钟前
7
0
Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍

Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍 轻拍标签栏中的About标签,进入关于页面,如图1.8和图1.9所示。它是对应用程序介绍的页面。 该页面源自Views文件夹中的AboutPage.x...

大学霸
今天
4
0
一步一步理解Impala query profile(一)

很多Impala用户不知道如何阅读Impala query profile来了解一个查询背后正在执行的操作,从而在此基础上对查询进行调优以充分发挥查询的性能。因此我想写一篇简单的文章来分享我的经验,并希望...

九州暮云
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部