类和对象的概念:
对象是对客观事物的抽象,类是对对象的抽象。它们的关系是,对象是类的实例,类是对象的模板。对象是通过new className产生的,用来调用类的方法。
一个类可以包含以下类型变量:
1、 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁(所占的内存自动释放)。
2、 成员变量:又叫实例变量,是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
3、 类变量: 又叫静态变量,属于该类中所有实例的共有属性。类变量也声明在类中,方法体之外,但必须声明为static类型。
一个类可以拥有多个方法。
下面的例子可以具体理解一下三种类型的变量:
class Peroson{
private String name;//类的数据成员 null
public int age;// 实例成员变量 0
public String sex;//堆
public static int data;//静态成员变量 类变量 方法区
public static final int data2 = 20;//编译期间可以确定的立即数
public void eat(){//方法 函数 实例成员方法
int data1 = 10;//局部变量
int data2;//栈
data2 = data1+10;
name = "tulun";
System.out.println("data2: "+data2);
System.out.println("Peroson :eat!!");
}
public static void sleep(){//静态成员方法
//name = "zhuge";//!!静态成员方法不能访问静态数据成员变量
System.out.println("Peroson sleep!!");
}
public void show(){
System.out.println("name: "+name+" age: "+age+" sex: "+sex);
}
}
构造方法:
每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
下面是一个构造方法示例:
public class Puppy{
public Puppy(){
}
public Puppy(String name){
// 这个构造器仅有一个参数:name
}
}
创建对象:
1.声明:声明一个对象,包括对象名称和对象类型。
2.实例化:使用关键字new来创建一个对象。
3.初始化:使用new创建对象时,会调用构造方法初始化对象。
声明并实例化对象:类名称 对象名称 = new 类名称();
OuterClass outer = new OuterClass();
调用类中的属性: 对象.方法 = 内容 ;
Peroson.name="华晨宇";
调用类中的方法: 对象.方法() ;
p1.show();
访问静态成员方法 类名.方法名();
Peroson.sleep();
对象生成后的初始化方式
1.静态代码块初始化
class Person{
public static int data; // 类变量(静态变量)
static{//静态代码块初始化 static修饰的成员变量 但是final修饰 静态代码块会在类实例化之前
data = 10;
System.out.println("Peroson static{}!!");
}
}
public class Demo {
public static void main(String[] args) {
Person per = new Person();
System.out.println("data = " + Person.data);
}
}
2.实例块初始化
public Peroson(){
name = "liubei";
age = 18;
sex = "男";
data = 1000;
System.out.println("instance init!!!");
}
3.通过setter,getter方法初始化
public void setName(String name){
this.name = name;//this 调用该方法的对象
}
public void setAge(int age) {
this.age = age;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getName(){
return name;
}
public int getAge() {
return age;
}
public String getSex() {
return sex;
}
4.通过构造函数来初始化对象(调用合适的构造函数 构造函数不止一个)
class Peroson{
private String name;
private int age;
private String sex;
public Peroson(String name,int age,String sex){
this.name = name;
this.age = age;
this.sex = sex;
System.out.println("Peroson(String,int,String)");
}
}
public class Demo {
public static void main(String[] args) {
Person per = new Person("hcy", 3, "man");//调用带有三个参数的构造函数 必须放在第一行的位置上
}
}
几种初始化的优先级:静态代码块最先执行,其次是实例化代码块,然后是getter、setter方法,最后是构造方法。
源文件声明规则:
当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则。
- 一个源文件中只能有一个public类
- 一个源文件可以有多个非public类
- 源文件的名称应该和public类的类名保持一致。例如:源文件中public类的类名是Demo,那么源文件应该命名为Demo.java。
- 如果一个类定义在某个包中,那么package语句应该在源文件的首行。
- 如果源文件包含import语句,那么应该放在package语句和类定义之间。
- 如果没有package语句,那么import语句应该在源文件中最前面。
- import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。