java 类和对象

一、思维导图

在这里插入图片描述

二、什么是类?

类的目的是为了抽象出一类事物共有的属性和行为功能。通过定义一个类可以实例化很多对象。也就是说,类其实就是创建对象的一个模板,没有类就没有对象。

2.1、类体

2.1.1变量的类型

在这里插入图片描述

2.1.2变量的有效范围

在这里插入图片描述
下面举一个例子来看一下:

public class A {
    int m=10,sum=0; //成员变量,在整个类中都有效
    void f() {
    	if(m>9) {
    		int z=10; //z是方法参数,但是出现在if复合语句中,所以仅在该复合语句中有效
    		z=2*m+z;
    	}
    	for(int i=0;i<m;i++) {
    		sum=sum+i;  //同理,i仅在for循环语句中生效
    	}
    	m=sum; // 合法
    	z=i+sum;  //非法,i和z已失效;
    }
}

如果想要局部变量的名字和成员变量的名字相同,则使用this关键字,则成员变量被隐藏,及这个成员变量在这个方法中暂时失效。

2.2、方法的重载

方法重载是多态性的一种,指一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,也就是要么是参数名不同,要么是参数的个数不同。从而通过一个方法名实现功能的多样性。
如:求面积,通过Area类中getArea这个方法名,通过传入不同的参数获取不同图形的面积。

public class Area {
  float getArea(float r) {
	  return 3.14f*r*r;
  }
  double getArea(float x,int y) {
	  return x*y;
  }
  float getArea(int x,float y) {
	  return x*y;
  }
}

注意:方法的返回类型和参数的名字不参与比较,也就是说,如果两个方法的名字相同,即使类型不同,也必须保证参数不同。

public class Area {
  float getArea(float r) {
	  return 3.14f*r*r;
  }
 
  double getArea(float r) { //错误,duplicate method getArea in type Area
	  return 3.14f*r*r;
  }
}

2.3、构造方法

构造方法是一种特殊的方法,他的名字必须和他所在的类的名字完全相同,而且没有类型,构造方法也可以重载。

class 梯形 {
  float 上底,下底,;
  梯形(){       //构造方法
	  上底=60;
	  下底=100;=20;
  }
  梯形(float x,float y,float h){       //重载
	  上底=x;
	  下底=y;=h;
  }
}

如果类中没有编写构造方法,系统会默认该类只有一个无参数,且方法体中没有语句的构造方法。

2.4、易犯错误

1、可以在声明类的成员变量的同时赋予其初值,但对成员变量的操作只能放在方法中,这是因为类体的内容由成员变量的声明和方法的定义两部分组成。
这样是错误的:

class A{
  int a;
  float b;
  a=12;      //非法
  b=12.56f;
}

这样是正确的:


class A{
  int a=12;
  float b=12.56f;
}

或者

class A{
  int a;
  float b;
  void f(){ //可以在方法中操作
	  int c;
	  a=12;      
	  b=12.56f;
	  c=100;
	  }
}

2、实例方法既能对类变量操作也能对实例变量操作,而类方法只能对类变量进行操作。

  int a;
  static int b;
  void f(int x,int y) {  //实例方法无限制
	  a=x;
	  b=y;
  }
  static void g(int z) {  //类方法
	  b=23;  //合法,b是类方法
	  a=z;  //非法,类方法不能操作实例变量a
  }
}


3、一个类中的方法可以互相调用,实例方法可以调用该类中的其他方法;类中的类方法只能调用该类中的方法,不能调用实例方法。

三·、对象

类中声明的变量称为对象,对象负责存放引用,以确保对象可以操作分配给该对象的变量以及调用类中的方法。

2.1创建对象

包括对象的声明和为对象分配变量两个步骤,声明一个对象后得到一个空对象,空对象不能使用。

四、 static关键字

实例变量与类变量的区别:
实例成员变量的引用存储在栈中,实体存储在堆中,不同对象的实例变量互不相同,为他们分配了不同的存储空间。实例对象可以通过对象访问,不能使用类名访问。
类变量存储在类方法的方法区中,所有的对象共享类变量,不再重新分配内存,不仅可以通过某个对象访问,也可以通过类名访问。

五、this关键字

this关键字可以出现在实例方法和构造方法中,但是不能出现在类方法中。因为类方法可以通过类名直接调用,这时,可能还没有任何对象产生。

5.1在构造方法中使用this

当this关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象。

public class People {
	int leg,hand;
	String name;
	People(String s){
		name=s;
		this.init();  //也可以省略this,写成init()
	}
	void init() {
		leg=2;
		hand=2;
		System.out.println(name+"有"+hand+"只手"+leg+"条腿");
	}
	public static void main(String[] args) {
		People yuanyuan=new People("媛媛"); //创建yuanyuan时,构造方法中的this就是对象yuanyuan
	}
}

5.1在实例方法中使用this

代表正在调用该方法的当前对象。

六、访问权限

6.1 private

用关键字private修饰的成员变量和方法称为私有变量和私有方法。只有在本类中创建该类的对象时,这个对象才能访问自己的私有变量和类中的私有方法。
例1:

class A{
	private int money;
	private int getMoney() {
		return money;
	}
	public static void main(String[] args) {
		A exa=new A();  //对象exa在A类中
		exa.money=3000;
		int m=exa.getMoney();
		System.out.println("money="+m);
	}
  
}

优点:当用某个类在另外一个类中创建对象后,如果希望该对象直接访问自己的变量,应将此变量的访问权限设置为private,这样,用户不需要特别清楚某一类中具体有哪些对象,使得对数据的操作更加合理,也有利于后期代码的维护。
例2:
Student.java

public class Student {
 private int  age;
 public void setAge(int age) {  //实例方法
	 if(age>=7&&age<=28) {
		 this.age=age;   //使用this,操作ming和hong这两个对象
	 }
 }
 public int getAge() {
	 return age;
 }
}

People.java

public class People{
  public static void main(String[] args) {
	  Student ming=new Student();
	  Student hong=new Student();
	  //为ming和hong设置年龄
	  //ming.age和hong.age都是非法的,因为ming和hong已经不在Stuent类中
	  ming.setAge(19);
	  hong.setAge(21);
	  System.out.println("ming的年龄"+ming.getAge());
	  System.out.println("hong的年龄"+hong.getAge());
  } 
}

6.2 public

用关键字public 修饰的成员变量和方法称为公有变量和公有方法。
Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。

6.3 protected

用关键字protected 修饰的成员变量和方法称为受保护的成员变量和受保护的方法。
在同一个包中,父类定义一个以protected修饰的变量的时候,子类和父类的实例都是可以访问的。
但是在不同的包中的时候,父类中定义一个以protected修饰的变量的时候,子类可以通过的实例来直接访问,父类不可以通过的实例来直接访问。

6.4 default

又称为友好变量和友好方法,只有在同一个包中,才能访问。

6.5 注意

1、不能用protected和private修饰类
2、访问限制修饰符按访问权限从高到低的排列顺序时public、protected、private

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值