java 类方法和实例方法

类方法

用static修饰的方法。

由于类方法是属于整个类的,所以类方法的方法体中不能有与类的对象有关的内容。
即类方法体有如下限制:
1.类方法中不能引用对象变量;
2.类方法中不能调用类的对象方法;
3.在类方法中不能调使用super,this关键字;
4.类方法不能被覆盖。

实例方法

当一个类创建了一个对象后,这个对象就可以调用该类的方法(对象方法)。

  1.实例方法中可以引用对象变量,也可以引用类变量;
2.实例方法中可以调用类方法;
3.对象方法中可以使用super,this关键字。

区别和注意事项

区别:类方法可以通过类名调用,实例方法不能通过类名调用
当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址
当该类创建对象后,类中的实例方法才分配入口地址,
从而实例方法可以被类创建的任何对象调用执行。 类方法在该类被加载到内存时,就分配了相应的入口地址。
从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。
类方法的入口地址直到程序退出时才被取消。 注意:
当我们创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址。
也就是说,方法的入口地址被所有的对象共享,当所有的对象都不存在时,方法的入口地址才被取消。 在Java语言中,类中的类方法不可以操作实例变量,也不可以调用实例方法,
这是因为在类创建对象之前,实例成员变量还没有分配内存,而且实例方法也没有入口地址。

在java中静态方法就是类方法

import java.util.*;

public class TestStatic {
public static void main(String[]args){
System.out.println(S.getStatic());//使用类名加前缀访问静态方法
S s=new S();
System.out.println(s.getStatic());//使用实例化对象名访问静态方法
System.out.println(s.get());
}
public static class S
{
private static int a;
private int t=0; //静态初始器:由static和{}组成,只在类装载的时候(第一次使用类的时候)执行一次,往往用来初始化静态变量。
static{
a=10;
} //静态方法只能访问静态数据成员
public static int getStatic()
{
return a;
} public int getT()
{
return t;
} //非静态方法可以访问静态方法和非静态方法
public int get()
{
getT();
getStatic();
t=a;//非静态方法可以访问非静态数据成员和静态数据成员
return t;
}
}
}

python 类方法 实例方法 静态方法

在python用到两个装饰器 @classmethod和@staticmethod用来表示类方法和静态方法

classmethod:它的用法是定义操作类,而不是操作实例的方法。classmethod改变了调用方法的方式,因此此类低一个参数是类本身(cls),而不是实例(self)。classmethod方法最常见的用途是定义定义备选的构造方法

frombytes的return 使用参数cls构建了新实例 cls(*memv)。按照约定来类方法的第一个参数应该是cls但是python并不介意怎么命名

staticmethod装饰器也会改变调用方式,但是第一个参数不是特殊的值。其实静态方法就是普通的函数,只是碰巧在类定义体内部,而不是定义在模块层。

class Demo:
@classmethod
def klassmethod(cls):
print("这是classmethod")
pass
@staticmethod
def statmethod():
print("这是statmethod")
pass Demo.klassmethod()
Demo.statmethod()

这是classmethod
这是statmethod

class Demo:
@classmethod
def klassmethod(*args):
return args
@staticmethod
def statmethod(*args):
return args print(Demo.klassmethod())
print(Demo.statmethod()) # (<class '__main__.Demo'>,)
# () print(Demo.klassmethod(12))
print(Demo.statmethod(12))
# (<class '__main__.Demo'>, 12)
# (12,)

python的方法VSjava方法的更多相关文章

  1. python 类属性与方法

    Python 类属性与方法 标签(空格分隔): Python Python的访问限制 Python支持面向对象,其对属性的权限控制通过属性名来实现,如果一个属性有双下划线开头(__),该属性就无法被外 ...

  2. Python执行系统命令的方法 os.system(),os.popen(),commands

    os.popen():用python执行shell的命令,并且返回了结果,括号中是写shell命令 Python执行系统命令的方法: https://my.oschina.net/renwofei42 ...

  3. python 调用 shell 命令方法

    python调用shell命令方法 1.os.system(cmd) 缺点:不能获取返回值 2.os.popen(cmd) 要得到命令的输出内容,只需再调用下read()或readlines()等   ...

  4. python 面向对象、特殊方法与多范式、对象的属性及与其他语言的差异

    1.python 面向对象 文章内容摘自:http://www.cnblogs.com/vamei/archive/2012/06/02/2532018.html   1.__init__() 创建对 ...

  5. python 字典内置方法get应用

    python字典内置方法get应用,如果我们需要获取字典值的话,我们有两种方法,一个是通过dict['key'],另外一个就是dict.get()方法. 今天给大家分享的就是字典的get()方法. 这 ...

  6. Python中的 isdigit()方法

    Python isdigit()方法 sdigit()方法就是检测字符串是否只有数字组成, 如果字符串中是只有数字组成,则返回true, 如果字符串中有其他字符,则返回false. 语法格式是:  s ...

  7. [转] python程序的调试方法

    qi09 原文 python程序的调试方法 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序 源码例子 例如,有模拟税收计算的程序: #!/usr/bin/python de ...

  8. Python prettytable的使用方法

    Python prettytable的使用方法 prettytable可以整齐地输出一个表格信息: +-----------+------+------------+----------------- ...

  9. Python多线程及其使用方法

    [Python之旅]第六篇(三):Python多线程及其使用方法   python 多线程 多线程使用方法 GIL 摘要: 1.Python中的多线程     执行一个程序,即在操作系统中开启了一个进 ...

随机推荐

  1. linux ctrl 快捷键

    ctrl+a: 光标跳到行首. ctrl+b: 光标左移一个字母. ctrl+c: 杀死当前进程. ctrl+d: 删除光标后一个字符或exit.logout. ctrl+e: 光标移到行尾. ctr ...

  2. Spring IOC的底层实现原理

     PS:模块之间的相互依赖叫做耦合 传统方式的开发 UserService us=new UserService(); || v 面向接口编程 UserService us=new UserServi ...

  3. 剑指offer4:重建二叉树(后序遍历)

    1. 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4 ...

  4. 剑指offer2:C++实现的替换空格(字符中的空格替换为“%20”)

    1. 题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 2. 思路和方法: 2.1 ...

  5. 取整math函数

    floor(a); ceil(a);  

  6. php 数组相关方法的一些实际妙用

    一.php数组合并两个数组(一个数组做键名,另一个做值) 有两个方法 1.循环 $arry_a = array(0, 1, 2); $arry_b = array('dongsir','董先生','董 ...

  7. python中全局global和局部nonlocal命名空间

    python中全局global和局部nonlocal命名空间 局部名称空间对全局名称空间的变量可以引用,但是无法改变. count = 1 def func1(): count = 2 print(c ...

  8. 运用加密技术保护Java源代码(转)

    出处:运用加密技术保护Java源代码 为什么要加密? 对于传统的C或C++之类的语言来说,要在Web上保护源代码是很容易的,只要不发布它就可以.遗憾的是,Java程序的源代码很容易被别人偷看.只要有一 ...

  9. Docker入门(一):安装

    一. 安装docker 1. 删除已安装的docker yum remove docker \ docker-client \ docker-client-latest \ docker-common ...

  10. 搭建kafka集群

    1:确认zookeeper集群安装正确,防火墙关闭 2:下载kafka安装文件 cd /usr/local/mydown wget http://mirror.bit.edu.cn/apache/ka ...