day6 类与对象(1)

什么是类

“类” 就是 “同一类事物”,从许多相似的个体抽象出他们共同的特征并为这群个体命名,称之为类。
类拥有属性(成员变量)、行为(成员方法)

什么是对象

类中的每一个个体都是对象,类的某个具体化的实例是对象。

还是参考百度百科吧:https://baike.baidu.com/item/%E7%B1%BB%E5%92%8C%E5%AF%B9%E8%B1%A1/1394902?fr=aladdin

如何创建一个对象

  1. 先创建再声明
    public class Cat{
    	int age;
    	String name;
    	public static void main(String[] args){
    		Cat cat;
    		cat = new Cat();
    	}
    }
    	
    
  2. 直接创建
    public class Cat{
    	int age; 
    	String name;
    	public static void main(String[] args){
    			Cat cat = new Cat();
    	}
    }
    

创建对象的过程

  1. 先加载Person类的信息(属性和方法信息,只加载一次)

  2. 在堆中分配内存,进行默认初始化

  3. 把地址赋值给p,p就指向对象

  4. 进行指定初始化

    public class Cat{
    	int age;
    	String name;
    	public static void main(String[] args){
    			Cat cat = new Cat();
    			cat.name = "Jack";
    	}
    }
    

成员方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方法传参机制

基本数据类型:值拷贝,形参的变化不会影响实参
引用数据类型:地址拷贝,可以通过改变形参的值来改变实参

方法的递归

在这里插入图片描述

方法的重载(OverLoad)

在这里插入图片描述

  1. 重载
    构成重载的要素:方法名相同;参数类型,顺序中至少有一个不同

    public class OvarLoadClass{
    	public static void main(String[] args){
    		OvarLoadClass ovarLoadClass = new OvarLoadClass();
    		ovarLoadClass.cal(1,2);
    		ovarLoadClass.cal(1,2.0);
    		ovarLoadClass.cal(1.0,2);
    	}
    	void cal(int n1,int n2){
    		System.out.println(a1+a2);
    	}
    	void cal(double n1,int n2){
    		System.out.println(n1+n2);
    	}
    	void cal(int n1,double n2){
    		System.out.println(n1+n2);
    	}
    }
    //3
    //3.0
    //3.0
    
  2. 重复定义

    //不构成重载,方法的重复定义
    public class OvarLoadClass{
    	public static void main(String[] args){
    		OvarLoadClass ovarLoadClass = new OvarLoadClass();
    		ovarLoadClass.cal(1,2);
    	}
    	void cal(int a1,int a2){
    		System.out.println(a1+a2);
    	}
    	void cal(int n1,int n2){
    		System.out.println(n1+n2);
    	}
    }
    // 抛出重复定义的异常
    

    返回类型不同不是构成重载的条件。

    // 同样不构成重载,也是方法的重复定义。
    public class OvarLoadClass{
    	public static void main(String[] args){
    		OvarLoadClass ovarLoadClass = new OvarLoadClass();
    		ovarLoadClass.cal(1,2);
    	}
    	void cal(int a1,int a2){
    		System.out.println(a1+a2);
    	}
    	int cal(int a1,int a2){
    		return a1+a2;
    	}
    }
    // 抛出重复定义的异常
    
  3. 未发生自动转换的优先级更高

    // 在调用ovarLoadClass.cal(1,2);时优先调用void cal(int a1,int a2)
    public class OvarLoadClass{
    	public static void main(String[] args){
    		OvarLoadClass ovarLoadClass = new OvarLoadClass();
    		ovarLoadClass.cal(1,2);
    	}
    	void cal(int a1,int a2){
    		System.out.println("int + int");
    		System.out.println(a1+a2);
    	}
    	int cal(int a1,double a2){
    		System.out.println("int + double");
    		System.out.println(a1+a2);
    	}
    }
    //int + int 
    //3
    

可变参数

在这里插入图片描述
在这里插入图片描述

  1. 可变参数可以接收0~多个同类型数据作为参数

    // 可以接收0~多个int型参数
    // 使用可变参数时可以当作数组来使用。
    public class VarParameters{
    	public static void main(String[] args){
    		VarParameters varParameters = new VarParameters();
    		varParameters .cal();
    		varParameters .cal(1,2,3);
    		varParameters .cal(1,2,3,4,5);
    	}
    	public int cal(int... parameters){
    		System.out.println("number of parameters:"+ parameters.length);
    		int sum=0;
    		for(int i=0;i<parameters.length;++i){
    			sum += parameters[i];
    		}
    		return sum;
    	}
    }
    
  2. 可变参数的实参可以为数组

    public class VarParameters{
    	public static void main(String[] args){
    		int arr[]={1,2,3,4,5};
    		VarParameters varParameters = new VarParameters();
    		// 以int型数组作为参数
    		varParameters .cal(arr);
    	}
    	public int cal(int... parameters){
    		System.out.println("number of parameters:"+ parameters.length);
    		int sum=0;
    		for(int i=0;i<parameters.length;++i){
    			sum += parameters[i];
    		}
    		return sum;
    	}
    }
    
  3. 可变参数可以和其他参数放在一起,但是可变参数必须放在最后

    public class VarParameters{
    	public static void main(String[] args){
    		VarParameters varParameters = new VarParameters();
    		varParameters .cal("OK",1,2,3,4,5);
    		varParameters .cal(1,2,3,4,5,"Wrong");
    	}
    	// 正确的
    	public int cal(String s,int... parameters){
    		System.out.println("number of parameters:"+ parameters.length);
    		int sum=0;
    		for(int i=0;i<parameters.length;++i){
    			sum += parameters[i];
    		}
    		return sum;
    	}
    	// 错误的
    	public int cal(int... parameters, String s){
    		System.out.println("number of parameters:"+ parameters.length);
    		int sum=0;
    		for(int i=0;i<parameters.length;++i){
    			sum += parameters[i];
    		}
    		return sum;
    	}
    }
    
  4. 一个形参列表最多只能出现一个可变参数

    public class VarParameters{
    	public static void main(String[] args){
    		VarParameters varParameters = new VarParameters();
    		varParameters .cal(1,2,3,"Wrong","错误的");
    	}
    	// 错误的,最多只能有一个可变参数
    	public int cal(int... parameters, String... s){
    		System.out.println("number of parameters:"+ parameters.length);
    		int sum=0;
    		for(int i=0;i<parameters.length;++i){
    			sum += parameters[i];
    		}
    		return sum;
    	}
    }
    
  5. 感觉不如直接声明数组作为参数代替可变参数。

    public class VarParameters{
    	public static void main(String[] args){
    		VarParameters varParameters = new VarParameters();
    		int arr[]={1,2,3};
    		String arrs[]={"Wrong","错误的"};
    		varParameters .cal(arr,arrs);
    	}
    	// 错误的,最多只能有一个可变参数
    	public int cal(int[] parameters, String[] s){
    		System.out.println("number of parameters:"+ parameters.length);
    		int sum=0;
    		for(int i=0;i<parameters.length;++i){
    			System.out.println(parameters[i]);
    		}
    		for(int i=0;i<s.length;++i){
    			System.out.println(s[i]);
    		}
    		return sum;
    	}
    }
    

作用域

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 局部变量的作用域在它的直属{}之内。
    public class Cat{
    	// 全局变量
    	int age;
    	String name;
    	public static void main(String[] args){
    		Cat cat;
    		cat = new Cat();
    		// 局部变量
    		int h=5;
    	}
    	public void miaomiao(){
    		// 局部变量
    		String s = "喵呜~";
    		System.out.println(s);
    	}
    }
    

2.全局变量可以不初始化,有默认值; 局部变量必须初始化,没有默认值

public class Cat{
	// 全局变量,默认分别是0和null
	int age;
	String name;
	public static void main(String[] args){
		Cat cat;
		cat = new Cat();
		// 正确的,局部变量,必须初始化
		int h=5;
		// 错误的, 没有初始化会报错"可能尚未初始化变量n"
		int n;
	}
	public void miaomiao(){
		// 局部变量
		String s = "喵呜~";
		System.out.println(s);
	}
}
  1. 同名局部变量遵循就近原则
    public class Cat{
    	// 全局变量
    	int age;
    	String name;
    	String s="喵喵~";
    	public static void main(String[] args){
    		Cat cat;
    		cat = new Cat();
    		cat.miaomiao();
    	}
    	public void miaomiao(){
    		// 局部变量
    		System.out.println(s);
    		String s = "喵呜~";
    		System.out.println(s);
    	}
    }
    // 喵喵~
    // 喵呜~
    
  2. 同一个方法中不能声明两个同名变量
    public class Cat{
    	// 全局变量
    	int age;
    	String name;
    	public static void main(String[] args){
    		Cat cat;
    		cat = new Cat();
    		cat.miaomiao();
    	}
    	public void miaomiao(){
    		// 局部变量
    		String s = "喵呜~";
    		// 错误的,不可以在同一方法中重复声明同名变量
    		String s= "喵喵~";
    		System.out.println(s);
    	}
    }
    
  3. 全局变量可以被本类和其他类使用
    本类不用多说
    被其他类使用
    public class Cat{
    	// 全局变量
    	int age;
    	String name;
    	public static void main(String[] args){
    		Cat cat;
    		cat = new Cat();
    		Dog dog = new Dog();
    		// 方法1,声明其他类的对象来获取它的全局变量
    		System.out.println(dog.name);
    		// 方法2,通过传其他类的对象为参数获取它的全部变量
    		cat.getDogName(dog);
    	}
    	public void getDogName(Dog dog){
    		System.out.println(dog.name);
    	}
    }
    class Dog{
    	String name="软软";
    	public static void main(String[] args){
    		Dog dog = new Dog();
    		System.out.println(dog.name);
    	}
    }
    
  4. 局部变量不可以加修饰符
    public class Cat{
    	// 全局变量
    	int age;
    	String name;
    	// 太对了,全局变量可以加修饰符
    	private String color;
    	public static void main(String[] args){
    		Cat cat;
    		cat = new Cat();
    		cat.miaomiao();
    	}
    	public void miaomiao(){
    		// 正确的,局部变量就是这样声明,不加修饰符
    		String s = "喵呜~";
    		// 错误的,局部变量不能这样声明,加了修饰符会报错
    		private String s2 ="s2";
    		System.out.println(s);
    	}
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值