Java类和对象

类和对象的概念
对象是对客观事物的抽象,类是对对象的抽象。它们的关系是,对象是类的实例,类是对象的模板。对象是通过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语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值