JAVA类(上)
|
package test; public class staticAccess { public int age; public staticAccess grow() { age++; return this; } public static void info() { System.out.println("Simple info way"); } public static void main(String[] args) { staticAccess rt=new staticAccess(); rt.age=10; rt.grow() .grow() .grow(); System.out.println("rt的age Field值是:"+rt.age); info(); } } |
在上面的程序中可以看出,如果在某个方法中把this作为返回值,则可以多次连续调用同一个方法,从而使得代码更加简洁。但是,这种把this作为返回值的方法可能造成实际意义的模糊,例如上面的grow方法,用于表示对象的生长,即age Field的值加1,实际上不应该有返回值。
Java类中的方法
在JAVA中,方法的参数方法只有一种:值传递。
JAVA形参个数可变的方法
在形参的类型后增加三点(…)则表明该形参可以接受多个参数值,多个参数值被当成数组传入。
实际就是数组。
因此,用数组来代替也是可以的。
|
package test; public class staticAccess { public static void test(int a,String... books) { for(String tmp : books) System.out.println(tmp); System.out.println(a); } public static void main(String[] args) { test(5,"疯狂Java","轻量级JAVA"); } } |
|
public static void test(int a,String... books)也可改为: public static void test(int a,String[] books) |
注意:
个数可变的形参只能处于形参列表的最后。即,一个方法中最多只有一个长度可变的开参。
|
package test; public class test { public static void main(String[] agv) { System.out.println("Person's eyeNum class effective:"+Person.eyeNum); Person p=new Person(); System.out.println("Person's Field 值是:"+p.name+"Person's eyeNum Field 值是:"+p.eyeNum); p.name="孙悟空"; p.eyeNum=2; System.out.println("Person's Field 值是:"+p.name+"Person's eyeNum Field 值是:"+p.eyeNum); System.out.println("hello world Java"); } } class Person { public String name; public static int eyeNum; } |
运行结果:

类中定义的static变量,与C++类中定义的不同。还比JAVA多了一步:
与C++中的声明开辟内存空间相比:
类型 类名::变量名=初值;
主要是:成员变量无须显式初始化,只要为一个类定义Field或实例Field,系统就会在这个类的准备阶段或创建该类的实例时进行默认初始化,成员变量默认初始化时的赋值规则与数组动态初始化时数组元素的赋值规则完全相同。
与C++中的静态变量有一个共同之处:
无论这个类的实例有多少个,静态变量的个数只取决于类中定义的静态变量个数.
概念:栈内存中的变量无须系统垃圾回收,往往随着方法或代码块的运行的结束。
注意:
如果一个JAVA源文件里定义的所有类都没有使用public修饰,则这个Java源文件的文件名可以是一切合法的文件名;但如果一个Java源文件里定义了一个public修饰的类,则这个源文件必须与public修饰的类的类名相同。
访问权限:与C++相比,多了一个default。默认是它,称为包访问权限。
package、import、import static
在C++中,与package有相同作用的是namespace。"package"与"namespace"用法不相同.
package packageName;
意义:此文件中的所有东西都是packageName的。有且只有一个。
并且,位于包中的类,也必须有与包同名层次相同的目录结构。
import作用:省略包名
import static 作用:省略写类名
例1:
|
package lee; public class test { public static void main(String[] agv) { lee.sub.Apple a=new lee.sub.Apple(); a.out(); System.out.println("hello world Java"); } } |
|
package lee.sub; public class Apple { public void out() { System.out.println("hello world lee.sub"); } } |
例二:
|
package lee; import static java.lang.System.*; public class test { public static void main(String[] agave) { out.println("Person's eyeNum class effective:"+Person.eyeNum); Person p=new Person(); out.println("Person's Field 值是:"+p.name+"Person's eyeNum Field 值是:"+p.eyeNum); p.name="孙悟空"; p.eyeNum=2; out.println("Person's Fied 值是:"+p.name+"Person's eyeNum Field 值是:"+p.eyeNum); out.println("hello world Java"); } } class Person { public String name; public static int eyeNum; } |
Java类的继承
第一个不同点:
与C++相比:Java使用了extends关键字来继承父类。
C++只用了两个点:
第二个不同点:
Java语言摒弃了C++中的多继承特征,即每个类最多只能有一个直接父类。
Java重新定义父类方法:重新定义父类方法
在C++的重新定义父类方法 解决方法是 虚函数
在Java中,它的解决方案是规则:两同两小一大。
两同:方法名相同,形参列表相同。
两小:子类的方法返回值类型比父类方法返回值类型更小或相等。
子类的方法声明抛出的异常类应比父类方法声明抛出的异常类小或相等。
一大:子类方法的访问权限应比父类方法的访问权限更大或相等。
super限定
在子类中被重写后,还需调用父类的方法。有两种方法:
父类名为主调 或 用super为主调 来调用父类被重写的方法。
Super是Java的关键字,是用于限定该对象调用它从父类继承得到的Field或方法。
正如this不能出现在static修饰的方法中一样;super也是如此。

JAVA类(上)的更多相关文章
- 在Eclipse中设置Java类上面的注释(包含作者、日期等)
希望在Eclipse中,让Java类上面的注释像下面这样,改如何设置呢? 在Eclipse中,点击菜单中的Window-->Preferences,打开如下窗口:
- Eclipse或MyEclipse没有在java类文件上显示Spring图标的问题
Eclipse或MyEclipse没有在java类文件上显示接口图标的问题解决办法: 前: 后:
- java面试题0004-在一个类上是否可以用abstract和final同时加以修饰?
我们先用提干两个修饰词中的任意一个创建一个类 package components.javaTest.day4_20200910; /** * Question004: * java面试题0004-在 ...
- [Java]类的生命周期(上)类的加载和连接[转]
本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 类加载器,顾名思义,类加载器(class loader)用来加载 Java 类到 Java ...
- 小兔Java教程 - 三分钟学会Java文件上传
今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...
- jvm系列(一):java类的加载机制
java类的加载机制 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装 ...
- kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件
该kettle插件功能类似kettle现有的定义java类插件,自定java类插件主要是支持在kettle中直接编写java代码实现自定特殊功能,而本控件主要是将自定义代码转移到jar包,就是说自定义 ...
- 【Java心得总结五】Java容器上——容器初探
在数学中我们有集合的概念,所谓的一个集合,就是将数个对象归类而分成为一个或数个形态各异的大小整体. 一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集.构成集合的事物或对象称作元素或是成 ...
- 【Java心得总结三】Java泛型上——初识泛型
一.函数参数与泛型比较 泛型(generics),从字面的意思理解就是泛化的类型,即参数化类型.泛型的作用是什么,这里与函数参数做一个比较: 无参数的函数: public int[] newIntAr ...
随机推荐
- ios7以上自定义导航栏标题的字体大小及颜色的方法
自定义导航栏的字体和颜色,只需要自定义一个lable,然后将lable添加到导航栏的titleview中就可以了 代码如下 UILabel *label = [[UILabel alloc] init ...
- (转)内核线程对象--Event事件对象
在所有的内核对象中,事件内核对象是个最基本的对象.事件能够通知一个操作已经完成. 客户机和一个服务器,它们之间需要互相进行通信例子(vs2008 ) 事件内核对象的组成 一个使用计数(与所有内核对象一 ...
- UltraEdit中java代码换行问题
在很多开发中始用的文本编辑器中UltraEdit是非常主流的种了,但是,随着版本的更新,最近几版中出现了以下问题 问题描述:当用UltraEd(14.0版本)编写Java代码时,当遇到{}换行时,希望 ...
- js的初始化
在项目中遇到了类似于这样的js, myinit.js文件: var wyl_01 = { tip : function(msg){ alert('i am a tip,msg:'+msg); }, t ...
- ThinkPHP第八天(U函数放置在外部JS不会被解析,错误界面定制,错误信息变量)
1.JS外部文件中U函数不会被解析,内部JS代码可以被解析. 2.halt. _404可以定制错误模板,在配置文件中配置 TMPL_EXCEPTION_FILE =>'./Public/Tpl/ ...
- openrisc 之 Wishbone总线学习笔记——总线互联
一,总线命名规范 1,wishbone总线接口信号都是高电平有限 2,wishbone接口信号都是以 _i ,或者是 _o 结束.i表示输入, o表示输出. ()表示该信号为总线信号,总线位宽可以大于 ...
- hibernate Criteria查询 2.3
Criteria对象提供了一种面向对象的方式查询数据库.Criteria对象需要使用Session对象来获得一个Criteria对象表示对一个持久化类的查询 查询所有 Session session ...
- KMP算法与一个经典概率问题
考虑一个事件,它有两种概率均等的结果.比如掷硬币,出现正面和反面的机会是相等的.现在我们希望知道,如果我不断抛掷硬币,需要多长时间才能得到一个特定的序列. 序列一:反面.正面.反面序列二:反面.正面. ...
- CloudStack 物理网络架构
原文地址:http://www.shapeblue.com/cloudstack/understanding-cloudstacks-physical-networking-architecture/ ...
- Ajax学习(三)——XMLHttpRequest对象的五步使使用方法
Ajax的核心技术是XMLHttpRequest对象,它能够在不向server提交整个页面的情况下.实现局部更新网页.通过这个对象,Ajax能够像桌面应用程序那样仅仅与server进行数据层的 ...