2022Java学习笔记(初识Java_05)


1. 面向对象与面向过程

  • 面向过程:当需要实现一个功能的时候 具体每一步都要亲力亲为 详细处理每一个细节
  • 面向对象:当需要实现一个功能的时候 不关心具体步骤 只是找一个可以实现该功能的对象

示例

	//打印输出 [10,20,30,40,50]
	//面向过程:
   //打印[10,20,30,40,50]
      int[] array={10,20,30,40,50};
      System.out.print("[");
      for (int i = 0; i < array.length; i++) {
          if(i==array.length-1){
              System.out.println(array[i]+"]");
          } else {
              System.out.print(array[i]+",");
          }
      }
      System.out.println("================");
      //面向对象 打印[10,20,30,40,50]
      System.out.println(Arrays.toString(array));

2. 类

  • 类的定义:
    • 成员变量:
      String name;
      int age;
    • 成员行为:
      public void eat(){}
      public void sleep(){}
  • 成员变量直接定义在类中 在方法外
  • 成员方法不要写static关键字
  • 通常情况下 一个类不能直接使用 需要根据类创建一个对象才能使用
    • 1.导包: 指出需要使用的类在什么位置
      import 包名称.类名称;
      import demos.democlass;
    • 对于和当前类属于同一个包的情况 可以省略包语句不写
    • 2.创建格式:
      类名称 对象名 = new 类名称();
      democlass stu = new democlass();
    • 3.使用:
      使用成员变量:对象名.成员变量名
      使用成员方法:对象名.成员方法名(参数);
 		//导包
        //创建:类名称 对象名 = new 类名称();
        democlass stu = new democlass();
        //使用成员变量
        System.out.println(stu.name);// null
        System.out.println(stu.age);// 0

        System.out.println();
        //改变对象当中的成员变量内容
        //将右侧的字符串赋值交给stu对象当中的name成员变量
        stu.name="cow";
        stu.age=20;
        System.out.println(stu.name);
        System.out.println(stu.age);
		public class Phone {
		    public String brand;
		    public double price;
		    public String color;
		    //成员方法
		    public void call(String who) {
		        System.out.println("给" + who + "打电话");
		    }
		    public void sendMessage(){
		        System.out.println("群发短信");
		    }
		}

		import demodemos.Phone;//导入包
        Phone iphone = new Phone();
        iphone.call("1234567890");
        iphone.sendMessage();

        System.out.println(iphone.price);
        System.out.println(iphone.color);

        iphone.brand="iphone";
        iphone.price=4222;
        iphone.color="green";
        System.out.println(iphone.brand);
        System.out.println(iphone.price);
        System.out.println(iphone.color);
    //对象作为形参
    public static void method(Phone iphone){
        System.out.println(iphone);// 传址 demodemos.Phone@5b480cf9
        System.out.println(iphone.brand);
        System.out.println(iphone.price);
        System.out.println(iphone.color);
    }
    public static Phone getPhone(){
        Phone xiaomi = new Phone();
        xiaomi.brand="xiaomi";
        xiaomi.price=1999;
        xiaomi.color="Green";
        return xiaomi;
    }
    
	//使用对象类型作为方法返回值:
    Phone xiaomi = getPhone();
    System.out.println(xiaomi.brand);
    System.out.println(xiaomi.color);
    System.out.println(xiaomi.price);

3. 局部变量和成员变量

 1.定义位置不一样
 	局部变量:在方法的内部
 	成员变量:在方法的外部 直接写在类中
 2.作用范围不一样
 	局部变量:只有在方法当中才可以使用 除了方法就不能再用
 	成员变量:整个类全都可以通用
 3.默认值不一样:
 	局部变量:没有默认值 如果想要使用必须手动进行赋值
 	成员变量:如果没有赋值 会有默认值
 4.内存位置不一样:
 	局部变量:位于栈内存
 	成员变量:位于堆内存
 5.生命周期不一样:
 	局部变量:随着方法进栈而诞生 随着方法出栈而消失
 	成员变量:随着对象的创建而诞生 随着对象被垃圾回收而消失
public class Demo{
	String name;// 成员变量
	public void methodA(){
		int num=20;// 局部变量
		System.out.println(num);
		System.out.println(name);
	}
	public void methodB(int param){//方法的参数就是局部变量
		//参数在方法调用的时候 必然会被赋值
		System.out.println(param);
		int age;// 局部变量
		System.out.println(age);// 错误写法 没有赋值不能用
		System.out.println(num);// 错误写法 超出使用范围
		System.out.println(name);
	}	
}

4. 面向对象的三大特征

  • 面向对象的三大特征: 封装 继承 多态
  • 封装性在Java的体现:
    方法就是一种封装 关键字private也是一种封装
    封装就是将一些细节信息隐藏起来 对于外界不可见
      public static  int getMax(int[] array){
          int max=array[0];
          for (int i = 0; i < array.length; i++) {
              if(array[i]>max){
                  max=array[i];
              }
          }
          return max;
      }
      
      int[] array={5,15,50,100};
      int max=getMax(array);
      System.out.println("最大值:"+max);
  • private的作用及使用:
    用private关键字来修饰需要保护的成员变量
    • 一旦使用了private进行修饰 那么本类当中仍然可以随意访问
      但是 超出了本类范围之外就不能直接访问了
  • 间接访问private成员变量 就是定义一对Getter/Setter方法
  • 对于boolean值 Getter方法一定要写成isXxx形式 而setXxx规则不变
public class Person{
    String name;// 姓名
    private int age;// 年龄
    public void show(){
        System.out.println("My name is"+name+", I am "+age+" years old.");
    }

    //这个成员方法 专门用来向age设置数据 必须是setAge 必须有参数无返回值
    public void setAge(int num){
        if(num>0){
            age=num;
        } else{
            System.out.println("数据不合理");
        }
    }
    //这个成员方法 专门用来获取age的数据 必须是getAge 必须无参数有返回值
    public int getAge(){
        return age;
    }
}

public class coding{
    public static void main(String[] args) {
        Person person = new Person();
        person.show();
        person.name="lix";
        //person.age=-20;
        //直接访问private的内容 错误写法
        person.setAge(20);//间接访问age赋值
        person.show();
        person.setAge(-20);//数据不合理
        person.show();
    }
}

练习:使用private定义学生类

public class Student{

    private String name;// 姓名
    private int age;// 年龄
    private  boolean male;// 性别

    public void setMale(boolean b){
        male=b;
    }
    public boolean isMale(){
        return male;
    }
    public void setName(String str){
        name=str;
    }
    public String getName(){
        return name;
    }
    public void setAge(int num){
        if(num>0){
            age=num;
        } else{
            System.out.println("数据不合理");
        }
    }
    public int getAge(){
        return age;
    }
}

Student stu = new Student();
stu.setName("myname");
set.setAge(20);
set.setMale(true);
System.out.println("姓名"+stu.getName());
System.out.println("年龄"+stu.getAge());
System.out.println("性别"+stu.isMale());

5. this方法介绍

  • 当方法的局部变量和类成员变量重名的时候 根据就近原则 优先使用局部变量
  • 如果需要访问本类的成员变量 需要使用格式:this.成员变量名
  • 通过谁调用的方法 谁就是this
public class Person{
    String name;// 自己的名字
    //参数name是对方的名字 成员变量name是自己的名字
    public void sayHello(String name){
        System.out.println(name+",hello. I am "+this.name);
        System.out.println(this);//打印this地址
    }
}

public static void main(String[] args) {
    Person person = new Person();
    //设置自己的名字
    person.name="myname";
    person.sayHello("yourname");
    System.out.println(person);//地址值 这里和this的地址值相同
    //即 通过谁调用的方法 谁就是this
}

6. 构造方法

  • 构造方法是专门用来创建对象的方法 当我们通过关键字new来创建对象时 其实就是在调用构造方法
  • 格式 :
public 类名称(参数类型 参数名称,...){
	方法体;
}

注意事项:

  • 1.构造方法的名称必须和所在的类名称完全一样
  • 2.构造方法不要写返回值类型 void不要写
  • 3.构造方法不能return一个具体的返回值
  • 4.如果没有编写任何构造方法 那么编译器会默认赠送一个构造方法 没有参数 方法体 什么事情都不做-public Student(){}
  • 5.一旦编写了至少一个构造方法 那么编译器将不再赠送
  • 6.构造方法也可以进行重载 - 重载:方法名称相同 参数列表不同
public class Student{
    //成员变量
    private String name;
    private  int age;

    //无参数的构造方法
    public Student(){
        System.out.println("无参数的构造方法执行");
    }
    //全参数的构造方法
    public Student(String name,int age){
        System.out.println("全参数的构造方法执行");
        this.name=name;
        this.age=age;
    }

    //Getter Setter
    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return age;
    }
}

public static void main(String[] args) {
    Student stu1 = new Student();// 无参构造
    System.out.println();
    Student stu2 = new Student("myname",20);// 全参构造
    System.out.println("姓名:"+stu2.getName()+",年龄:"+stu2.getAge());
    //如果需要改变对象中的成员变量的数据 仍需要使用setXxx的方法
    stu2.setAge(21);// 改变年龄
    System.out.println("姓名:"+stu2.getName()+",年龄:"+stu2.getAge());
}

7. 定义一个标准类

  • 一个标准的类通常要拥有下面四个组成部分:
    • 1.所有的成员变量都要使用private关键字修饰
    • 2.为每一个成员变量编写一对儿Getter/Setter方法
    • 3.编写一个无参数的构造方法
    • 4.编写一个全参数的构造方法
  • 快捷键 Alt+Insert

代码示例

public class Student{
    private String name;// 姓名
    private int age;// 年龄

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student() {
    }

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

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

public static void main(String[] args) {
    Student stu1 = new Student();
    stu1.setName("myname");
    stu1.setAge(21);
    System.out.println("姓名:"+stu1.getName()+",年龄:"+stu1.getAge());
    System.out.println();
    Student stu2 = new Student("myname",18);
    System.out.println("姓名:"+stu1.getName()+",年龄:"+stu1.getAge());
    stu2.setAge(19);
    System.out.println("姓名:"+stu1.getName()+",年龄:"+stu1.getAge());
}

  • ——————END-2022-04-06——————
  • 个人学习笔记,如有纰漏,敬请指正。
  • 感谢您的阅读。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

苡荏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值