类方法:
1.用static修饰的是类方法.
2.无论是实例方法还是类方法,在对象创建之后,都可以用“.”运算符调用这些方法。
3.JAVA语言中,类中的类方法,在该类加载到内存时,就分配了相应的入口地址,所以类方法不但可以被任何对象调用执行,也可以直接通过类名调用,入口地址直到程序退出的时候才会被取消。
4.因此JAVA语言允许通过类名直接调用类方法,而实例方法则不能通过类名调用。
5.而且类方法不能操作实例变量,也不能调用实例方法,因为在类创建对象之前,实例成员变量没有分配内存,而且实例方法也没有入口地址。
如果要在类方法中调用实例变量,可以先创建一个类的实例,然后通过实例访问该变量。
class NoStaticError{
String a = "hello";
public static void main(String[] args){
NoStaticError b = new NoStaticError();
System.out.println(b.a);
}
}
6.this表示某个对象,所以this关键字只能出现在实例方法和构造方法中。
7.如果一个方法不需要操作实例成员就可以实现某种功能,就可以考虑将这样的方法申明为类方法,这样可以避免创建对象浪费内存
实例方法:
1.不用static修饰的是实例方法.
2.实例方法只能通过对象来调用,而不能通过类名来调用。
3.当this关键字出现在实例方法中时,代表正在调用该方法的当前对象.
当实例成员出现在实例方法中时,默认格式:this.成员变量
当类成员变量出现在实例方法中时,默认格式:类名.成员变量
构造方法:
1.构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值,具有特殊的声明规则.方法名和类名相同且没有返回值。 一般用 new 构造方法名() 来创建该类的对象,构造方法是在对象一建立就 运行,给对象初始化。
2.当this关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象。
3.程序员如果没有在JAVA类中提供构造方法,系统则会自动提供一个无参数的构造方法,这个构造方 法为空,不做任何事情。所以JAVA类中至少含有一个构造方法。
什么时候定义构造方法呢?
当分析食物时,该事物存在就具备一些特性或者行为,那么将这些内容定义在构造方法中
public class ConstructorTest
{
public String name;
public int age;
public ConstructorTest(String name , int age) //提供自定义的构造方法,构造器包含两个参数
{
//构造方法中的this代表它进行初始化的对象
this.name=name;
this.age=age; //这两行代码将传入的2个参数赋给this代表对象的name和age实例变量
}
public static void main(String[] args)
{
//使用自定义的构造方法来创建对象
//系统将对对象执行自定义的初始化
ConstructorTest tc = new ConstructorTest("张三",23); //对象一建立,就会调用与之对应的构造函数
System.out.println(tc.name);
System.out.println(tc.age);
}
}
例子
public class Test{
public static void myMethod();//类方法
public void myMethod2();//实例方法
public Test(){}//构造方法,没有返回值,方法名与类名一样
}
this关键字:
person(String name)
{
this.name = name;
}
this:看上去,是用于区分局部变量和成员变量同名情况。
this为什么可以解决这个问题呢?
this到底代表的是什么?
this:就代表本类的对象,到底代表哪一个呢?
this代表它所在函数所属对象的引用。
简单说:哪个对象在调用this所在的函数,this就代表哪个对象
this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
class a
{
person(String name)
{
this.name = name;
}
public void speak()
{
System.out.println("name="+name"...age"+age); //System.out.println("name="+this.name"...age"+this.age)
}
}
calss PersonDemo
{
public static void main(String[] args)
{
person p =new person;
person p1 = new person;
p.speak();
p1.speak();
}
}
this语句:用于构造函数之间进行相互调用,不用用在一般函数中。
this语句只能定义在构造函数的第一行。因为初始化要先执行。