成员变量:包括实例变量和类变量,用static修饰的是类变量,不用static修饰的是实例变量,所有类的成员变量可以通过this来引用。
类变量:静态域,静态字段,或叫静态变量,它属于该类所有实例共有的属性。而且所有的实例都可以修改这个类变量的值(这个类变量没有被final修饰的情况),而且访问类变量的时候不用实例,直接用类名的方式就可以。
成员方法:包括实例方法和类方法,用static的方法就是类方法,不用static修饰的就是实例方法。实例方法必须在创建实例之后才可以调用。
类方法:和类变量一样,可以不用实例,直接用类就可以调用类方法。
举例:
class Demo{int x; //x是实例变量,也是成员变量
static int y; //y为类变量,也是成员变量
public int x() { //该方法为实例方法,是成员方法
return x;
}
public static void setX(int x1){ //该方法为类方法,也是成员方法
x = x1;
}
}
(CMDIFrameWndEx)AfxGetApp()->GetMainWnd()
用afxgetapp取得theApp,然后得到主窗口,接着转换类型就行,
包含了CMainFrame所在的头文件,就可以直接转换成CMainFrame,
没包含的话也可以转换成CMainFrame的基类,毕竟一般是从mfc里直接继承的,已经被头文件包含到所有文件了,
如果需要用 后添加的 函数 或 变量 还是包含下主窗口的头文件
您好,提问者:
如果这个类的成员、方法定义为private只支持本类访问。
public、protected、defualt(默认不写)继承、同包是都可以访问到的。
可以封装成方法,对外暴露,例如:
public class Test{private String name;
//提供公共的赋值方法
public void setName(String name){
thisname = name;
}
//提供公共的获取方法
public String getName(){
return name;
}
}
总所周知,类中的private属性的成员变量在类外是无法访问的,今天我们探讨的就是如何在类外访问private属性的成员变量。
我们先来看一个简单的例子:
class STU
{
public:
STU()
{
x = 5;
y = 10;
}
private:
int x;
int y;
};
int main()
{
STU t;
intp = (int)&t + 1;
return 0;
}
通过上面的代码我们可以知道,方法是把类对象的地址强制转化为int类型,因为类对象里存储的只是成员变量,所以通过对指针的 *** 作可以访问到private类型的成员变量。
接下来还有一个例子:
class STU
{
public:
STU()
{
c = 'f';
y = 10;
}
private:
char c;
int y;
};
int main()
{
STU t;
intp = (int)((char)&t + 4);
cout << p << endl;
return 0;
}
这段代码中最重要的就是intp = (int)((char)&t + 4);
因为第一个数据是char类型的,所以要把对象的地址转化为char型,对象中存在两种类型的数据,需要考虑内存对齐,所以当要访问下一个int型变量的时候,指针需要加4,而不是加1。最后要取到int型的变量,还是要把地址强转为int 。
写了个例子,请仔细查看代码,具体过程需要你自己对照java API 再研究,
先定义了一个普通的学生类,如下:
public class Student {private int id;
private String name;
private int age;
private String[] aiHao;
public int getId() {
return id;
}
public void setId(int id) {
thisid = id;
}
public String getName() {
return name;
}
public void setName(String name) {
thisname = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
thisage = age;
}
public String[] getAiHao() {
return aiHao;
}
public void setAiHao(String[] aiHao) {
thisaiHao = aiHao;
}
}
对学生类进行反射
public class Test3 {public static void main(String[] args) {
Student s = new Student();
ssetId(1);
ssetName("张三");
ssetAge(23);
ssetAiHao(new String[] { "足球", "篮球", "上网" });
try {
// 获取所有的变量
Field[] fields = StudentclassgetDeclaredFields();
// 循环处理变量
for (Field f : fields) {
fsetAccessible(true);
Object value = fget(s); // 取变量的值
Systemoutprint("变量名称为:" + fgetName());
if (valuegetClass()isArray()) { // 判断是否是数组
Object[] arr = (Object[]) value; // 装换成数组
Systemoutprintln(",变量值等于:" + ArraystoString(arr));
// 这里还可以做额外处理,判断数组的类型 如下面注释的代码
/
for (Object a : arr) {
Systemoutprintln("参数类型" + agetClass()getName());
// 同样运用反射的机制做额外处理
}
/
} else {
// 非数组类型,普通处理
Systemoutprintln(",变量值等于:" + value);
}
fsetAccessible(false);
}
} catch (Exception e) {
eprintStackTrace();
}
}
}
以上就是关于java中的成员变量、类变量,成员方法、类方法各是什么,怎么区分,全部的内容,包括:java中的成员变量、类变量,成员方法、类方法各是什么,怎么区分,、MFC中如何获取在CMainFrame中定义的成员变量、java中如果有一个A类,怎样从b类访问a中的私有成员变量等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)