3.JAVA-方法重载,类的封装,构造/析构方法
2019-04-28 08:22:38来源:博客园 阅读 ()
1.方法重载
和C++的函数重载一样,主要是实现多个相同的函数名,但是参数表不同.
参数表不同主要有以下几种
- 1) 参数个数不同
- 2) 参数类型不同
- 3) 参数顺序不同
2.类和对象
类class
用来描述一个对象的结构,但是类不能直接使用,必须生成对象后才能使用
对象
通过类来生成的一个对象, 根据类生成的对象都具备相同的行为(class成员函数),但是属性(class成员变量)不一定相同.
3.对象引用分析
示例如下:
class People { String name; public void print(){ System.out.println("name:"+name); } } public class Test{ public static void main(String args[]){ People PeopleA = new People(); //在栈空间定义一个peopleA地址,然后通过new在堆空间创建一段内存,使PeopleA引用它 PeopleA.name ="小张"; People PeopleB = PeopleA; //在栈空间定义一个peopleB地址,然后使peopleB引用peopleA所指向的堆空间. PeopleB.print(); } }
打印如下:
可以看到通过引用,可以让两个对象指向同一块堆空间
4.类的封装
成员变量访问权限有以下4种:
- 在JAVA中,成员变量权限默认是为default (和C++不同,C++默认为private).
- 上图的同一包,表示在同一个目录中的类成员访问权限(在后续章节学习package包的时候会详细讲解)
5.构造方法
- 构造方法的作用,用来类对象实例化的时候,初始化其属性(成员变量)所准备的
- 如果类中没有定义构造方法,编译器会默认提供一个无参数的构造方法。
- 构造方法可以带参数,但是不能有任何返回类型的声明
- 构造方法不能定义static类型,因为构造方法是在运行期间才会去生成对象
- 构造方法支持多个方法重载
示例:
class People { public People(String name){ //构造方法 this.name = name; //类中有个隐藏的this属性,它永远指向当前对象 } public void print(){ System.out.println("name:"+name); } } public class Test{ public static void main(String args[]){ People PeopleA = new People("小张"); //调用 构造方法People(String name) 来初始化属性 PeopleA.print(); } }
6.析构方法
- 在java中,也有析构方法,不过和C++中类前面加~号的不一样。
- 在java中,如果需要自己写析构方法,则在类中定义一个void finalize()方法.
- finalize必须是protected权限的,因为java中的类,默认都是继承于Object,所以重写析构方法时,需要和Object的一致
PS:一般用不到它,因为java有自动内存回收机制
计数当前共有多少个对象示例,代码如下:
class Counter { private static int cnt = 0; public Counter() { cnt++; } public static void printCnt() { System.out.println("Cnt:"+cnt); } protected void finalize() { cnt--; } } public class Test{ public static void main(String args[]){ Counter cnt1 = new Counter(); Counter.printCnt(); Counter cnt2 = new Counter(); Counter.printCnt(); cnt2 = null; //将cnt2置为null try { System.gc(); //告诉回收站,有垃圾,需要清理内存 Thread.currentThread().sleep(1000); //休眠1000毫秒,因为需要给finalize()方法提供执行时间 Counter.printCnt(); //释放掉cnt2后,则输出1(因为还有cnt1存在) } catch(InterruptedException e) //sleep休眠可能产生InterruptedException异常.所以需要用try捕捉 { e.printStackTrace(); //打印回溯信息 } } }
运行打印:
原文链接:https://www.cnblogs.com/lifexy/p/10779351.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:入门级 JAVA反射机制
下一篇:SpringMVC框架
- 类的继承,方法重新中修饰符如何定义 2020-06-10
- java里面main方法中的String[]args 2020-06-07
- 错误: 在类中找不到 main 方法, 请将 main 方法定义为: & 2020-06-06
- 学习笔记之方法引用 2020-06-06
- Java连载120-反射机制获取构造方法和父类、父接口 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash