Java 局部变量和成员变量

零、复习昨日

一、一日一题(数组,OOP)

package com.qf0208;
import java.util.Arrays;
public class Task2 {
	public static void main(String[] args) {
		int[] arr1 = {1,2,5,8,9};
		int[] arr2 = {1,3,0};
		plus(arr1, arr2);
	}

	/* 写一个方法 用于合并两个int类型的数组  合并法则如下
     *    {1,2,5,8,9}{1,3,0}---->{0,1,2,3,5,8,9}
     */
	public static void plus(int[] arr1,int[] arr2) {
		 
		// 合并
		int[] arr3 = new int[arr1.length + arr2.length];
		System.arraycopy(arr1, 0, arr3, 0, arr1.length);
		System.arraycopy(arr2, 0, arr3, arr1.length, arr2.length);
		System.out.println(Arrays.toString(arr3));
		
		// 去重
		// 创建新数组,存放不重复的元素
		int[] arr4 = new int[arr3.length];
		Arrays.sort(arr3);
		arr4[0] = arr3[0];
		int index = 1;
		// 取源数组
		for (int i = 1; i < arr3.length; i++) {
			boolean flag = false;// 不重复
			// 去重后数组的元素
			for (int j = 0; j < arr4.length; j++) {
				if (arr3[i] == arr4[j]) {
					flag = true;
				}
			}
			if (!flag) {
				arr4[index] = arr3[i];
				index++;
			}
		}
		System.out.println(Arrays.toString(arr4));
		int[] arr5 = new int[index];
		System.arraycopy(arr4, 0, arr5, 0, index);
		System.out.println(Arrays.toString(arr5));
	}
}

同一个Java文件中只能有一个公共的类,且公共的类的名字要和外面的文件名一样

二、面向对象练习(方法参数返回值)

联系方法参数,进行返回值

package com.qf0213;

/**
 * @escription:
 * @author:灰总
 * @time:
 */

public class Phone {
    String brand;
    double price;

    public boolean call(String num){
        System.out.println(brand + "打电话");
        return true;
    }
}

class TestPhone{
    public static void main(String[] args) {
        Phone phone = new Phone();
        phone.brand = "MI";
        phone.price = 1888.0;
        boolean isok = phone.call("110");
        System.out.println("打电话是否成功?" + isok);
    }
}

三、局部变量&成员变量

成员变量属于对象。

局部变量

成员变量

位置

方法参数列表和方法体内

类中方法外

作用域

只能在方法内部使用

类中所有方法

初始值

使用前必须主动赋值

成员变量会随着创建对象时被赋默认值

内存位置

在栈的栈帧中

在内存的堆中

生命周期

会随着方法进栈而出现,方法执行完出栈而消失

在对象创建时出现并赋初始值,失去引用后会被gc(垃圾回收机制处理)回收

public class Phone {

    /**
     * 成员属性就是成员变量
     * 1 类中方法外
     * 2 类中所有方法都可以使用
     * 3 成员变量会随着创建对象时被赋默认值(即可以不用主动考虑初始值的事)
     * 4 成员变量在内存的堆中
     * 5 在对象创建时出现并初始化,失去引用后,会把垃圾回收机制处理(GC)
     */
    String brand;
    double price;

    /**
     * 局部变量
     * 1 方法参数列表内和方法体内
     * 2 只能在方法内部使用
     * 3 局部变量使用前必须主动赋值
     * 4 局部变量是在栈的栈帧中
     * 5 随着方法进栈而出现,方法执行完出栈而消失
     */
    public boolean call(String num) {
        int a = 1;
        System.out.println(a );
        System.out.println(brand + "打电话" + num);
        System.out.println("这个手机价格:" + price);
        return true;
    }
}

四、this关键字

this就是代表当前对象
当前对象就是指谁调用这个方法,this就代表调用这个方法的对象。
因为this代表的是对象,所以它就可以调用对象的属性和方法
this.属性;
this.方法();
package com.qf.oop;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc
 */
public class Car {

    String brand;
    double price;

    public void run() {
        int a = 1;
        String brand = "五菱";
        System.out.println("this:"+this );// 输出的是car的地址,代表car对象
        /**
         * 当成员变量和局部变量重名时
         * 使用时,默认使用方法自己的局部变量(就近原则)
         * 如果必须使用成员变量,就使用this来调用
         * 因为this代表对象,所以可以调用对象属性
         */
        System.out.println(this.brand + "车跑动,跑了"+a+"公里" );
        
        // this调用方法
        this.didi();
    }

    public void didi() {
        System.out.println("车鸣笛" );
    }

}
class TestCar {
    public static void main(String[] args) {

        Car car = new Car( );
        System.out.println("car:" + car );
        car.brand = "BYD";
        car.price = 150000;

        car.run();
    }
}
使用this的场景总结:
当成员变量和局部变量重名时,用this属性来代表成员变量

五、构造方法【重要】

构造方法又叫构造器(constructor),是用来创建对象的。
类名 对象名 = new 类名();
其实这个语法应该这么叫:
类名 对象名 = new 构造方法();

特点:

每个类都默认有一个无参构造
没有返回值,也不能写void
方法名必须是类名,类名必须大写
只能通过new来调用

特殊的:类中没有一个显示构造方法,那么就会提供一个隐式无参构造,一旦显示写出任何一个构造方法,隐式的不再提供。
具体作用(构造方法一旦执行)
在堆中开辟空间,分配地址空间
属性和方法被初始化
然后执行构造方法内部的代码
对象创建成功将地址值赋给变量(对象名)
有参构造

在创建对象时,调用有参构造方法,方法内部有属性赋值的过程,所以有参构造创建出的对象的属性是指定值。

public class Student {
    String name;
    int age;

    /**
     * 显示的写出无参构造
     * 构造方法语法特点
     * 1. 没有返回值,也不能写void
     * 2. 方法名必须是类名
     */
    public Student(){
        System.out.println("无参构造" );
    }

    /**
     * 有参构造
     */
    public Student(String name,int age) {
        this.name = name;
        this.age = age;
    }

    public void coding(){
        System.out.println("敲代码" );
    }
}
class TestStudent{
    public static void main(String[] args) {
        // ???? 能不能创建出的对象,内部的属性直接有值
        // 能!!! 有参构造
        Student s2 = new Student("奥利安娜", 20);

        System.out.println(s2.age );
        System.out.println(s2.name);
    }
}
总结有参构造和无参构造的区别
相同点:都能创建出对象
不同点:无参构造创建出的对象属性是默认值;有参构造创建出的对象属性是指定值

即两者都是创建对象,只是不同的效果,看情况选择使用

六、重载

重载:overload;方法的重载

方法是在同一个类中
方法名相同,参数列表不同
参数列表不同:个数、类型、顺序不同都叫不同
好处:
方便调用,根据传入的参数的个数、顺序、类型决定执行那个方法,不同的设计取不同的方法名。

七、封装

类的封装:将代码封装在一个类中,隐藏一些代码实现的逻辑,对外提供一个公共的访问方式

类的封装实现步骤:
属性私有
提供对应的set、get方法
set、get方法,很固定
一定是set+首字母大写 setXxx getXxx
set方法有参数无返回值
get方法无参数有返回值
package com.qf0213;

/**
 * @escription:
 * @author:灰总
 * @data:
 */

public class People {

    // 私有化,这个属性就只能在当前类中使用
    private int age;
    private String name;

    // 提供set方法供赋值
    public void setAge(int age){
        if (age <= 120 && age >= 0){
            this.age = age;
        } else {
            System.out.println("年龄有误!");
        }
    }

    // 提供get方法取值
    public int getAge(){
        return age;
    }

    public void setName(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }
}

class TestPeople{
    public static void main(String[] args) {
        People people = new People();
//        people.name = "liuzhuo";
//        people.age = 23;
        people.setAge(23);
        int age = people.getAge();
        people.setName("liuzhuo");
        String name = people.getName();
//        System.out.print(people.name + " ");
        System.out.print(name);
        System.out.println(age);
    }
}

八、总结

局部变量成员变量:能分清,初始值不同
this:代表当前对象,场景用来区分成员变量和局部变量
构造方法:用来创建对象,油藏和无参构造的区别
重载:是代码的一种设计方式,可以让方法调用更方便
类的封装:先属性私有后提供一对儿set、get方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值