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. sql中级语句

    创建联结 select n_title,n_content,t_name,t_memo from nrc_news,nrc_type where nrc_news.t_id=nrc_type.t_id ...

  2. VMware Conveter Standalone agent 安装时出现Error 29190错误的解决办法

    官网上面找的: if it helps anyone else, i found a workaround for my particular issue. on the source machine ...

  3. Oracle 中 decode 函数用法(字段A,B, C,A不为空则取A,否则取B,B为空则取C)

    –decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值) SELECT DECODE(TEMP.SCORE, ‘A’, ‘90-100’, ‘B’, ‘80-89’, ‘C’, ...

  4. 小记--------spark的Master的Application注册机制源码分析及Master的注册机制原理分析

    原理图解: Master类位置所在:spark-core_2.11-2.1.0.jar的org.apache.spark.deploy.master下的Master类   //截取了部分代码 //处理 ...

  5. 区间dp之 "石子合并"系列(未完结)

    A. 石子合并<1> 内存限制:128 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统评测 方式:文本比较   题目描述 有N堆石子排成一排(n<=100),现要将石 ...

  6. PAT A1011 World Cup Betting(20)

    AC代码 #include <cstdio> #include <algorithm> const int max_n = 3; using namespace std; /* ...

  7. GTID复制

    什么是GTID呢, 简而言之,就是全局事务ID(global transaction identifier ),最初由google实现,官方MySQL在5.6才加入该功能.GTID是事务提交时创建分配 ...

  8. Codeforces 1238F. The Maximum Subtree

    传送门 考虑构造一些区间使得树尽可能的 "大" 发现这棵树最多就是一条链加上链上出去的其他边连接的点 构造的区间大概长这样(图比较丑请谅解..$qwq$,图中每一个 "└ ...

  9. tensorflow零起点快速入门(3)

    创造并运行数据 创造了-3到3的32条数据,然后通过sess.run获取并显示输出数据. x=tf.linspace(-3.0,3.0,32) print(x) sess=tf.Session() r ...

  10. 怎样使用 vue-cli ( Vue 脚手架 )

    vue-cli 是 Vue 官方出品的快速构建单页应用的脚手架, 相当于 React 官方出品的 create-react-app , 下面演示 vue-cli 的 最 基本用法: 1. 全局安装 v ...