初学Java,总结一下Java中的类和对象的相关知识分享给入坑Java的萌新,如有不对之处,还请你们指出。java
类和对象的定义
类:类是一个模板,它用来描述一类对象的行为和状态。类也能够比做一个工厂,用来生产对象,不一样的工厂(类)生产不一样的对象。
对象:对象是一个类的具体实例,有些本身的行为和状态。例如,狗是一个类,哈士奇就是狗这个类的对象。web
类中须要掌握的知识点
1.类中包含的变量类型
类中主要包含类变量、成员变量及局部变量。svg
定义:
局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。(Java中的方法相似于其余语言中的函数)函数
public class Number{ //类名按照规范通常首字母大写,多个单词组成的类名,每一个单词首字母都要大写,例如MyFirstJavaClass
public void printNumber(){ //全部的方法名都应该以小写字母开头。若是方法名含有若干单词,则后面的每一个单词首字母大写
int a; //局部变量
}
}
成员变量:成员变量是定义在类中,方法体以外的变量。这种变量在建立对象的时候实例化。成员变量能够被类中方法、构造方法和特定类的语句块访问。this
public class Number{
int a; //成员变量
public void printNumber(){
}
}
类变量:类变量也声明在类中,方法体以外,但必须声明为static类型。spa
public class Number{
static int a;//类变量
public void printNumber(){
}
}
区别:
成员变量与类变量的区别:
一、两个变量的生命周期不一样code
成员变量随着对象的建立而存在,随着对象的回收而释放。
类变量随着类的加载而存在,随着类的消失而消失。
二、调用方式不一样xml
成员变量只能被对象调用。
类变量能够被对象调用,还能够被类名调用。
三、别名不一样对象
成员变量也称为实例变量。
类变量也称为静态变量。
四、数据存储位置不一样token
成员变量存储在堆内存的对象中,因此也叫对象的特有数据。
类变量数据存储在方法区(共享数据区)的静态区,因此也叫对象的共享数据
成员变量和局部变量的区别:
1.声明位置不一样
成员变量也就是属性,在类中声明的。
局部变量,在方法中声明或代码块中声明。
2.初始值不一样
成员变量若是没有赋值则是有默认值的,数据类型不一样则默认值不一样。
局部变量是没有默认值,也就是说必须先声明,再赋值,最后才使用。
3.在一个类中,局部变量能够与成员变量同名,可是局部变量优先,若是非要访问成员变量的属性,则必须使用 this关键字(示例见构造函数)。
2.构造方法
构造方法定义:构造方法是类里的一个特殊的方法,他不能有返回值(包括void)。所谓构造方法,就是这个类在被实例化时(建立对象时)就要执行的方法,方法名为类的名字,必定要注意构造方法的方法名为类的名字,通常构造方法的目的是为了给类进行一些初始化值。若是没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。在建立一个对象的时候,至少要调用一个构造方法,一个类能够有多个构造方法。在这里举两个例子说明。
public class Dog{
public Dog(){//无参构造方法,注意方法名与类名要相同
}
public Dog(String name){//有参构造方法,建立对象时会根据参数选择不一样的构造方法
}
}
在介绍成员变量与局部变量时,讲到局部变量能够和成员变量重名,可是局部变量优先,若是要访问成员变量,可使用this关键字,举例以下。
public class Dog{
String name;
public Dog(String name){
this.name = name; //this后面的name是成员变量,等号后面的name是构造方法中的局部变量
}
public static void main(String[] args){//主函数
Dog myDog = new Dog("小黑");//建立对象
System.out.println("变量值 : " + myDog.name); //打印Dog类中的成员变量
}
}
输出值:
变量值 : 小黑
3.建立对象
建立一个对象通常须要三步(参考上方示例):
声明:声明一个对象,包括对象名称和对象类型。
实例化:使用关键字new来建立一个对象。
初始化:使用new建立对象时,会调用构造方法初始化对象。
实例
下面举一个完整例子说明如何建立对象。
public class Dog{
String name = "小明";
int age = 1;
public Dog(String name){
System.out.println("名字:" + name);//name为局部变量
}
public Dog(){
System.out.println("名字:" + name);//name为成员变量
}
public Dog(int age){
this.age = age;//将局部变量赋值给成员变量
}
public static void main(String[] args){//主函数
Dog myDog1 = new Dog("小黑");//经过第一个构造方法建立对象
Dog myDog2 = new Dog();//经过第二个构造方法建立对象
Dog myDog3 = new Dog(2);//经过第三个构造方法建立对象
System.out.println("年龄:" + myDog3.age);//调用通过局部变量赋值的成员变量
System.out.println("名字:" + myDog3.name);//调用没有通过局部变量赋值的成员变量
}
}
输出结果:
名字:小黑
名字:小明
年龄:2
名字:小明