学习JAVA第二课

这里是学习java的第二课,虽然距离第二节课已经过去近一周了,但是笔记不能忘记


面向对象编程【 Object Oriented Programming】
C语言:面向过程编程 【Procedure Oriented Programming】
对象:功能的集合体
过程:函数,指代“功能”
这两种编程实现,来源于我们从什么角度看待软件

软件是功能的集合体  --面向过程
软件是对象的集合体,对象中包含功能--面向对象
  • 例子:银行系统里面,用户的账号,密码,姓名,余额是基本信息,如果有很多顾客需要存储这些信息,如何定义变量呢?
  • -将账号,密码,姓名,余额打包定义为一个“顾客”类型,编程时,定义“顾客”,以后使用“顾客”类型
  • 顾客就是一个个对象;打包定义实际上是定义“顾客”这个类型
编程角度,面向对象的两个基本概念:
类(class):定义了对象的共同特征     
对象(Object):通过类,生成一个个对象

例子:将账号,密码,姓名,余额打包定义为一个“顾客”类(class),编程时,通过“顾客”类,生成一个个对象(Object)

1、类的定义:

class 类名{
相关变量或者函数
}

2、类生成对象

int a;
类名 对象名=new 类名();

3、通过对象访问对象中的变量

 对象名.变量名
class Customer{
	String account;
	String password;
	String cname;
	double balance;	
	
	public static void main (String[] args) {
		Customer zs = new Customer();
		Customer ls;
		ls = new Customer();
		zs.account = "zhangsan";	zs.balance = 1000;
		ls.cname = "李四";				ls.balance = 5897;
		System.out.println(zs.balance);
		System.out.println(ls.balance);
		
		
	}
}

概念:

  • (1)类和对象的关系:抽象和具体
  • (2)类生成对象:又叫做:实例化对象;对象也被称为类的实例(instance)
  • (3)类里面的变量,又叫做成员变量,保存的是该类所有对象的基本信息(也叫做属性,或者叫做“域(Field)”)
  • (4)类中除了有属性以外,还可以定义功能,功能用函数表示;函数叫做成员函数,又叫做:方法(Method)
总结:类包含成员变量和成员函数,两者统称“成员”(Member)

4、 对象的引用性质

Customer zs = new Customer();
zs的性质类似于C语言里面的指针,Java中叫做对象的引用名称,又叫做引用(reference)
zs.account

扩充内容:对象数组,一次性定义很多对象,以数组形式保存
定义100个Customer对象, 每个对象初始值1000元。
int[] a = new int[100];

Customer[] a = new Customer[100];
通过循环,给每个元素逐个分配对象内存

5、成员函数

1、为什么需要成员函数
实现功能的复用
2、Java中函数的类型
(1)无参数无返回类型的函数
	void 函数名称(){
	//函数体
	}
	(a).void不能省略
	(b).可以通过return;语句跳出函数
(2)有参数无返回类型的函数
	void 函数名称(参数定义列表,用逗号隔开){
	//函数体
	}
	(a).参数不能给默认值
	(b).函数中定义的参数叫形参;实际调用时传入的参数叫实参
(3)有参数有返回类型的函数
	(a).原则上,定义的返回类型和实际返回值类型一致
class Customer{
	String account;
	String password;
	String cname;
	double balance = 0;	
	void cunKuan(double money){
		balance += money;
		System.out.println("存款成功,余额为:" + balance);
	}	
	public static void main (String[] args) {
		Customer zs = new Customer();
		zs.cunKuan(200);
		zs.cunKuan(5000);
		System.out.println(zs.balance);
		
	}
}
class Test{
	void swap(int a, int b){
		int t;  t = a; a = b; b = t;
	}
}
class Customer{
	String account;
	int balance;		
	public static void main (String[] args) {		
		Customer zs = new Customer();	zs.balance = 1000;
		Customer ls = new Customer();	 ls.balance = 2000;
		Test t = new Test();		t.swap(zs.balance,ls.balance);
		System.out.println(zs.balance);
	}
}
3、函数的参数传递
1、值传递:简单数据类型
2、引用传递:数组、对象
class Customer{
	String account;
	double balance;
	void init(String a,double b){
		account = a;
		balance = b;
	}
	public static void main (String[] args) {
		Customer zs = new Customer();
		zs.init("zhangsan",1000);
		System.out.println(zs.account);
	}
}
4、重载
问题:Java中能否定义多个同名的函数?
答案:可以

但是要满足以下条件之一:

  • 1、参数个数不同
  • 2、参数个数相同,类型不同
  • 3、参数个数类型相同,出现顺序不同
    注意:以下两种不能成为函数同名的条件
  • a、返回类型不同
  • b、参数名称不同
    以上功能叫做:重载(overload)
    重载:定义多个形参不同的函数,函数名相同;根据实参类型,自动匹配相应的函数,进行调用

重载:一个函数名称,在不同实参情况下,完成不同的功能

1、构造函数的作用:
对对象进行初始化

2、如何定义?
1)构造函数名称和类名相同
2)构造函数没有返回类型
3)可以定义多个构造函数(重载)
4)构造函数在实例化对象时传入参数

3、构造函数的性质?
1)构造函数在实例化对象时,自动调用1次
2)构造函数在对象生命周期中,只会自动调用1次,不可手动调用
3)如果类没有定义构造函数,系统自动给其一个空的不带参数的构造函数,如果定义了构造函数,该默认构造函数失效

思考:构造函数在对象生命周期中,只会自动调用1次,不可手动调用;如果对象在生命周期中要再次做初始化呢?

  • 方法:将初始化工作写在初始化函数;构造函数调用初始化函数
class Customer{
	String account;
	double balance;
	Customer(String a,double b){
		init(a,b);
	}
	void init(String a,double b){
		account = a;
		balance = b;
	}
	public static void main (String[] args) {
		Customer zs = new Customer("zhangsan",1000);
		System.out.println(zs.account);
		//...		
		//初始化
		zs.init("zhangsan",1000);
		
	}
}

this.变量名/函数名 特别标记该变量或函数为类中的成员

4、对象何时消亡?
对象成为内存垃圾之后(无任何引用指向该对象),垃圾搜集机制会根据系统情况,自动进行垃圾搜集,此时对象消亡

5、可否手动垃圾搜集?
System.gc();   不建议经常手动垃圾搜集
class Customer{
	String account;
	double balance;
	Customer(String account,double balance){
		this.account = account;
		this.balance = balance;
	}
	protected void finalize(){
		System.out.println("TEST");
	}
	public static void main (String[] args) {
		Customer zs = new Customer("zhangsan",1000);		
		zs = new Customer("zs",2000);
		//System.gc(); 
	}
}
6、对象消亡时,可以通过finalize函数完成一些工作,该函数由系统自动运行,格式如下:
protected void finalize(){   /*函数体*/  }
该函数根据情况编写。如果在对象消亡时,要执行一些除了内存释放之外的其他工作,可以编写该函数完成
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值