面向对象

该博文是以下资料的学习笔记:

传智播客Java基础视频

该博文仅为个人学习使用,谢谢


成员变量、局部变量区别:

成员变量定义在类中,整个类中都可以访问。

局部变量定义在函数、语句、局部代码块中,只在所属的区域类有效。

成员变量存在于堆内存的对象中,随着对象的创建而存在,随着对象的消失而消失。

局部变量存在于栈内存的方法中,随着所属区域代码的执行而存在,所属区域代码执行完即消失。

成员变量都有默认初始化值,局部变量没有默认初始化值。


匿名对象:当对象对属性、方法仅进行一次使用的时候,就可以简化为匿名对象


基本数据类型和引用数据类型参数传递的区别,参考06面向对象13。


封装:隐藏对象的属性和实现细节,仅对外提供公共的访问方式。便于使用,提高安全性


private:权限修饰符,用于修饰成员,不能修饰局部,私有的内容只能在本类中访问



构造函数:

函数名与类名相同,不用定义返回值类型,没有具体返回值。

作用:给对象进行初始化。创建对象都必须要通过构造函数进行初始化,一般类中,如果没有定义构造函数,则会执行默认的空参数的构造函数,如果在类中定义了构造函数,则类中默认的构造函数就没有了

多个构造函数是以重载的形式存在的。

构造函数:对象创建时,就会调用与之对应的构造函数,并且只调用一次,对对象进行初始化


在描述事物时,该事物一存在就具备一些内容时,这些内容就定义在构造函数中。

细节:

class Person{
	private String name;
	private int age;
	void Person(){} // 前边加了void,这个方法就不是构造函数了,而是一般函数,只不过,该方法不符合首字母小写的规范
	// 如果下边语句被注释掉,那么Person p = new Person();语句就会报错
	// 原因是自定义了构造函数,默认的空参数的构造函数就没有了
//	Person(String name,int age){}  
}


this关键字:

当成员变量和局部变量重名时,可以用关键字this来区分

class Person{
	private String name;
	//第一种写法:
	Person(String n){
		name = n;
	}
	//第二种写法:
	/*Person(String name){
		name = name;
	}*/
	void speak(){
		System.out.println(name);
	}
}
Person p = new Person("zhangsan");
p.speak();//上边的第一种写法,该处打印结果是:zhangsan,第二种写法打印结果是:null

哪个对象调用了this所在的函数,this就代表哪个对象。相关图参考07面向对象7this关键字原理图解。

在构造函数中调用构造函数:

class Person{
	private String name;
	private int age;
	Person(String name,int age){
//		this();//The constructor Person() is undefined
//		this("lisi");//this可以在构造函数中调用其他构造函数,对构造函数的调用必须是函数的第一个语句
//		this.name = name;
		this.age = age;
	}
	Person(String name){
		this.name = name;
	}
	void speak(){
		System.out.println(name+"..."+age);
	}
}


static关键字:

用于修饰成员,static修饰的成员被所有对象所共享,优先于对象存在,static的成员随着类的加载就已经存在了,所以多了一种调用方式,可以直接被类名调用:类名.静态成员。static修饰的数据是共享数据,对象中存储的是特有数据。


成员变量(实例变量)和静态变量(类变量)的区别:

1、生命周期不同

成员变量:随着对象的存在(销毁)而存在(销毁)

静态变量:随着类的加载(消失)而存在(消失)

2、调用方式不同

成员变量:只能被对象调用

静态变量:可以被对象和类名调用

3、别名不同

成员变量:也称为实例变量

静态变量:也称为类变量

4、存储位置不同:

成员变量:存储在堆内存的对象中,是对象的特有数据

静态变量:存储在方法区(又叫共享数据区)的静态区,是对象的共享数据


使用静态的注意事项:

1、无法从静态上下文中引用非静态变量(方法),静态方法只能访问静态成员。

2、静态方法中不可以使用this或super关键字

3、如果一个类的所有对象的某个成员变量的值都相同,那么这个成员变量就可以考虑用static修饰,如果一个函数没有访问到非静态的成员变量,那么,仅为调用该方法而创建对象是没有意义的,这时候就可以将该函数定义为静态


关于主函数:

public class StaticDemo {
    public static void main(String[] args) {
		System.out.println(args.length);//0
	}
	public static void main(int args) {
		//主函数是固定格式的,所以该函数只是主函数的一个重载函数,并不会报错
	}
}


静态代码块:

随着类的加载而执行,而且只执行一次,作用是给类进行初始化

如果一个类的所有成员都是静态的,就不需要创建对象,可以用静态代码块来对类进行初始化


构造代码块:

给所有对象进行初始化

在函数中定义的叫做局部代码块,是为了限制变量的生命周期


public class StaticDemo {
	static{
		System.out.println("静态代码块main");
	}
	{
		System.out.println("构造代码块main");
	}
    public static void main(String[] args) {
    	new People().show();
    	new People().show();
    }
}	
class People{
	static{
		System.out.println("静态代码块People");
	}
	{
		System.out.println("构造代码块People");
	}
	People(){
		System.out.println("People构造函数");
	}
	public void show(){
		System.out.println("show...");
	}
}

输出结果是:

静态代码块main
静态代码块People
构造代码块People
People构造函数
show...
构造代码块People
People构造函数
show...




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值