Java基础笔记(六)面向对象(2)

Java基础笔记(六)面向对象(2)

Java面向对象基础

1.成员变量和局部变量的区别

(1)在类中的位置不同
  成员变量:类中方法外,一般定义在类中最上部位置
  局部变量:方法定义中或者方法声明上
(2)在内存中的位置不同
  成员变量:在堆内存中
  局部变量:在栈内存中
(3)生命周期不同
  成员变量:随着对象的创建而存在,随着对象的消失而消失
  局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
(4)初始化值不同
  成员变量:有默认值
  局部变量:没有默认值,必须定义,赋值,然后才能使用

2.类名作为形式参数时

在java中,当你看到一个方法的形式参数是一个类名时,一般传递实际参数时需要的是该类的实例对象,如果这个类是接口或者抽象类,一般需要的是该类的子类实例对象。
举例:

//定义一个学生类,这里没有给public修饰,则是default,属于另一种访问控制权限修饰符,后面详细介绍
class Student {
	//定义两个成员变量
	String name;
	int age;
	//上面两个成员变量默认值是null和0,取决于其的数据类型
	
	//有参构造方法,可以赋值给两个成员变量
	public Student(String name,int age){
		this.name = name;
		this.age = age;
	}
	
	//定义一个方法
	public void show(){
		System.out.println("学生姓名:"+name+","+"学生年龄:"+age);
	}
}

public class test{
	public static void main(String[] args) {
		//创建Student对象
		Student s = new Student("李四",20);
		test(s);
		//控制台打出结果:姓名:李四,年龄:20
	}

	public static void test(Student s){
		//这个方法的形参是Student类名,实际要的是一个Student类的对象
		//通过传递的这个对象,我们可以直接调用它的成员变量和方法
		s.show();
	}
}
3.匿名对象

匿名对象,即在创建时不为对象起名而直接创建对象的方式,且通过该方式创建的对象只能使用一次;
应用场景
  A:调用方法,仅仅只调用一次的时候。
  b:可以作为实际参数传递。
匿名对象的创建演示如下:

class Person {
	String name;
	public void show(){
	}
}
class test {
	public static void main(String[] args){
		//创建匿名对象
		new Student();
		//创建匿名对象并调用方法
		new Student().show();
	}
}
4.private修饰符

private是java提供的一种访问权限修饰符,表示私有的意思,可以修饰成员变量和成员方法;被它修饰后的成员只能在本类中被访问;

一般使用的时候是在写一个类的时候,把所有成员变量用private修饰,然后对外提供公共的getXxx()/setXxx()方法来设置和取值;

这样做可以理解为java中的一种封装体现,下面做详细介绍;

5.封装

所谓封装,就是将抽象式函数接口的实现细节包装、隐藏起来,只对外提供公共的访问方式。
优点:

  1. 良好的封装能够减少耦合,提高代码的复用性。

  2. 类内部的结构可以自由修改,提高代码可维护性。

  3. 可以对成员变量进行更精确的控制。

  4. 隐藏信息和实现的细节。

封装的体现:
在java中,封装一般是用访问控制权限符对于需要隐藏封装的实现细节代码进行访问修饰控制的;常见的封装修饰符是private,用它修饰的变量或方法只能类的内部使用,外界要使用它修饰的变量或方法只能通过类提供的公共访问功能来使用。
代码示例:

/*
 * 这里封装一个"人"类,只对外提供公共的赋值姓名和年龄的功能
 */
public class Person {
	// private修饰成员变量,这样外部类创建对象就不能直接访问本类的成员变量
	private String name;
	private int age;
	
	//下面分别提供公共的设置姓名和年龄的方法
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	//接着提供公共的得到姓名和年龄的方法
	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}

上面的代码就实现了对一个“Person”类的封装,这里只封装了两个成员变量,然后提供公共的设置值和取值方法,这样外界创建对象时就不能直接访问这两个成员变量,只能通过我们给出的公共方法访问,这就实现了我们对类的封装;

6.this关键字

this关键字,在使用的时候代表的是当前类的引用对象;哪个对象调用方法,该方法内部的this就代表了调用这个方法的对象;
它解决了局部变量和成员变量冲突的问题,比如上面封装代码中的成员变量name和局部变量name,如果不加this,就会出现局部变量覆盖成员变量的情况,即此时的赋值操作是没有意义的;

7.构造方法

(1) 作用:用于对对象的数据进行初始化
(2)格式:
   A:方法名和类名相同
   B:没有返回值类型,连void都不能有
   C:没有返回值

(3)构造方法的注意事项
  A:如果我们没写构造方法,jvm编译时将提供一个默认的无参构造方法
  B:如果我们给出了构造方法,系统将不再提供默认构造方法
    如果这个时候,我们要使用无参构造方法,就必须自己给出。
    推荐:永远手动自己给出无参构造方法。

给成员变量赋值除了setXXX()方法外,还可以通过带参构造在创建对象时手动赋值;

8.创建一个类的实例对象时到底做了哪些事情

假如我们有一个Student类,里面有两个成员变量name和age,那么我们在做Student s = new Student();时到底做了哪些呢?
(1)把Student.class文件加载到内存
(2)在栈内存为s变量开辟空间
(3)在堆内存为学生对象申请空间
(4)给学生的成员变量进行默认初始化。null,0
(5)给学生的成员变量进行显示初始化。如果有赋值就将值赋给成员变量;
(6)通过构造方法给成员变量进行初始化。如果构造方法中也进行了赋值,就对成员变量进行赋值,且会覆盖之前的默认值和成员变量的初始赋值,例如在写Student类时直接给name赋值了,但这时构造方法再次赋值的话会覆盖这个值;
(7)对象构造完毕,把地址赋值给s变量

9.static关键字

static表示静态的意思,可以修饰成员变量和成员方法。
静态的特点:
  A:随着类的加载而加载
  B:优先于对象存在,从上面可以看到,创建对象是在加载class后的操作;
  C:被类的所有对象共享
    这其实也是我们判断该不该使用静态的依据。
  D:可以通过类名调用
    既可以通过对象名调用,也可以通过类名调用,建议通过类名调用。

静态对象的内容处在方法区内,也叫静态区;

静态的注意事项:
静态方法中没有this对象,且静态只能访问静态,如静态方法不能访问非静态成员方法,也不能访问非静态成员变量;
如果想在静态方法中使用非静态方法,一般只能通过创建对象的方式调用,这也解释了为什么我们在main方法中为什么不能直接使用我们写的非静态方法;

静态变量和成员变量的区别
  A:所属不同
    静态变量:属于类,类变量
    成员变量:属于对象,对象变量,实例变量
  B:内存位置不同
    静态变量:方法区的静态区
    成员变量:堆内存
  C:生命周期不同
    静态变量:静态变量是随着类的加载而加载,随着类的消失而消失
    成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失
  D:调用不同
    静态变量:可以通过对象名调用,也可以通过类名调用
    成员变量:只能通过对象名调用

10.main方法详解

再来看main方法,它是java程序的主入口,由jvm直接调用;
public:权限最大,因为要给jvm调用
static:不用创建对象调用
void:返回值给jvm没有意义
main:就是一个常见的名称。
String[] args:可以接收数据,提供程序的灵活性,早期用它来实现键盘录入,现在已被Scanner取代;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值