JAVA里类方法和实例方法区别

我们已经知道类体中的方法分为实例方法和类方法两种,用static修饰的是类方法。

二者有什么区别呢?当一个类创建了一个对象后,这个对象就可以调用该类的方法。

当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,当该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行。

需要注意的是,当我们创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址,也就是说,方法的入口地址被所有的对象共享,当所有的对象都不存在时,方法的入口地址才被取消。

对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址。

从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。

类方法的入口地址直到程序退出才被取消。

类方法在类的字节码加载到内存时就分配了入口地址,因此,Java语言允许通过类名直接调用类方法,而实例方法不能通过类名调用。

在讲述类的时候我们强调过,在Java语言中,类中的类方法不可以操作实例变量,也不可以调用实例方法,这是因为在类创建对象之前,实例成员变量还没有分配内存,而且实例方法也没有入口地址。

class A
{int x,y;
static float f(int a){}
float g(int x1,int x2){}
}
class B
{public static void main(String args[])
{A a1=new A();
A.f(2,3);//合法。

a1.f(2,4);//合法。

a1.g(2,5);//合法。

A.g(3,2);//非法。

}
}。

合集下载

成员变量、实例变量、类变量和局部变量区别

成员变量、实例变量、类变量和局部变量区别

成员变量、实例变量、类变量和局部变量区别
⼀、成员变量、实例变量、类变量和局部变量区别
1::变量电议部分所定义的变量被称为类的。

也就是说在整个类中都有效,类中的⽅法可以直接调⽤成员变量使⽤。

然⽽成员变量⼜分为实例成员变量(简称)和类变量(简称)
1.1::就是我们正常定义的变量,⽐如int a; a就是
1.2::定义前要加上Static ⽐如static int a;这个a就是静态变量,当在变量定义前加上static的时候就代表着该变量在使⽤的时候有⼀处改变则各个⽤到这个变量的地⽅,该变量都发⽣改变,就是所谓的⼀处改变处处改变,静态变量的⽣存期为整个,但是只能在定义该变量的函数内使⽤该变量。

退出该函数后,尽管该变量还继续存在,但不能使⽤它。

2::在⽅法体中定义的变量和⽅法的参数称。

也就是说只在定义它的⽅法内有效,⽽⽅法外部的其他⽅法⽆法使⽤局部变量。

当局部变量名字与成员变量名字相同,则成员变量被隐藏,即这个成员变量在这个⽅法内暂时失效,以局部变量定义的为准。

⼆.长提到的⽅法有,类⽅法,实例⽅法。

就是名字和类名相同,⽽且没有类型。

类⽅法和实例⽅法的区别就是类⽅法前⾯有static修饰,⽽实例⽅法没有static修饰。

实例⽅法既能对类变量操作,也能对实例变量操作,⽽类⽅法只能对类变量进⾏操作。

类,对象,实例

类,对象,实例

这样子同你说吧。

类,他就是讲的一个种类。

不懂?OK,比如人类。

这个“人”他们都有思维,都有眼睛鼻子等等共同的特征。

他就叫做一个类。

叫做“人类”。

还有“植物类”,这个“植物”它们都有根,叶子等等共同的特征。

它就叫做一个类。

“张三”是个人,他只是人类中的一个特例,我们就把他叫做一个具体的对象。

也就是C#中的对象。

一句话说完了,类都是一群对象的集合,里面包含了N多的对象。

而对象只是类的一个特例。

比如学校里有1000个学生,然后校长在广播里面喊:请张三同学到校长室来一下。

这时候“李四,王五,赵六”等等听到广播,就知道,校长叫的是张三,而不是自己。

所以张三李四王五这些都是这个学生类的一些特例(也就是一个个对象),他们除了有眼睛鼻子思维这些共同的特征之外,还有其他不同的地方,例如名字就是不同的。

这样子比较通俗了吧。

实例就是“张三”这个名字。

比如Student stu = new Student();stu就是一个实例。

这个stu他就已经被实例化了。

表示他是这个Student类里的一个对象。

new他是为了把他实例化,让电脑内存知道,现在已经存在一个这样的对象了,然后你就可以使用这个对象了。

我想大家都吃过月饼,不知可有人知道月饼是怎么做出来的。

做月饼是用模具的,把配好的月饼陷放进模具里一磕,拿出来就是一个月饼了。

做铁杯子是的要用模具的,把熔化的铁的液体放在铁杯的模具里,冷却后,出来就是铁杯子了。

现在这个模具就有了类别的吧,做月饼的叫做月饼类模具,做铁杯的叫做铁杯类模具,程序中的类就和这个类是一个意思的。

人类,植物类,猪类,狗类,猫类,猴子类。

都和程序中的类是一个意思。

可见,一个类就是一种东西,它和其他类的东西是不一样的,人类和猪类是一样的吗?说这类有何意义呢?大家都知道月饼类模具是做月饼的,这类的模具就是做月饼的,把原料放进模具不就能出来月饼吗?出来这个月饼,我们叫什么?就叫月饼!更高度点叫什么呢?叫对象!记住啊,把月饼的料放进月饼的模具里,能做出来月饼,这个月饼就是对象!而把料放进模具里,到做出来这一个过程,我们就称为:对象的实例化!至此我们要搞清三个问题:一,类:就是那个月饼的模具二,对象:就是那个月饼三,对象的实例化:就是把料放进模具里到成品出来这一过程那么这个类能吃吗?不能,因为它是模具啊,只有当实例化后我们才能吃这个类产生出来的对象也就是月饼。

Java面向对象基础总结

Java面向对象基础总结

面向对象基础总结篇一、几个基本概念1、面向对象的编程和面向过程编程参考lesson4中的面向过程与面向对象介绍.docx结构化程序设计:主张按功能分析系统需求,主要原则为:自顶向下、逐步求精、模块化、结构化。

一般步骤:结构化分析(SA)→结构化设计(SD)→结构化编程(SP)结构化程序设计里最小的程序单元是函数结构化设计需要采用自顶向下的设计方式,在设计阶段就需要考虑每个模块应该分解成哪些子模块,每个子模块又分解成哪些更小的模块……以此类推,直至将模块细化成一个个函数。

面向对象程序设计:使用类、对象、继承、封装、消息等基本概念进行程序设计。

它以现实世界中客观存在的事物(对象)出发来构造软件系统,并在构造中尽可能使用人类的自然思维方式,强调直接以现实世界中的事物(对象)为中心来思考,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的类,作为系统的基本构成单元,这使得软件系统可以直接反映客观世界,并保持客观世界中事物及其相互关系的本来面貌。

2、类和对象:对象是类的实例,类是对象的模板3、成员变量和局部变量成员变量在整个类的内部都有效。

局部变量只在方法内部有效。

二、方法1、方法的所属性2、方法的组成:方法的返回值类型和参数的名字不参与比较,也就是说如果两个方法的名字相同,即使返回值类型或者是参数的名字不同,也不能称为方法的重载,必须是参数个数或者是参数类型不同。

3、方法和重载和重写方法重载是指一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。

方法的返回值类型和参数的名字不参与比较,也就是说如果两个方法的名字相同,即使返回值类型或者是参数的名字不同,也不能称为方法的重载,必须是参数个数或者是参数类型不同。

三、构造方法(构造器)1、特点:与类名相同并且没有任何显示的返回类型。

2、作用:完成对象的初始化3、何时被调用:在创建对象的时候被自动调用(new )4、构造方法的重载:构造方法可以重载是指一个类中有多个方法有相同的名字但这些方法的参数必须不同即或者是参数的个数不同或者是参数的类型不同5、父类和子类的构造方法先创建父类的构造方法,在创建子类对象的时候,子类会先主动调用父类的无参数的构造方法,再调用自身的构造方法,若父类构造方法有参数,子类必须使用super。

实例的方法和类的方法的区别

实例的方法和类的方法的区别

实例的⽅法和类的⽅法的区别
⼀、什么是类:
在Java中类是⽤于描述客观世界⾥某⼀对象的共同特征,是⼀组相关的属性和⾏为的集合。

⼆、什么是对象(实例):
对象也被称为实例,是该类事物的具体体现。

三、类⽅法:
使⽤static修饰的⽅法,是属于当前整个类的,⽽不是属于某个实例的,只能处理static域或调⽤static⽅法。

四、实例⽅法:
属于对象的⽅法,有对象来调⽤。

五、
⼀个类中的⽅法可以互相调⽤。

但要注意:实例⽅法可以调⽤该类中的其他⽅法,例如,sum()可以调⽤max()和min()。

类⽅法只能调⽤其他类⽅法,不能调⽤实例⽅法。

例如,getMaxSqrt()只能调⽤max()⽽不能调⽤min()。

当类⽂件加载到内存时,实例⽅法不会被分配内存空间,只有在对象创建之后才会分配。

⽽类⽅法在该类被加载到内存时就分配了相应的内存空间。

实例⽅法既能对类变量操作也能对实例变量操作。

类⽅法只能访问其他static⽅法。

Java实验报告(w5-w6)

Java实验报告(w5-w6)

师大福清分校计算机实验报告〔W5,W6〕院/系:数学与计算机科学系课程名称:Java面向对象程序设计日期:测试报告结果分析注意非法字符2class Letter{char start = 'A';void printLetter(){for(int i = 0;i<25;i++){char c = '0';c = (char)(i+start);System.out.printf("%c ",c);if(i%7==0&&i!=0) System.out.printf("\n");}}}class Letter2{public static void main(String[] args){Letter p = new Letter();p.printLetter();}}3.import java.util.*;public class DengCha3{public static void main(String[] args){DengCha shulie = new DengCha();shulie.setStart(6);shulie.setD(7);System.out.printf("首项为6,公差为7的等差数列的前5项和为%d",shulie.getSum(5));}}class DengCha{int s;int d;int sum ;DengCha(){}void setStart(int s){this.s = s;}void setD(int d){this.d = d;}int getSum(int n){sum = n*s+n*(n-1)*d/2;return sum;}}4.import ng.Math;class SquareEquation{double a;double b;static double c;double x1,x2;SquareEquation(double a,double b,double c){this.a = a;this.b = b;SquareEquation.c = c;}void getRoots(){double temp = b*b-4*a*c;if(temp<0) System.out.println("方程无根\n");else if(temp != 0){x1 = (-b+Math.sqrt(temp))/(2.0*a);x2 = (-b-Math.sqrt(temp))/(2.0*a);System.out.printf("方程有两个不同的实根其中x1=%.2f,x2=%.2f\n",x1,x2);}else{x1 = -b/(2.0*a);System.out.printf("方程有两个一样的实根,值为%f\n",x1);}}}public class SquareEquation4{public static void main(String[] args){SquareEquation yi = new SquareEquation(1,2,3);System.out.println("方程式一为x*x+2x+3=0");yi.getRoots();SquareEquation er = new SquareEquation(4,10,1);System.out.println("方程式二为4x^2+10x=0");er.getRoots();System.out.printf("方程一的常数项为%.2f,方程二的常数项为%.2f",yi.c,er.c);}}5.public class Shiyan_5{public static void main(String args[]){Complex x = new Complex(4.0,2.1);Complex y = new Complex(2.5,5.0);Complex t1 = new Complex( );Complex t2 = new Complex( );t1 =x.add(y);t2 =x.sub(y);t1.print( );t2.print( );}}class Complex{double a;double b;Complex(){}Complex(double a1,double b1){a =a1;b=b1;} Complex add(Complex x){double a1,a2;a1 = a + x.a;a2 = b + x.b;return new Complex(a1,a2);}Complex sub(Complex x){double a1,a2;a1 = a - x.a;a2 = b - x.b;return new Complex(a1,a2);}void print(){System.out.printf("实部%.2f,虚部%.2f\n",a,b);}}说明:系统实施:〔程序流程图、重要过程说明、参数设置、变量的说明等〕测试报告:〔调试输入数据、结果数据或状态。

浅析Java中的静态字段与实例字段、静态方法与非静态方法、以及Java继承中父类子类构造方。。。

浅析Java中的静态字段与实例字段、静态方法与非静态方法、以及Java继承中父类子类构造方。。。

浅析Java中的静态字段与实例字段、静态⽅法与⾮静态⽅法、以及Java继承中⽗类⼦类构造⽅。

⼀、静态字段与实例字段 在⼀个class中定义的字段,我们称之为实例字段。

实例字段的特点是,每个实例都有独⽴的字段,各个实例的同名字段互不影响。

还有⼀种字段,是⽤static修饰的字段,称为静态字段:static field。

实例字段在每个实例中都有⾃⼰的⼀个独⽴“空间”,但是静态字段只有⼀个共享“空间”,所有实例都会共享该字段。

public class Main {public static void main(String[] args) {Person ming = new Person("Xiao Ming", 12);Person hong = new Person("Xiao Hong", 15);ming.number = 88;System.out.println(hong.number);hong.number = 99;System.out.println(ming.number);}}class Person {public String name;public int age;public static int number;public Person(String name, int age) { = name;this.age = age;}} 上述代码运⾏结果为打印: 88 99。

为什么?修改 ming.number 为 88 ,打印 hong.number 也是 88;修改 hong.number 为 99,打印ming.number 也为 99。

对于静态字段,⽆论修改哪个实例的静态字段,效果都是⼀样的:所有实例的静态字段都被修改了,原因是静态字段并不属于实例 虽然实例可以访问静态字段,但是它们指向的其实都是Person class的静态字段。

JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析

JS中类的静态⽅法,静态变量,实例⽅法,实例变量区别与⽤法实例分析本⽂实例讲述了JS中类的静态⽅法,静态变量,实例⽅法,实例变量区别与⽤法。

分享给⼤家供⼤家参考,具体如下:1.类的静态⽅法先来段代码之后分析// JS类静态函数function BaseClass() {}// 类添加add函数BaseClass.add = function() {console.log("BaseClass add()⽅法被调⽤");};// 类⽅法(类的静态函数)直接调⽤// 类名.类⽅法名BaseClass.add(); //BaseClass add()⽅法被调⽤var instance = new BaseClass();// 实例不能调⽤类⽅法(即类的静态⽅法)//instance.add();a.类的静态⽅法通过[类名.类⽅法名称]赋值;b.调⽤时⽤[类名.类⽅法名称()]直接调⽤;C.类的实例⽆法调⽤类的静态函数。

原因:因在js中function也是对象,即给函数对象添加了⼀个函数2.类的静态成员先来段代码之后分析// JS类的静态成员变量function BaseClass(params) {}// 类添加静态变量nameTestTest = "jadeshu";// 类的静态变量直接调⽤// 类名.类变量名console.log(Test); // jadeshuvar instance = new BaseClass();// 实例不能调⽤类的静态成员变量)console.log(Test); // undefineda.类的静态变量通过[类名.类变量名称]赋值;b.调⽤时⽤[类名.类变量名称]直接调⽤;C.类的实例调⽤类的静态变量为undefined。

-----原因:因在js中function也是对象,即给函数对象添加了⼀个属性3.实例⽅法(两种情况)I.单个实例的⽅法// JS的单个实例⽅法function BaseClass() {}var instance1 = new BaseClass();// 单个实例添加成员⽅法instance1.add = function (params) {console.log("BaseClass类实例的add⽅法被调⽤" + params);};instance1.add(11222); // BaseClass类实例的add⽅法被调⽤11222var instance2 = new BaseClass();//instance2.add(); // Error: instance2.add is not a functionII.所有实例创建时都创建了同名的⽅法// JS所有实例的共享⽅法function BaseClass() {// 所有实例创建时都创建了同名的⽅法this.add = function (params) {console.log("BaseClass类实例的add⽅法被调⽤" + params);};}var instance1 = new BaseClass();instance1.add(11); // BaseClass类实例的add⽅法被调⽤11var instance2 = new BaseClass();//实例1和实例2各有⼀个add函数的本地⽅法instance2.add(22); // BaseClass类实例的add⽅法被调⽤22console.log(instance1.add === instance2.add); // false⽅法也是每个实例各存在⼀个,占⽤内存,这既没有必要,⼜浪费系统资源,所以不建议这样添加实例的本地⽅法,或者在外部定义函数,然后直接赋给⼀个变量即可,就可以做到所有创建的实例都引⽤⼀份代码,但这样做代码不优雅。

Java语言程序设计(郑莉)课后习题答案

1.什么是对象、类,它们之间的联系?答:1)对象是包含现实世界物体特征的抽象实体,它反映系统为之保存信息和与它交互的能力。

对象是一些属性及服务的封装体,在程序设计领域,可以用“对象=数据+作用于这些数据上的操作”来表示。

现实生活中对象是指客观世界的实体;在程序中对象是指一组变量和相关方法的集合。

2)类是既有相同操作功能和相同的数据格式的对象的集合与抽象!3)两者的关系:对象是类的具体实例.。

2.什么是面向对象的程序设计方法?它有那些基本特征?答:面向对象程序设计从所处理的数据入手,以数据为中心而不是以服务为中心来描述系统。

它把编程问题视为一个数据集合,数据相对于功能而言,具有更强的稳定性。

它的特征:抽象,封装,继承,多态。

4.请解释类属性、实例属性及其区别。

答:实例属性,由一个个的实例用来存储所有实例都需要的属性信息,不同实例的属性值可能会不同。

5.请解释类方法、实例属性及其区别。

答:实例方法表示特定对象的行为,在声明时前面不加static修饰符,在使用时需要发送给一个类实例。

类方法也称为静态方法,在方法声明时前面需加static修饰符,类方法表示具体实例中类对象的共有行为。

区别:实例方法可以直接访问实例变量,调用实例方法,实例方法可以直接访问类变量,调用类方法;类方法可以直接调用类变量和类方法,类方法不能直接调用实例变量和实例方法;6.类的访问控制符有哪几种?具体含义及其区别。

答:类的访问控制符只有public(公共类)及无修饰符(默认类)两种。

区别:当使用public修饰符时表示所有其他的类都可以使用此类;当没有修饰符时,则只有与此类处于同一包中的其他类可以使用类。

7类成员的访问控制符有哪几种?他们对类成员分别有哪些访问限制的作用?答:类成员的访问控制符有public,private,protecte及无修饰符.public(公有的):用public修饰的成分表示公有的,也就是它可以被其他任何对象访问(前提是对累成员所在的类访问有访问权限).Private(保护的):类中限定为private的成员只能被这个类本身访问,在类外不可见。

java各详细总结知识点

java各详细总结知识点一、Java语法1. 数据类型Java中的数据类型分为基本数据类型和引用数据类型。

基本数据类型包括整型,浮点型,字符型和布尔型。

引用数据类型包括类、接口、数组等。

2. 变量在Java中,变量是用来存储数据的容器。

它们可以存储不同类型的数据,例如整数、浮点数、字符等。

变量分为局部变量和成员变量。

3. 运算符Java中的运算符包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。

这些运算符可以实现数据的计算和比较。

4. 控制流Java中的控制流包括顺序结构、选择结构和循环结构。

通过控制流语句,程序可以根据条件执行不同的代码块,实现不同的功能。

5. 方法方法是Java中用来组织和重用代码的一种机制。

它可以细化程序的逻辑结构,并提高代码的可读性和可维护性。

6. 数组数组是一种用来存储多个相同类型数据的容器。

在Java中,数组可以是一维的、二维的甚至多维的。

使用数组可以方便地管理大量数据。

7. 字符串在Java中,字符串是一种特殊的对象类型。

Java提供了丰富的字符串处理方法,例如字符串连接、子字符串提取、字符串比较等。

8. 输入输出在Java中,通过输入输出流可以实现与外部设备的交互。

Java提供了丰富的输入输出类和方法,可以实现文件的读写、网络通信等功能。

二、面向对象编程1. 类和对象在Java中,所有的代码逻辑都是围绕类和对象展开的。

类是一种模板,描述了对象的属性和行为。

对象是类的实例,可以根据类创建多个对象。

2. 封装封装是面向对象编程的核心思想之一。

通过封装,可以将数据和行为封装在一个对象中,避免外部直接访问对象的数据。

3. 继承继承是一种代码复用的机制,可以让子类继承父类的属性和方法。

通过继承,可以实现类与类之间的层次关系,提高代码的重用性和扩展性。

4. 多态多态是面向对象编程的另一个核心概念。

通过多态,可以使不同类的对象对同一消息作出不同的响应。

多态性可以提高代码的灵活性和可扩展性。

Java中类方法与实例方法的区别

Java中类⽅法与实例⽅法的区别⼀. 实例⽅法当类的字节码⽂件加载到内存中时,类的实例⽅法并没有被分配⼊⼝地址,只有当该类的对象创建以后,实例⽅法才分配了⼊⼝地址。

从⽽实例⽅法可以被类创建的所有对象调⽤,还有⼀点需要注意,当我们创建第⼀个类的对象时,实例⽅法的⼊⼝地址会完成分配,当后续在创建对象时,不会再分配新的⼊⼝地址,也可以说,该类的所有对象共享实例⽅法的⼊⼝地址,当该类的所有对象被销毁,⼊⼝地址才会消失。

⼆. 类⽅法当类的字节码⽂件加载到内存,类⽅法的⼊⼝地址就会分配完成,所以类⽅法不仅可以被该类的对象调⽤,也可以直接通过类名完成调⽤。

类⽅法的⼊⼝地址只有程序退出时消失。

因为类⽅法的⼊⼝地址的分配要早于实例⽅法的⼊⼝地址分配时间,所有在定义类⽅法和实例⽅法是有以下规则需要遵循:1. 在类⽅法中不能引⽤实例变量实例变量的定义类似实例⽅法,没有⽤static修饰的变量,实例变量的创建与实例⽅法的创建相同,也是在类的对象创建时完成,所以在类⽅法中是不能引⽤实例变量的,因为这个时候实例变量还没有分配内存地址。

2. 在类⽅法中不能使⽤super和this关键字这是因为super和this都指向的是⽗类和本类的对象,⽽在类⽅法中调⽤的时候,这些指代的对象有可能都还没有创建。

3. 类⽅法中不能直接调⽤实例⽅法(mian⽅法中,怎么可以⽤对象调⽤实例⽅法)其他的类⽅法也可以调⽤实例⽅法))静态⽅法不能直接调⽤实例⽅法和变量,但可以间接调⽤(即在静态⽅法中创建类的实例,然后调⽤)原因同1。

与类⽅法相⽐,实例⽅法的定义就没有什么限制了:1. 实例⽅法可以引⽤类变量和实例变量2. 实例⽅法可以使⽤super和this关键字3. 实例⽅法中可以调⽤类⽅法(1)实例⽅法可以直接访问实例变量,调⽤实例⽅法;(2)实例⽅法可以直接访问类变量,调⽤类⽅法。

但不推荐这么做,原因是不清晰,容易把类变量误认为是实例变量,把类⽅法误认为是实例⽅法(借助IDE,它会给出警告信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档