1.类与对象的概率
什么是类?
描述具有共同特征的实体
属性,方法(函数)
什么是对象?
对象是类的实例化,是真实存在的独立个体(存在内存中)
状态(特征),行为
类与对象的关系:
类是对象的抽象化,对象是对象的实例化。
类的属性对应对象的状态;类的方法对应对象的行为。
2.类的结构:
定义
[修饰符] class 类名{
//属性
成员变量:类中方法外定义的变量
实例变量
[修饰符] 数据类型 变量名[=值];
类变量
[修饰符] static 数据类型 变量名[=值];
类变量于实际变量的区别:
类变量:
staic修饰符修饰,类变量是所有对象共享的;可通过类名.变量名访问
实例变量
没有static修饰,实例变量属于一个对象相对独立;只能通过对象名.变量名访问
//方法
成员方法:类中声明的方法;
实例方法
[修饰符] 返回值类型 方法名([参数]){函数体;}
类方法
[修饰符] static 返回值类型 方法名([参数]){函数体;}
类方法与实例方法的区别:
类方法:
static修饰,可以直接访问其他类方法和类变量
不能直接访问实例变量与实例方法。
实例方法
未使用static修饰,可以直接方法类方法和类变量
以及直接访问实例方法与实例变量。
构造方法//可为空方法]
用于构建(创建)对象,构造方法可以带参数,带参数的
构造方法一般用于初始化操作,初始化成员变量。
任何一个类均拥有一个构造方法,若未手动创建构造方法
JAVA自动提供一个默认的无参无方法体的构造方法。
若手动创建,默认则会被覆盖
[修饰符] 类名([参数]){函数体;//初始化操作}
关键字:this
指代当前对象,通过this可以访问到当前对象的实例变量
以及实例方法
}
扩展:变量的分类
局部变量以及全局变量
局部变量:方法或者函数中声明并使用的变量(形参)
全局变量:成员变量可视为全局变量,一般的全局变量是指类变量
变量的作用域:
局部变量作用于当前语句块
全局变量作用于整个类
3.对象的创建:
类名 变量名(对象名) = new 构造方法名([参数]);
4.访问对象:
对象名.属性名//访问对象的属性
对象名.方法([参数])//访问对象的方法
5.参数:形式参数(形参);实际参数(实参)
形式参数:声明方法时定义的参数变量;没有实际的值,用于接收方法调用时传递过来的值。
实际参数:方法实例化时传递的参数变量,实际值。
6.返回值:
返回值类型
数据类型
基本数据类型
RETURN 值
引用数据类型
return 值
void//无返回值
public class TestVarAndMethod {
static String name ;
int age ;
//类方法
public static void setName(String name){
//类方法中不能使用this
/* this.name=name;//this 不能访问类变量*/
TestVarAndMethod.name=name;
}
//实例方法
public void setAge(int age){
/* this.name="";//通过this关键字访问类变量*/
this.age=age;
}
//实例方法
public void show(){
setName("tom");
setAge(21);
System.out.println("name="+name+"age="+age);
}
//类方法
public static void printMsg(){
setName("tom");
/* setAge(21);//类方法不能访问实例变量*/
System.out.println("name="+name);
/*System.out.println("age"+age);//类方法不能访问实例变量*/
/*//只能通过新建 对象.方法() 访问
TestVarAndMethod tvm=new TestVarAndMethod();
tvm.setAge(21);*/
}
public static void main(String [] args){
TestVarAndMethod tv1 = new TestVarAndMethod();
tv1.setName("草莓");
tv1.setAge(22);
TestVarAndMethod tv2 = new TestVarAndMethod();
tv2.setName("答莓");
tv2.setAge(21);
System.out.println(tv1.name+","+tv1.age);
System.out.println(tv2.name+","+tv2.age);
}
}
结果:
答莓,22
答莓,21
原因:类变量共享,实例变量不共享
static修饰的变量存储在栈中:先进后出 所以输出的是后进栈的答梅