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. 源码分析Session的台前幕后(Asp .Net MVC5)

    在这篇文章里,我们从源代码的角度重点分析Session的创建.缓存.销毁.管理. 通常我们说的Session指的是在控制器中使用的Session字段,该字段的类型是HttpSessionState.可 ...

  2. Manjaro 安装后的配置

    1. 将本地数据包与远程数据包同步 sudo pacman -Syy 默认manjaro是没有同步数据包的,也就是说,这个时候你执行pacman -S pack_name 会报数据包找不到的错误(wa ...

  3. 闲聊 “今日头条Go建千亿级微服务的实践”

      背景    今天跟同事偶然看到<今日头条Go建千亿级微服务的实践>文章,故做了一些探讨,与大家分享下,也欢迎大家多多共同探讨!.     其他资料:   如何理解 Golang 中“不 ...

  4. 不使用JavaScript实现菜单的打开和关闭

    我在写有菜单栏的网页时,基本都会用响应式设计来适配移动端,例如把不重要的菜单选项隐藏,或者创建一个菜单按钮来控制的菜单的打开和关闭之类的.而我之前一直是使用JavaScript来实现菜单的打开和关闭的 ...

  5. C/C++ 数据结构之算法

    数据结构中的排序算法. 排序算法的相关知识: (1)排序的概念:所谓排序就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来. (2)稳定的排序方法:在待排序的文件中,若存在多个关键字相同的 ...

  6. dup和dup2应用实例(dup跟APUE有出入,close+dup=dup2?)

    dup/dup2函数 有时我们希望把标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接. dup()与dup2()能对输入文件描述符进行重定向. 函数原型如下: dup函数创建一个新的文件描 ...

  7. SSM-SpringMVC-03:SpringMVC执行流程一张有意思的图

     ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 上次的图也不全,这次的图也不是完整版,但是多了一个拦截器,我觉得挺有意思的,我就放上来了 他Handler ...

  8. mybatis通用mapper的使用

    项目中持久层封装了两套,一个hibernate,一个是mybatis.hibernate中封装了一些通用的方法,但是mybatis中没有,基于这个需求开始使用mybatis的通用mapper.     ...

  9. python实现简体中文和繁体相互转换

    1. opencc-python 如果目录上的链接被屏蔽了,请手动复制 https://pypi.python.org/pypi/opencc-python/ 首先介绍opencc的python实现库 ...

  10. Python中使用MongoEngine3

    最近重新拾起Django,但是Django并不支持mongodb,但是有一个模块mongoengine可以实现Django Model类似的封装.但是mongoengine的中文文档几乎没有,有的也是 ...