javase面向对象1:类与对象、成员变量与成员方法

目录

1. 笔记

1.1 类与对象

1.2 成员变量

1.3 成员方法

2. 练习

2.1 实例变量的练习

2.2 定义和调用实例化方法练习


1. 笔记

1.1 类与对象

1. 面向对象
    这是一种思想,在学习过程中,知识点很杂、也很难!
   1.1 面向过程与面向对象
       开饭店:
            调研(饭店开在哪一块最合适,饭店主要方向是什么)
            找门面
            装修
            开业
            进货
            招待客户
            做菜
            收银
            打扫卫生
            ....
       面向过程:以过程,步骤为主,考虑怎么做!自己是执行者
       面向对象:以对象(谁)为主,考虑谁来做,谁能做!自己是指挥者
   1.2 类和对象
       类: 人类(一个抽象的概念)    狗类
               具有相同特征和相同行为的对象的集合!
       对象: 张三、李四...(真正存在的实体)   万事万物皆对象
        真正存在的实体(可以通过属性和行为描述的事务),就可以将其称之为对象!
            张三的身高是175,体重是70kg,学历是本科...
            会唱歌、会跑、会跳、会敲代码...
       类和对象的关系:
            类是对一类事物的描述,是抽象的
            对象是一类事物的实例,是具体的
                类是对象的模板,对象是类的实体
            生产手机:
                手机设计图(理解为类)
                手机(理解为对象)

       在java中是先有类,在有对象的!(对象是类的实例)
   1.3 类的定义(设计图的研发)
        属性:人的姓名:String name;人的年龄:int age;人的性别:char gender
            成员变量
        行为: 方法
            成员方法
            之前定义的类,都属于测试类,目的是运行main方法!
        定义一个人类:Person

   1.4 对象的创建和使用
       ① 对象名的定义
       ② 对象名=new 类名();  实例化一个对象,将该对象赋给对象名
       合二为一:
            类名  对象名 = new 类名();
            自定义的类就是自己创建的数据类型,都是引用数据类型!
       ③ 对象的属性访问
            a.赋值
                对象名.属性名=值;
            b.取值
                对象名.属性名;
   
    1.5 内存问题
        根据类创建对象,在new的时候,会在堆内存开辟空间
        为所有的属性赋初始值(当前数据类型的默认值)
        每个对象都有自己的一块独立区域(用于自己的属性值存储)

1.2 成员变量

1 类的五大成员( 成员变量、成员方法、构造器、初始化块、内部类)
     1.1 成员变量
          ①分类
              实例变量 ★ (变量是属于对象)
              类变量 (变量是属于类的--->将static再讲)
          ②实例变量如何声明
              【修饰符】 数据类型 变量名 【=值】
                  值得设置,相当于在实例化对象的时候,该成员变量的默认值
                  后期是可以覆盖的!
          ③如何使用实例变量
              前提:必须得有对象
              访问方式:对象名.成员变量名
     1.2 成员变量的特点
          ①成员变量是有默认值的(默认值是多少,看数据类型)
          ②实例变量的值是每个对象独立的
     1.3 成员变量和局部变量的区别
          ①位置不同
              成员变量:直接在类体中
              局部变量:某个局部(方法内、if内、循环内...)
          ②作用范围不一样
              成员变量:本类以及其他类都能使用(要符合访问修饰符)
              局部变量:只能在当前大括号内使用
          ③初始化值得不同
              成员变量:有默认值
              局部变量:没有初始化,不允许使用
          ④内存中位置不同
              成员变量:在堆内存
              局部变量:在栈内存
          ⑤生命周期不同
              成员变量:对象被回收的时候销毁
              局部变量:当前大括号运行完毕,就销毁

      1.4 成员变量的类型可以使任意类型(基本数据类型、引用数据类型)

1.3 成员方法

1.类的第二大成员 ---> 成员方法
    类:一组具有相同特征(属性),相同行为(方法)的对象的集合,抽象出来的概念
    属性:通过变量去存储数据
    方法:一段可以运行的代码(实现某些需求)

 2.最简单的方法
    public void 方法名(){
        //n行代码--> 在main方法可以写的代码,在此处都可以写
    }

3.方法的原则
    ①先声明后使用
    ②调用一次执行一次,不调用不执行
        调用一次,在栈中压入一个方法栈。(回头解释)
4.成员方法的分类
    ①实例方法  属于对象的,必须有对象才可以
    ②类方法(在static中详细介绍)  属于类
5.方法的语法
    【修饰符】 返回值类型  方法名(【形参列表】){方法体}
    ①修饰符 可有可无,后期讲
    ②返回值类型 ☆
    ③方法名  自定义名字(符合变量命名的规则和规范)
    ④形参列表  ☆
    ⑤方法体 main方法中可以写的,该位置都可以写
6.方法的形式
    a.无参无返回值
        【public】 void print(){代码体}
        无参:方法名的小括号内无任何内容
        无返回值:返回值位置写void
    b.有参无返回值
        【public】void print(参数列表){代码体}
        有参:在方法名的小括号内,指定参数列表
            参数列表:可以是任意数据类型(基本数据类型,引用数据类型)
            调用方法的时候,必须按照指定的参数列表传值(类型、个数、顺序)
        无返回值:返回值位置写void
    c.无参有返回值
        【public】 返回值类型 方法名(){代码体}
        无参:方法名的小括号内无任何内容
        有返回值:
            返回值类型需要指定
            返回值类型只能指定一个(思考:如果想要返回多个数据)
               如果是多个相同类型的数据,可以使用数组
               如果类型是不一样的多个数据,可以使用集合(后面也是一个重要知识点)
            返回值类型可以是任意数据类型(基本、引用)
        调用方如何接收返回值:
         数据类型  变量名=对象.方法(); //接受数据的数据类型要和返回值类型相一致
         return关键字
            功能:结束当前方法(遇到return,方法就会立刻结束)
            如果无返回值,返回值类型位置写void,方法内默认是存在一个return语句
            如果有返回值,方法中必须检测到有return是执行的,执行到就立刻结束方法
    d.有参有返回值
        参数:和之前一样
        返回值:和之前一样
 7.遇到需求的时候,要自己分析,方法的参数列表是什么,返回值类型是什么
 8.方法声明的位置是类体中(方法中不能嵌套方法)
 9.实例方法的调用
    9.1 在本类内
        直接调用  语法:   【this.】本类的方法();
            this是当前对象,是当前方法的调用者!
    9.2 在其他类内
        必须通过对象去调用!
 10.方法调用内存相关  ☆
    方法是调用一次执行一次,不调用不执行
 11.形参和实参
    形参:方法声明是指定的参数列表
    实参:方法调用时,传递的真正的数据

2. 练习

2.1 实例变量的练习

练习一:声明矩形类

需求:声明矩形类,包含长、宽两个实例变量,并创建矩形对象,求面积

public class Field_Demo1 {
	public static void main(String[] args) {
		//创建对象
		Rectangle r = new Rectangle();
		r.length = 1;
		r.width = 2;
		System.out.println("长:" + r.length);
		System.out.println("宽:" + r.width);
		System.out.println("面积:" + r.length*r.width);
	}
}
class Rectangle{
	double length;
	double width;
}

练习二:声明员工类

需求:声明员工类,包含姓名、性别、薪资三个实例变量,并创建员工对象,打印信息

public class Field_Demo2 {
	public static void main(String[] args) {
		//创建对象
		Employee emp = new Employee();
		emp.name = "柴林燕";
		emp.gender = '女';
		emp.salary = 10000;
		System.out.println("姓名:" + emp.name);
		System.out.println("性别:" + emp.gender);
		System.out.println("薪资:" + emp.salary);
	}
}
class Employee{
	String name;
	char gender;
	double salary;
}

练习三:声明日期类

需求:声明日期类,包含年、月、日三个实例变量,并创建日期对象,显示信息

public class Field_Demo3 {
	public static void main(String[] args) {
		//创建对象
		MyDate today = new MyDate();
		today.year = 2019;
		today.month = 7;
		today.day = 5;
		System.out.println("今天是" + today.year + "年" + today.month + "月" + today.day);
	}
}
class MyDate{
	int year;
	int month;
	int day;
}

练习四:声明丈夫和妻子类

需求:

丈夫类:包含姓名和妻子属性

妻子类:包含姓名和丈夫属性

创建一对夫妻对象,并打印信息

public class Field_Demo4 {
	public static void main(String[] args) {
		//创建丈夫对象
		Husband husband = new Husband();
		//创建妻子对象
		Wife wife = new Wife();
		//指定属性
		husband.name = "邓超";
		wife.name = "孙俪";
		husband.wife = wife;
		wife.husband = husband;
		
		System.out.println("丈夫:" + husband.name + ",他妻子是:" + husband.wife.name);
		System.out.println("妻子:" + wife.name + ",他丈夫是:" + wife.husband.name);
	}
}
class Husband{
	String name;
	Wife wife;
}
class Wife{
	String name;
	Husband husband;
}

上述代码内存图:

 2.2 定义和调用实例化方法练习

练习一:比较两个数据是否相同

  • 分析:定义方法实现功能,需要有两个明确,即返回值参数列表

    • 明确返回值:比较整数,比较的结果只有两种可能,相同或不同,因此结果是布尔类型,比较的结果相同为true。

    • 明确参数列表:比较的两个整数不确定,所以默认定义两个int类型的参数。

class Count {
    /*
        定义比较两个整数是否相同的方法
        返回值类型,比较的结果布尔类型
        参数:不确定参与比较的两个整数
    */
    public boolean compare(int a, int b) {
        if (a == b) {
            return true;
        } else {
            return false;
        }
    }
}

public class Method_Exer1 {
    public static void main(String[] args) {
        // 创建对象
        Count c = new Count();
        
        //调用方法compare,传递两个整数
        //并接收方法计算后的结果,布尔值
        boolean bool = c.compare(3, 8);
        System.out.println(bool);
    }
}

练习二:计算两个整数的最大值

  • 分析:定义方法实现功能,需要有两个明确,即返回值参数列表

    • 明确返回值:比较整数,比较的结果是它们中的一个,所以是int。

    • 明确参数列表:比较的两个整数不确定,所以默认定义两个int类型的参数。

class Count{
	public int max(int a,int b){
		return a>b?a:b;
	}
}
public class Method_Exer2{
	public static void main(String[] args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
		System.out.print("请输入一个整数:");
		int x = input.nextInt();
		
		System.out.print("请输入另一个整数:");
		int y = input.nextInt();
		
		Count c = new Count();
		int max = c.max(x, y);
		System.out.println(x + "," + y + "中的最大值是:" + max);
	}
}

练习三:计算1+2+3+...+100的和

  • 分析:定义方法实现功能,需要有两个明确,即返回值参数

    • 明确返回值:1~100的求和,计算后必然还是整数,返回值类型是int

    • 明确参数:需求中已知到计算的数据,没有未知的数据,不定义参数

class Count {
	/*
        定义计算1~100的求和方法
        返回值类型,计算结果整数int
        参数:没有不确定数据
    */
    public int getSum() {
        //定义变量保存求和
        int sum = 0;
        //从1开始循环,到100结束
        for (int i = 1; i <= 100; i++) {
            sum = sum + i;
        }
        return sum;
    }
}

public class Method_Exer3 {
    public static void main(String[] args) {
        // 创建对象
        Count c = new Count();
        
        //调用方法getSum
        //并接收方法计算后的结果,整数
        int sum = c.getSum();
        System.out.println(sum);
    }
}

练习四:实现不定次数打印HelloWorld

  • 分析:定义方法实现功能,需要有两个明确,即返回值参数

    • 明确返回值:方法中打印出HelloWorld即可,没有计算结果,返回值类型void

    • 明确参数:打印几次不清楚,参数定义一个整型参数

class PrintUtil {
	/*
          定义打印HelloWorld方法
          返回值类型,计算没有结果 void
          参数:不确定打印几次
    */
    public void printHelloWorld(int n) {
        for (int i = 0; i < n; i++) {
            System.out.println("HelloWorld");
        }
    }
}

public class Method_Exer4 {
    public static void main(String[] args) {
        // 创建对象
        PrintUtil p = new PrintUtil();
        
        //调用方法printHelloWorld,传递整数
        p.printHelloWorld(9);
    }
}

练习五;实现打印不确定(行数、列数、组成的符号)矩形的图形

  • 分析:定义方法实现功能,需要有两个明确,即返回值参数

    • 明确返回值:方法中打印出line行column列由sign组成的矩形即可,没有计算结果,返回值类型void

    • 明确参数:打印几行,几列,什么符号组成不清楚,参数定义三个参数

public class Method_Exer5 {
	public static void main(String[] args) {
		//创建对象
		PrintUtil pu = new PrintUtil();
		
		//调用printRectangle方法
		pu.printRectangle(5, 10, "&");
	}
}
class PrintUtil{
	public void printRectangle(int line, int column, String sign){
		for (int i = 0; i < line; i++) {
			for (int j = 0; j < column; j++) {
				System.out.print(sign);
			}
			System.out.println();
		}
	}
}

练习六:声明圆类

  • 需求:声明一个圆

    • 包含实例变量radius保存圆对象半径的值

    • 包含实例方法getArea求圆对象的面积

    • 包含实例方法getPerimeter求圆对象的周长

    • 包含实例方法getInfo获取圆对象的详细信息

  • 分析:定义方法实现功能,需要有两个明确,即返回值参数

    • 明确返回值

      • getArea()方法需要返回面积值,所以是double类型

      • getPerimeter()方法需要返回周长值,所以是double类型

      • getInfo()方法需要返回圆对象的完整信息,所以是String类型

    • 明确参数

      • getArea()方法,求面积值通过实例变量radius计算即可,所以不需要再设计参数

      • getPerimeter()方法,求周长通过实例变量radius计算即可,所以不需要再设计参数

      • getInfo()方法,返回圆对象的完整信息,由实例变量radius的值,和通过getArea()方法计算的面积值,通过getPerimeter()方法计算的周长的值组成,所以不需要再设计参数

public class Method_Exer6 {
	public static void main(String[] args) {
		//创建对象
		Circle c = new Circle();
		c.radius = 1.2;
		System.out.println(c.getInfo());
	}
}
class Circle{
	double radius;
	
	public double getArea(){
		return 3.14 * radius * radius;
	}
	
	public double getPerimeter(){
		return 2 * 3.14 * radius;
	}
	
	public String getInfo(){
		return "半径:" + radius + ",面积:" + getArea() + ",周长:" + getPerimeter();
	}
}

练习七:声明客户和账户类、银行类

  • 声明账户类Account

    • 包含:账户和余额两个实例变量

    • 包含save存款方法

    • 包含withdraw取款方法

  • 声明客户类Customer

    • 包含:姓名和手机、身份证号、拥有的一个账户,四个实例变量

  • 声明银行类BankClerk

    • 包含open方法,给某个客户对象开户,关联Customer和Account两个对象的信息

class Account{
	String id;
	double balance;
	public void save(double money){
		if(money > 0){
			balance += money;
		}else{
			System.out.println("参数有误");
		}
	}
	public void withdraw(double money){
		if(money <0){
			System.out.println("参数有误");
		}else if(money > balance){
			System.out.println("余额不足");
		}else{
			balance -= money;
		}
	}
}
class Customer{
	String name;
	String tel;
	String cid;
	Account account;
}
class BankClerk{
	public void open(Customer c, Account a){
		c.account = a;
	}
}
public class Method_Exer6 {
	public static void main(String[] args) {
		//创建客户对象
		Customer c = new Customer();
		c.name = "柴林燕";
		c.tel = "10086";
		c.cid = "111111111111111111";
		
		//创建银行卡账号对象
		Account a = new Account();
		a.id = "12345678910";
		a.balance = 0;
		
		//银行对象
		BankClerk b = new BankClerk();
		b.open(c, a);
		System.out.println("姓名:" + c.name + ",电话:" + c.tel + ",身份证号:" + c.cid + ",账号:" + c.account.id + ",余额:" + c.account.balance);
		
		//存款
		c.account.save(1000);
		System.out.println("姓名:" + c.name + ",电话:" + c.tel + ",身份证号:" + c.cid + ",账号:" + c.account.id + ",余额:" + c.account.balance);
		
		//取款
		c.account.withdraw(2000);
		//显示信息
		System.out.println("姓名:" + c.name + ",电话:" + c.tel + ",身份证号:" + c.cid + ",账号:" + c.account.id + ",余额:" + c.account.balance);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯丰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值