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).
  • 上图的同一包,表示在同一个目录中的类成员访问权限 

包的定义以及使用参考: 13.JAVA-包package、import使用

接下来我们来看看default区别

定义common.demo.Test类:

package common.demo ;  //指定生成的class文件位于common/demo/目录下
public class Test
{
static int i=10; //默认为default权限
public static void main(String args[]){
System.out.println("Hello World");
}
}

定义common.demo.CallTest类,此类和common.demo.Test类位于同一包:

package common.demo ;  //指定生成的class文件位于common/demo/目录下
import common.demo.*; //导入common.demo包里的所有类 public class CallTest
{
public static void main(String args[]){
System.out.println("i:"+Test.i); //打印静态属性i
}
}

运行打印:

然后我们屏蔽" package common.demo ;"后,则CallTest类不在common.demo包里了,所以访问Test.i将会报错,编译后如下图所示:

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(); //打印回溯信息
}
}
}

运行打印:

下章学习:4.JAVA-数组、String详解

3.JAVA-方法重载,类的封装,构造/析构方法的更多相关文章

  1. Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理

    Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理 1. 重载包括:普通方法的重载和构造方法的重载 1 1.1. 横向重载”和“纵向重载”1 1.2. 方法签名通过  方法名称,参数 ...

  2. php课程 12-38 php的类的构造方法和析构方法怎么写

    php课程 12-38 php的类的构造方法和析构方法怎么写 一.总结 一句话总结:a.__construct(参数){},__destruct(){},b.如果类中的一个方法和类名相同,则该方法为构 ...

  3. 第8.18节 Python类中内置析构方法__del__

    一. 引言 基本上所有支持OOP设计的语言都支持析构方法(也称析构函数),析构方法都是在对象生命周期结束时调用,一般用来实施实例相关生命周期内访问数据的扫尾工作,包括关闭文件.释放内存.输出日志.清理 ...

  4. Java面向对象(类、封装)

    面向对象 今日内容介绍 u 面向对象 u 封装 第1章 面向对象 1.1 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. l 面向过程的程序设计方式,是遇到一 ...

  5. java基础(9):类、封装

    1. 面向对象 1.1 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. 面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程. 例 ...

  6. java中关于类的封装与继承,this、super关键字的使用

    原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5454849.html. this关键字: this代表当前对象,它有以下几种用途: 1.本类 ...

  7. java.util.Stack类中 empty() 和 isEmpty() 方法的作用

    最近在学习算法和数据结构,用到Java里的Stack类,但程序运行结果一直和我预料的不一样,网上也没查清楚,最后查了API,才搞明白. java.util.Stack继承类 java.util.Vec ...

  8. Python类总结-封装(私有属性,方法)

    封装基础 广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装 只让自己的对象能调用自己类中的方法 狭义上的封装-面向对象三大特性之一(私有变量,用公有的方法封装私有属性,方法叫封装) 把 ...

  9. Java中Object类常用的12个方法,你用过几个?

    前言 Java 中的 Object 方法在面试中是一个非常高频的点,毕竟 Object 是所有类的“老祖宗”.Java 中所有的类都有一个共同的祖先 Object 类,子类都会继承所有 Object ...

随机推荐

  1. java(一、概念和开发工具)

    Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式 ...

  2. C# 插入、删除Excel分页符

    引言 对Excel表格设置分页对我们预览.打印文档时是很方便的,特别是一些包含很多复杂数据的.不规则的表格,为保证打印时每一页的排版美观性或者数据的前后连接的完整性,此时的分页符就发挥了极大的作用.因 ...

  3. zabbix监控mysql性能

    使用zabbix监控mysql的三种方式 1.只是安装agent 2.启用模板监控 3.启用自定义脚本的模板监控 zabbix中默认有mysql的监控模板.默认已经在zabbix2.2及以上的版本中. ...

  4. Linux时间子系统之四:定时器的引擎:clock_event_device

    早期的内核版本中,进程的调度基于一个称之为tick的时钟滴答,通常使用时钟中断来定时地产生tick信号,每次tick定时中断都会进行进程的统计和调度,并对tick进行计数,记录在一个jiffies变量 ...

  5. Linux时间子系统之五:低分辨率定时器的原理和实现

    专题文档汇总目录 Notes:低精度timer在内核中的数据结构以及API接口:低精度timer精巧高效的分组,使用cascade进行定时器移位,组内Timer FIFO:低精度Timer的初始化流程 ...

  6. Jenkins 的安装部署

    一.Windows环境中安装Jenkins 原文:http://www.cnblogs.com/yangxia-test/p/4354328.html 在最简单的情况下,Jenkins 只需要两个步骤 ...

  7. 『自我の感悟』alt or title?

    img标签中alt和title属性的正确使用:在的img标签有两个属性分别为alt和title,对于很多初学者而言对这两个属性的正确使用都还抱有迷惑,当然这其中一部分原因也是ie浏览器所导致的.正确的 ...

  8. 理解主从设备模式(Master-Slave)

    前言 在给定上下文的软件体系结构中,为了解决某些经常出现的问题而形成的通用且可重用的解决方案称之为架构模式,而常见的体系架构模式主要有以下十种 分层模式 客户端-服务器模式 主从设备模式 管道-过滤器 ...

  9. CentOS 7.2 关闭防火墙

    CentOS7 的防火墙配置跟以前版本有很大区别,CentOS7这个版本的防火墙默认使用的是firewall,与之前的版本使用iptables不一样 1.关闭防火墙: systemctl stop f ...

  10. 用spark导入数据到hbase

    集群环境:一主三从,Spark为Spark On YARN模式 Spark导入hbase数据方式有多种 1.少量数据:直接调用hbase API的单条或者批量方法就可以 2.导入的数据量比较大,那就需 ...