成员方法成员变量
- 格式:docx
- 大小:22.10 KB
- 文档页数:3
成员变量、实例变量、类变量和局部变量区别
⼀、成员变量、实例变量、类变量和局部变量区别
1::变量电议部分所定义的变量被称为类的。
也就是说在整个类中都有效,类中的⽅法可以直接调⽤成员变量使⽤。
然⽽成员变量⼜分为实例成员变量(简称)和类变量(简称)
1.1::就是我们正常定义的变量,⽐如int a; a就是
1.2::定义前要加上Static ⽐如static int a;这个a就是静态变量,当在变量定义前加上static的时候就代表着该变量在使⽤的时候有⼀处改变则各个⽤到这个变量的地⽅,该变量都发⽣改变,就是所谓的⼀处改变处处改变,静态变量的⽣存期为整个,但是只能在定义该变量的函数内使⽤该变量。
退出该函数后,尽管该变量还继续存在,但不能使⽤它。
2::在⽅法体中定义的变量和⽅法的参数称。
也就是说只在定义它的⽅法内有效,⽽⽅法外部的其他⽅法⽆法使⽤局部变量。
当局部变量名字与成员变量名字相同,则成员变量被隐藏,即这个成员变量在这个⽅法内暂时失效,以局部变量定义的为准。
⼆.长提到的⽅法有,类⽅法,实例⽅法。
就是名字和类名相同,⽽且没有类型。
类⽅法和实例⽅法的区别就是类⽅法前⾯有static修饰,⽽实例⽅法没有static修饰。
实例⽅法既能对类变量操作,也能对实例变量操作,⽽类⽅法只能对类变量进⾏操作。
java 类的属性和方法在类体中,包含的是成员变量和成员方法。
成员变量通常表示一个类所具有的属性,成员变量的声明非常简单,格式如下:在该代码中,创建两个字符串变量,一个整型变量,一个布尔类型的变量,没有初始化,这些变量的作用域范围是整个类。
通过声明成员方法可以定义类的行为,行为表示一个对象能够做的事情或者能够从一个对象取得的信息。
类的各种功能操作都是方法来实现,属性只不过提供了相应的数据。
一个完整的方法通常包括方法名称、方法主体、方法参数和方法返回类型,其结构如图6-6所示:图6-6构成方法元素参数、方法体。
其中,“<returntype>”是方法返回值的数据类型,数据类型可以是原始的数据类型即常用的8种数据类型,也可以是一个引用的数据类型,如一个类,接口,数组等。
除此之外,一个方法还可以没有返回值,即void,如main方法的返回类型。
“<methodname>”是用户自定义的方法名称,方法的名称首先要遵循标识符的命名约定,除此之外,方法的名称的第一个单词的第一个字母是小写,第二单词的第一个字母是大写,以此类推。
“(<type1> <arg1>,<type2> <arg3>,…)”方法的参数列表是一组变量声明,这些变量都要有自己的数据类型,可以是原始的数据类型,也可以是复杂的数据类型,一个方法主要依靠参数来传递消息。
方法主体是方法中执行功能操作的语句。
在一个类中,可以创建一个或多个方法,用来完成某种特定的行为,下面的代码是创建了一个简单的方法,其形式如下:在上面的代码中,我们创建了一个名称为vailable的方法,该方法没有返回值,没有参数,在方法体中只有一个判断语句。
这种方法的形式是最容易理解的一种,方法以是否拥有返回值,是否带有参数,可以划分不同的方法形式。
其常用的四种。
C++静态成员变量和静态成员函数的使⽤⽅法总结⼀.静态成员变量:类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。
和其他数据成员⼀样,静态数据成员也遵守public/protected/private访问规则。
同时,静态数据成员还具有以下特点:1.静态数据成员的定义。
静态数据成员实际上是类域中的全局变量。
所以,静态数据成员的定义(初始化)不应该被放在头⽂件中。
其定义⽅式与全局变量相同。
举例如下:xxx.h⽂件class base{private:static const int _i;//声明,标准c++⽀持有序类型在类体中初始化,但vc6不⽀持。
};xxx.cpp⽂件const int base::_i=10;//定义(初始化)时不受private和protected访问限制.备注:不要在头⽂件中定义(初始化)静态数据成员。
在⼤多数的情况下,这样做会引起重复定义这样的错误。
即使加上#ifndef #define #endif或者#pragma once也不⾏。
2.静态数据成员被类的所有对象所共享,包括该类派⽣类的对象。
即派⽣类对象与基类对象共享基类的静态数据成员。
举例如下:class base{public :static int _num;//声明};int base::_num=0;//静态数据成员的真正定义class derived:public base{};main(){base a;derived b;a._num++;cout<<"base class static data number _numis"<<a._num<<endl;b._num++;cout<<"derived class static data number _numis"<<b._num<<endl;} // 结果为1,2;可见派⽣类与基类共⽤⼀个静态数据成员。
JAVA篇:修饰符与接⼝、类、⽅法、成员变量、局部变量、⽅法块或许这是⼀个⽐较轻松简单的知识点,因为只是简单地做⼀个总览对⽐⽽已。
这周⽐较忙,祝我⾃⼰好运。
有关接⼝(interface)的修饰符,其实⼀般⽤public,也可以不加修饰词(default),或者是使⽤private修饰的声明在类的内部的内部接⼝。
不存在protected修饰的接⼝。
⽽接⼝内部可以有⽤public static final修饰的静态常量,除此之外只存在public修饰的⽅法(接⼝中⽆修饰词的⽅法也默认是public)了。
⽆论是接⼝还是接⼝中的⽅法的abstract修饰词都是隐含的,不必显式地修饰在接⼝或者⽅法前⾯。
类的访问限制修饰词与接⼝⼀样,但是还可以有⾮访问限制修饰词abstract(抽象类)和final(不可继承的类)。
类的成员变量可以被四种访问修饰词修饰,同时也可以被static(静态变量),final(常量),transtient(有关序列化特殊标识变量,具体还需要进⾏了解), volatie(线程共享变量)。
类⽅法除了访问限制修饰符,还可使⽤static(静态⽅法),final(不可改变的⽅法),abstract(抽象的),native(⾮java实现的),synchronized(线程同步),类构造⽅法只可使⽤访问限制修饰符修饰,局部变量只能使⽤final定义常量,⽅法块可以使⽤static定义静态⽅法块和使⽤synchronized 定义线程同步的⽅法块。
java的接⼝、类1、接⼝(interface) 在java中,接⼝是⼀个抽象类型,是抽象⽅法的集合,接⼝通常以interface来声明,接⼝只能包含抽象⽅法和以static\final修饰的变量,⼀个接⼝可以继承(extends)另⼀个接⼝。
接⼝只包含要实现的⽅法,⽽类描述对象的属性和⽅法,两者实现类似但是概念不同。
java提供了类和接⼝之间的实现机制,接⼝不可被实例化,只能被实现(implements),实现接⼝的类必须实现接⼝中全部的抽象⽅法,否则该类必须使⽤abstract声明为抽象类。
接口类型的定义类似于类的定义。
接口定义的形式如下:[修饰符] interface 接口名[extends] [接口列表]{ 接口体}像类那样,编译好的接口被保存在class 文件中。
1.接口说明interface 前的修饰符是可选的。
当没有修饰符的时候,表示此接口的访问只限于同包的类。
如果使用修饰符,则只能用public 修饰符,表示此接口是公有的,在任何地方都可以引用它,这一点和类是相同的。
接口说明中的extends 关键词和类说明中的extends 一样,用来定义直接的父接口。
和类不同,一个接口可以继承多个父接口,当extends 后面有多个父接口时,它们之间用逗号隔开,例如,下面是一个最简单的接口说明:public interface boy extends person, man2. 接口体就是用大括号括起来的那部分。
接口体说明接口的成员,包括常量和抽象方法。
例3.11 接口的定义实例。
interface boy{ final int MAX=50;void increment( );void decrement( );int currentcount( );}像类一样,接口可以有两种成员:成员变量和成员方法。
(1)接口中的成员变量接口中所有的成员变量都隐含的是public、static、final 的,因此接口中的成员变量都是静态最终变量。
在接口中成员变量声明的形式如下:[修饰符] 类型名变量名列表;例如,在接口中有下面这行代码:“int i=5;”等同于:“public stat ic final inti=5;”。
(2)接口中的方法接口中说明的方法都是抽象方法,其声明的形式为[修饰符] 方法返回值类型方法名(参数列表);由于接口中的方法都是抽象方法,所以方法体仅仅有一个分号“;”(连“{”和“}”都没有)。
修饰符可选,美国服务器租用商提醒您它只能是public 和abstract。
final关键字:⽤来修饰类,⽅法,成员变量,局部变量final 关键字:⽤来修饰类,⽅法,成员变量,局部变量
表⽰最终的不可变的
1、final修饰⼀个类
表⽰当前的类不能有⼦类,也就是不能将⼀个类作为⽗类
格式:
public final class 类名称 {
class body
}
⼀个类如果是final的,那么其中所有成员⽅法都不能被覆盖重写(因为没有⼦类),但是该类可以有⽗类
2、final关键字修饰成员⽅法
这个⽅法就是最终⽅法,也就是该类的⼦类不能覆盖重写这个⽅法
对于类、⽅法来说abstract、final不能同时使⽤,因为他们是⽭盾的,abstract的⽅法必须覆盖重写,但是final的⽅法不能覆盖重写3、final修饰局部变量
⼀旦使⽤final修饰局部变量,就不能改变,也就是⼀旦赋值不能更改,⽽且只能赋值⼀次,哪怕第⼆次赋值是⼀样的也不⾏
对于引⽤类型来说,使⽤关键字final修饰,不可变的含义就是地址值不能改变,但是该地址指向的对象的内容是可以改变的
4、final关键字修饰成员变量
对于成员变量来说,⼀旦使⽤final关键字,也是⼀样不能改变
a、和局部变量的不同点在于,成员变量有默认值,因此必须⼿动赋值
b、final的成员变量可以定义的时候直接赋值,或者使⽤构造⽅法在构造⽅法体⾥⾯赋值,但是只能⼆者选其⼀
c、如果没有直接赋值,那就必须保证所有重载的构造⽅法最终都会对final的成员变量进⾏了赋值。
java基础-类的定义、成员变量、⽅法、对象的创建与使⽤⼀.JAVA类的定义 JAVA⾥⾯有class关键字定义⼀个类,后⾯加上⾃定义的类名即可。
如这⾥定义的person类,使⽤class person定义了⼀个person类,然后在person这个类的类体⾥⾯定义person这个类应该具有的成员变量(即属性)和⽅法,如这⾥定义的int id和int age这个两个成员变量,或者叫属性,这个id表⽰⼈的⾝份证号码,⼈应该具有这个属性,age表⽰⼈的年龄,这也是⼈应该具有的。
这样就在person这个类⾥⾯定义了两个⼈应该有的属性,接下来就是定义⽅法了,这⾥定义了三个⽅法,分别是getAge()、setAge(int i)和getId(),分别⽤来获取⼈的年龄,设置⼈的年龄,获取⼈的id,getAge()⽅法获取了⼈的年龄后,将获取到的值返回,所以使⽤了return age语句,getId()⽅法也使⽤了return id语句⽤于返回获取到的id的值。
⼆. 成员变量 在JAVA⾥⾯的任何变量⾸先应该要声明,然后再赋值,然后再使⽤。
成员变量和局部变量有⼀个重要区别:成员变量在类⾥⾯声明时如果不进⾏初始化,那么JAVA会默认给它初始化,⽽局部变量JAVA不会默认给它初始化,所以在⽅法⾥⾯声明⼀个局部变量如果不给它初始化时就会出错。
默认初始化⼤多数都是0,boolean类型的为false,引⽤类型的为null,如过不记得JAVA对成员变量默认的初始化是多少的话,那就这样做,定义⼀个成员变量,不给它初始化,然后直接打印这个成员变量,打印出来的结果就是JAVA默认的初始化的值。
三、Java⾯向对象的基本概念——引⽤ 引⽤类型和基本类型有着巨⼤的区别,当声明⼀个int i=0时,系统会马上给这个i分配⼀个内存空间(在栈内存⾥⾯分配⼀⼩块区域⽤来装数字0),⾥⾯装着⼀个值为0,以后使⽤i这个名字马上就可以访问这个内存空间⾥⾯的值,这就是基本数据类型,所以基础类型就只占⼀块内存。
成员方法的概念成员方法(Member Method)是面向对象编程(Object-oriented programming)中的一个重要概念。
它是指属于特定类(class)的函数或操作,可以通过类的实例(Instance)进行调用,并且可以访问和操作该类的成员变量(Member Variable)。
在程序中,通过使用成员方法,可以实现对类的封装性和封装性的体现。
成员方法通常用来完成特定的任务或执行特定的操作。
在定义类时,我们可以在类的内部定义成员方法,通过这些成员方法来定义类的行为。
一个类可以拥有多个成员方法,每个成员方法负责一项具体的任务,通过将多个成员方法组合起来,我们可以实现一个具有丰富功能的类。
成员方法一般具有以下几个特点:1. 归属于特定的类:成员方法属于特定的类,在类的定义中进行声明和定义。
成员方法可以在类的外部通过类的实例进行调用,以完成特定的任务。
2. 在类内部定义:成员方法的定义通常位于类的内部,它们可以用于访问和操作类的成员变量。
在类内部,成员方法可以直接访问类的私有成员,实现对数据的封装和保护。
3. 通过类的实例调用:成员方法通过类的实例进行调用。
在程序中,我们可以创建一个类的实例,并通过该实例来调用该类的成员方法。
调用成员方法时,可以使用点运算符(dot operator)来指定类的实例和对应的成员方法。
4. 可以传递参数和返回值:成员方法可以接受参数,用于传递数据给方法进行操作。
参数可以是任意类型,并可以有多个。
成员方法还可以有返回值,表示方法执行后的结果。
返回值可以是任意类型,包括基本类型和引用类型。
成员方法的定义通常包括以下几个要素:1. 访问修饰符(Access Modifier):表示成员方法的访问权限。
常见的修饰符包括public、private、protected等。
访问修饰符用于控制成员方法是否可以被外部访问。
2. 返回值类型(Return Type):表示成员方法的返回值类型。
java中的成员变量、类变量,成员⽅法、类⽅法属性和⽅法区别成员变量:包括实例变量和类变量,⽤static修饰的是类变量,不⽤static修饰的是实例变量,所有类的成员变量可以通过this来引⽤。
类变量:静态域,静态字段,或叫静态变量,它属于该类所有实例共有的属性。
⽽且所有的实例都可以修改这个类变量的值(这个类变量没有被final修饰的情况),⽽且访问类变量的时候不⽤实例,直接⽤类名.的⽅式就可以。
成员⽅法:包括实例⽅法和类⽅法,⽤static的⽅法就是类⽅法,不⽤static修饰的就是实例⽅法。
实例⽅法必须在创建实例之后才可以调⽤。
类⽅法:和类变量⼀样,可以不⽤实例,直接⽤类就可以调⽤类⽅法。
类⽅法这不是⼀个名词,只是单纯的类中描述的⼀个⽅法。
加了static的⽅法,在程序中只运⾏⼀次,⽐如你两次实例化对象了,但你实际上只调⽤了⼀次static标识的⽅法。
在定义类时,经常需要抽象出它的属性,并定义在类的主体中。
下⾯就来介绍与属性相关的内容。
常量属性在类中定义的属性有常量属性和成员属性之分。
常量属性⽤final关键字修饰,常量只能赋值⼀次,在程序中不能修改它的值。
⼀般来说,在类中定义的常量属性⽤⼤写字母命名。
成员属性成员属性是抽象出来的类属性,成员属性不能直接被外部访问或修改,需要通过get和set⽅法来访问或修改属性值,成员属性⼀般⽤private 关键字修改,表明为私有成员,禁⽌外部直接访问。
成员属性的作⽤范围为整个类⽂件,作⽤范围就是成员属性的有效⼯作范围,在整个类⽂件中,成员属性都可以被访问和使⽤。
(1)使⽤默认值初始化Java为声明的成员属性或变量提供了默认初始化机制,当声明成员属性或变量时即使没有显式赋值,Java也会为以下类型的成员属性或变量提供默认值: 2)使⽤显式值初始化声明成员属性的同时,进⾏赋值。
3)使⽤类构造⽅法初始化通过类构造⽅法来初始化属性(类构造⽅法后⾯介绍)成员变量变量前⾯已经介绍过了,变量的主要作⽤是存储程序运⾏过程中的临时数据,程序退出后,变量存储的内容不再存在。
成员变量
成员变量是指类的一些属性定义,标志类的静态特征,它的基本格式如下:访问修饰符修饰符类型属性名称=初始值;
•访问修饰符:可以使用四种不同的访问修饰符中的一种,包括public(公共的)、protected(受保护的),无修饰符和private(私有的)。
public 访问修饰符表示属性可以从任何其它代码调用。
private 表示属性只可以由该类中的其它方法来调用。
protected 将在以后的课程中讨论。
•修饰符:是对属性特性的描述,例如后面会学习到的:static、final 等等。
•类型:属性的数据类型,可以是任意的类型。
•属性名称:任何合法标识符
•初始值:赋值给属性的初始值。
如果不设置,那么会自动进行初始化,基本类型使用缺省值,对象类型自动初始化为null。
成员变量有时候也被称为属性、实例变量、域,它们经常被互换使用。
成员方法
成员方法就是对象所具有的动态功能。
Java 类中方法的声明采用以下格式:访问修饰符修饰符返回值类型方法名称(参数列表) throws 异常列表{方法体}
•访问修饰符:可以使用四种不同的访问修饰符中的一种,包括public、protected、无修饰符和private。
public 访问修饰符表示方法可以从任何其它代码调用。
private表示方法只可以由该类中的其它方法来调用。
protected 将在以后的课程中讨论。
•修饰符:是对方法特性的描述,例如后面会学习到的:static、final、abstract、synchronized 等等。
•返回值类型:表示方法返回值的类型。
如果方法不返回任何值,它必须声明为void(空)。
Java 技术对返回值是很严格的,例如,如果声明某方法返回一个int值,那么方法必须从所有可能的返回路径中返回一个int值(只能在等待返回该int 值的上下文中被调用。
)
•方法名称:可以是任何合法标识符,并带有用已经使用的名称为基础的某些限制条件。
•参数列表:允许将参数值传递到方法中。
列举的元素由逗号分开,而每一个元素包含一个类型和一个标识符。
在下面的方法中只有一个形式参数,用int 类型和标识符days 来声明:public void test(int days){}
•throws 异常列表:子句导致一个运行时错误(异常)被报告到调用的方法中,以便以合适的方式处理它。
异常在后面的课程中介绍。
•花括号内是方法体,即方法的具体语句序列。
示例:比如现在有一个“车”的类——Car,“车”具有一些基本的属性,比如四个轮子,一个方向盘,车的品牌等等。
当然,车也具有自己的功能,也就是方法,比如车能够“开动”——run。
要想车子能够开动,需要给车子添加汽油,也就是说,需要为run方法传递一些参数“油”进去。
车子就可以跑起来,这些油可以供行驶多少公里?就需要run方法具有返回值“行驶里程数”。
package net.weixueyuan.www.javatest;
public class Car {// 车这个类
private String make;// 一个车的品牌
private int tyre;// 一个车具有轮胎的个数
private int wheel;// 一个车具有方向盘的个数
public Car() {
// 初始化属性
make = "BMW";// 车的品牌是宝马
tyre = 4;// 一个车具有4个轮胎
wheel = 1;// 一个车具有一个方向盘
}
/**
* 车这个对象所具有的功能,能够开动
*
* @param oil 为车辆加汽油的数量
* @return 车辆行驶的公里数
*/
public double run(int oil) {
// 进行具体的功能处理
return 100*oil/8;
}
public static void main(String[] args){
Car c=new Car();
double mileage=c.run(100);
System.out.println("行驶了"+mileage+" 公里");
}
}
main方法是一个特殊的方法,如果按照public static void main(String[] args)的格式写,它就是一个类的入口方法,也叫主函数。
当这个类被java指令执行的时候,首先执行的是main 方法,如果一个类没有入口方法,就不能使用java指令执行它,但可以通过其他的方法调用它。
这里,注意一下形参和实参的区别:
•形参:就是形式参数的意思。
是在定义方法名的时候使用的参数,用来标识方法接收的参数类型,在调用该方法时传入。
•实参:就是实际参数的意思。
是在调用方法时传递给该方法的实际参数。
比如:上面的例子中“int oil”就是个形式参数,这里只是表示需要加入汽油,这个方法才能正
常运行,但具体加入多少,要到真正使用的时候,也就是调用这个方法的时候才具体确定,加入调用的时候传入“100”,这就是个实际参数。
形参和实参有如下基本规则:
•形参和实参的类型必须要一致,或者要符合隐含转换规则
•形参类型不是引用类型时,在调用该方法时,是按值传递的。
在该方法运行时,形参和实参是不同的变量,它们在内存中位于不同的位置,形参将实参的值复制一份,在该方法运行结束的时候形参被释放,而实参内容不会改变。
•形参类型是引用类型时,在调用该方法时,是按引用传递的。
运行时,传给方法的是实参的地址,在方法体内部使用的也是实参的地址,即使用的就是实参本身对应的内存空间。
所以在函数体内部可以改变实参的值。
JAVA中的方法和构造方法有什么区别
1、方法有返回类型,方法名小写,不能和类名相同;构造方法没有返回类型,void也不行,
名与类名相同。
2、构造方法是初始化对象的重要途径,所以就算你给一个类没有定义构造方法,方法在这
个类的加载得时候,会自动提供一个没有参数的构造方法。
所以,常见得Student s=new Student();那么,s这个实例,是通过构造方法初始化的;而普通方法不行
3、他们运行顺序不同。
一个类在初始化的时候,例如People是Student的父类,有构造方
法public PeoPle(){}那么,当实例化Student p=new Student()得时候,父类的构造方法会隐式执行(你可自己敲代码尝试,父类构造方法中写个输出语句:例如
System.out.println("父类构造方法"))。
你会发现,没有调用任何父类,也没有实例化父类,但是构造方法却执行了。
4、方法仅仅是类成员,构造方法也是类成员,但是,构造方法有对类属性得初始化的功能。
所以,常见到public PeoPle(String name){=name}或者public
PeoPle(){name="wangsan",age=14},完成了对People类属性name或者age的初始化。