• 学习JAVA第二课


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


    面向对象编程【 Object Oriented Programming】
    C语言:面向过程编程 【Procedure Oriented Programming】
    对象:功能的集合体
    过程:函数,指代“功能”
    这两种编程实现,来源于我们从什么角度看待软件
    
    软件是功能的集合体  --面向过程
    软件是对象的集合体,对象中包含功能--面向对象
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 例子:银行系统里面,用户的账号,密码,姓名,余额是基本信息,如果有很多顾客需要存储这些信息,如何定义变量呢?
    • -将账号,密码,姓名,余额打包定义为一个“顾客”类型,编程时,定义“顾客”,以后使用“顾客”类型
    • 顾客就是一个个对象;打包定义实际上是定义“顾客”这个类型
    编程角度,面向对象的两个基本概念:
    类(class):定义了对象的共同特征     
    对象(Object):通过类,生成一个个对象
    
    例子:将账号,密码,姓名,余额打包定义为一个“顾客”类(class),编程时,通过“顾客”类,生成一个个对象(Object)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1、类的定义:

    class 类名{
    相关变量或者函数
    }
    
    • 1
    • 2
    • 3

    2、类生成对象

    int a;
    类名 对象名=new 类名();
    
    • 1
    • 2

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

     对象名.变量名
    
    • 1
    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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    概念:

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

    4、 对象的引用性质

    Customer zs = new Customer();
    zs的性质类似于C语言里面的指针,Java中叫做对象的引用名称,又叫做引用(reference)
    zs.account
    
    扩充内容:对象数组,一次性定义很多对象,以数组形式保存
    定义100个Customer对象, 每个对象初始值1000元。
    int[] a = new int[100];
    
    Customer[] a = new Customer[100];
    通过循环,给每个元素逐个分配对象内存
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    5、成员函数

    1、为什么需要成员函数
    实现功能的复用
    
    • 1
    2、Java中函数的类型
    (1)无参数无返回类型的函数
    	void 函数名称(){
    	//函数体
    	}
    	(a).void不能省略
    	(b).可以通过return;语句跳出函数
    (2)有参数无返回类型的函数
    	void 函数名称(参数定义列表,用逗号隔开){
    	//函数体
    	}
    	(a).参数不能给默认值
    	(b).函数中定义的参数叫形参;实际调用时传入的参数叫实参
    (3)有参数有返回类型的函数
    	(a).原则上,定义的返回类型和实际返回值类型一致
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    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);
    		
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    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);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    3、函数的参数传递
    1、值传递:简单数据类型
    2、引用传递:数组、对象
    
    • 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);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    4、重载
    问题:Java中能否定义多个同名的函数?
    答案:可以
    
    • 1
    • 2

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

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

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

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

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

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

    思考:构造函数在对象生命周期中,只会自动调用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);
    		
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

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

    4、对象何时消亡?
    对象成为内存垃圾之后(无任何引用指向该对象),垃圾搜集机制会根据系统情况,自动进行垃圾搜集,此时对象消亡
    
    5、可否手动垃圾搜集?
    System.gc();   不建议经常手动垃圾搜集
    
    • 1
    • 2
    • 3
    • 4
    • 5
    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(); 
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    6、对象消亡时,可以通过finalize函数完成一些工作,该函数由系统自动运行,格式如下:
    protected void finalize(){   /*函数体*/  }
    该函数根据情况编写。如果在对象消亡时,要执行一些除了内存释放之外的其他工作,可以编写该函数完成
    
    • 1
    • 2
    • 3
  • 相关阅读:
    9月22日全球Web3加密行业重大资讯大汇总
    源码选择指南:比较流行的同城外卖跑腿系统解决方案
    大数据随记 —— 利用Python分析快手APP全国大学生用户数据(2022 年初赛第四题 )
    JS 之 前端对象详解
    C++ 静态断言 static_assert
    布隆过滤器及其应用
    PHP 接入 Apple 登录对 identityToken 验证
    智源AI日报(2022-09-02):我是如何从头开始写一篇顶级论文的
    C Primer Plus(6) 中文版 第4章 字符串和格式化输入/输出 4.2 字符串简介
    高通平台开发系列讲解(AI篇)SNPE工作流程介绍
  • 原文地址:https://blog.csdn.net/weixin_62529383/article/details/126881541