Java类与对象

引入概念

  • 小花猫的问题:老奶奶养了两只猫:①小白,2岁,白色 ②小花,3岁,黄色

    问题:请设计程序,当输入名字的时候输出对应的猫的花色,年龄。(出现的问题,猫咪不能用我们已经知道的数据类型来表示)

  • 类就是指:猫这个动物类

  • 对象:小白这个整体(名字,年龄,花色,听到铃铛就去吃饭,喵喵叫)

  • 属性:(指的是对象的特征)名字,年龄,花色

  • 方法:(对象具有的行为)听到铃铛就去吃饭,喵喵叫

  • 总结

    • 学习int double String数据类型(java里面自带的) 而类可以看作是自定义的数据类型

    • 对象就是我们具体的案例

入门

  • 小花猫的问题:老奶奶养了两只猫:①小白,2岁,白色,小白叫 ②小花,3岁,黄色,小花叫

    问题:请设计程序,当输入名字的时候输出对应的猫的花色,年龄,叫法。

    import java.util.Scanner;
    
    public class Text {
        public static void main(String[] args) {
    
            cat_ []cats = new cat_[2];
            cats[0] = new cat_();
            cats[1] = new cat_();
    
            cats[0].name = "小白";
            cats[0].age =2;
            cats[0].color = "白色";
            cats[1].name = "小花";
            cats[1].color = "黄色";
            cats[1].age = 2;
    
    
            Scanner scan = new Scanner(System.in);
            String name = scan.next();
            boolean flag = false;
            for (int i = 0 ;i<cats.length;i++){
                if (name.equals(cats[i].name)){
                    cats[i].show();
                    flag = true;
                }
            }
    
            if (!flag){
                System.out.println("没找到");
            }
    
        }
    }
    class cat_{
        String name;
        int age;
        String color;
    
        void call(){
            System.out.println(name+"叫");
        }
    
        void show(){
            System.out.println(name);
            System.out.println(age);
            System.out.println(color);
            call();
        }
    }

 

内存分配

 

 

  • 解析:b=a,是a和b有相同的地址,所以b.name=a.name=小明。b.age改变了相同的地址下的age,所以a也跟着改变了。b=null,断掉了连向堆的线,也就是说在堆里面没有b的空间,只是一个变量名。输出b.age出错。

  • 答案:小明 200 b.age出现异常

重载

  • 重载的基本介绍:java中允许同一个类中,多个同名方法同时存在,但要求形参列表不一致!

  • 使用细节(来求和sum举例)

    • 方法名:必须相同(都是sum)

    • 形参列表:必须不同(参数名无要求)

      void sum(int a ,int b)和void sum(int m,int n)不构成

    • 返回值:无要求(一个int 一个void不构成重载)

      void sum(int a ,int b)和int sum(int m,int n)不构成

public class text {
	public static void main(String[] args){
		Meth meth = new Meth();
		meth.m (10);//输出
		meth.m (1,4);
		meth.m ("xiaoming");
	}
}
class Meth{
	public void m (int a){
		System.out.println(a*a);
	}
	public void m (int a1,int a2){
		System.out.println(a1*a2);
	}
	public void m(String a){
		System.out.println(a);
	}
}
public class text {
	public static void main(String[] args){
		Meth meth = new Meth();
		System.out.println(meth.max(12,19));
		System.out.println(meth.max(12.9,19.8));
		System.out.println(meth.max(12.2,19.3,12.1));
	}
}
class Meth{
	public int max(int m,int n){
		return m>n?m:n;
	}
	public double max(double m,double n){
		return m>n?m:n;
	}
	public double max (double a ,double b ,double c){
		double more;
		more = a>b?a:b;
		return more>c?more:c;
	}
}

作用域的基本使用(*)

局部变量和全局变量 

  • 全局变量:也就是属性作用域为整个cat类,,cry eat等方法使用属性

  • 局部变量:也就是除了属性之外的其他变量,作用域在定义它的代码块中

  • 全局变量可以不赋值,因为有默认值,局部变量必须赋值,才能使用因为没有默认值

class cat{
    int a;//全局
    
    void cry(){
        int b;//局部
        System.out.println(a);//输出的是默认值0
        System.out.println(b);//报错了
    }
   
    
}
class dog{
    void eat(){
        cat cat_1 = new cat();
        System.out.println(cat_1.a);
    }
}
  • 细节

    • 属性和局部变量可以重名,访问时遵循就近原则

    • 在同一个作用域中,比如在同一个成员方法中,两个局部变量不能重名

    • 当执行方法时,局部变量会创建,当方法执行完毕后,局部变量销毁,但是属性(全局变量)仍然可以使用

    • 全局变量可以加修饰符,局部变量不可以加修饰符

    • 全局变量可以直接在本类当中使用,在其他类中使用要引用

构造器

  • 基本介绍:构造方法也叫做构造器,是类的一种特殊的方法,它的主要作用是完成对新对象的初始化

  • 特点和注意

    • 方法名和类名相同

    • 没有返回值,不用加void

    • 在创建对象时,系统会自动的调用该类构造器完成对象的初始化

    • 一个类可以定义多个不同的构造器,即构造器重载

    • 如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造器

    • 一旦定义了自己的构造器,默认的构造器就会覆盖,就不能使用默认的无参构造器,除非显式的定义一下,即cat(){}

  • 入门

class Cat{
    String name;
    String color;
    int age;
    void Shout(){
        System.out.println(name+"叫");
    }

    void show(){
        System.out.println(name+" "+color+" "+age+"岁");
        Shout();
    }

        public  Cat(String n,String c,int a){
        name = n;
        color = c;
        age = a;
    }

    public Cat(){

    }
}

public class first {
    public static void main(String[] args) {
        Cat cat3 = new Cat("小黑","黑色",3);
        cat3.show();

    }
}

 

this

  • 基本介绍:java虚拟机会给每个对象分配this,代表当前对象。哪个对象调用,this就代表哪个对象

public person (String name , int age ){
this.name = name //this表示当前对象的属性
this.age = age;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值