类和对象的定义
类的定义
修饰符 class 类名 {
类的内容;
}
修饰符:与方法定义的中的修饰符作用一样,描述类的访问权限。静态类即被声明为static的,只有一种情况,就是静态内部类。
类名:符合驼峰命名法。
对象的定义
一个类要想进行操作,则必须依靠对象。java中类是抽象的,就像工作时对Java工程师这个职位的要求描述,是不能直接对其进行操作的。想要让这个Java工程师敲出代码,就必须招到一个具体的人,而对象就是这个具体招到的人。
对象的定义:
类名 对象名 = new 类名(实参);
然后通过操作对象来实现对类的操作。比如访问对象中的属性/方法,就是对象名.属性名/方法名
:
public class Test{
public static void main(String[] args) {
House h;//声明一个类的变量
h = new House();//创建实例对象
h.kind = "别墅";
h.Count = 3;
h.Print();
//匿名对象,只能用一次,用完即被释放
new House().Print();
//释放对象,释放后再使用就报空指针异常
h = null;
}
}
public class House{
String kind ;
int Count;
public void Ptint(){
System.out.println(kind + Count +"栋");
}
}
构造方法
构造方法是类构造对象时调用的方法,用于对象的初始化工作,是实例化一个类的对象也就是new时最先调用的方法。
构造方法的定义
修饰符 类名(参数列表) {}
如果没有定义任何构造方法,系统送一个无参的构造方法,一旦定义构造方法,就不再赠送;带参的构造方法,用于给成员变量赋值。
this关键字
this引用的是当前对象。用在类的成员方法中(非静态)
- this.成员变量/成员方法
- this(实参) 调用构造方法:只能用在构造方法中,而且放在方法中的第一行。
public class Test{
public static void main(String[] args) {
House h = new House();
h.setKind("草屋");
}
}
public class House{
String kind ;
public void house(String kind){
//表示将传入的kind的值赋予该类中的kind
this.kind = kind;
System.out.println(kind);
}
public void setKind(String kind){
this(kind);
System.out.println(kind);
}
}
封装
隐藏类内一些业务的实现细节,更改成员变量、方法、类等的权限,仅提供访问的接口(方法),使只能通过接口(方法)来访问。
封装的优点:
- 模块化,利于管理维护
- 隐藏信息,保证信息安全
- 代码重用,减少代码量
- 插件化易于调试
- 具有安全性
缺点:会影响执行效率。
成员变量与局部变量
成员变量与局部变量的区别:
- 在类中的位置不同
- 成员变量:在类中定义
- 局部变量:在方法中定义或者方法的参数
- 在内存中的位置不同
- 成员变量:属于对象,在堆内存
- 局部变量:属于方法,在栈内存
生命周期不同
- 成员变量:随着对象的创建而存在,随着对象的销毁而消失,简单来说就是作用在整个类中
- 局部变量:随着方法的创建而存在,随着方法的销毁而消失,简单来说就是作用在定义的方法中,出了该方法则不能被直接调用,但可以通过
方法名.变量名
调用
- 初始化值不同
- 成员变量:有默认的初始化值,引用类型默认null
- 局部变量:没有默认的初始化值,必须定义,赋值,然后才能使用。
public class House{
String kind ;//成员变量
String kind2 = "成员变量2";
public void house(String kind){//kind是局部变量,两者可以是同一名字,方法中使用时采用就近原则
this.kind = kind;
System.out.println(kind);
}
public void setKind(){
//kind1是局部变量,到了该方法之外,kind1就不能直接被调用了
kind1 = "局部变量1";
System.out.println(kind2);//在方法中可以直接调用方法内的局部变量
}
System.out.println(setKind.kind1);//到了该方法之外,kind1就不能直接被调用了,只能通过这样调用,也就是说它不作用于被定义的方法之外的地方
}