自学内容网 自学内容网

Java面向对象(类和对象)(自己学习整理的资料)

目录

一.面向对象思想

二.类和对象

三:定义类的步骤

四.创建对象

五.用Java代码写一个简单的登录系统

练习

六.关于类的方法

七.类的无参无返回值方法

八.方法的返回值

练习

关于方法调用问题

九.全局变量和局部变量

十.笔记


一.面向对象思想

  • 就只关注参与这个事件的对象,不关心具体过程,具体过程打散到一个或者多个对象,在main函数中我们可以组合出具体过程。

二.类和对象

  • 把具有相同属性和方法的对象归为一个类(class)。

  • 类是对象的模板或蓝图,类是对象的抽象化,对象是类的实例化。

  • 类不代表具体的事物,而对象表示具体的事物。(ps:对象是现实生活中看得见,摸的着的具体的事物)。

三:定义类的步骤

  • 定义类名
  • 编写类的属性
  • 编写类的方法

练习:

编写一个表示小狗的简单类Dog——它表示的不是一只小狗,而是狗这个物种。

public class lian 
    //静态属性
    String name;//名称
      int age;//年龄
              //动态属性  行为   方法
        System.out.println("我的名字是"+name + ".我今年" + age+"岁了");
    }
}

四.创建对象

  • 语法

类名 对象名 = new 类名();

引用对象成员:使用"."进行以下操作

引用类的属性:对象名.属性

应用类的方法:对象名.方法名()

Dog dog = mew Dog();
dog.name = "小黑";
dog.age = 5;
dog.sayHello();
public class Dog {
    //main函数是程序的入口函数
    public static void main(String[] args) {
       //在Java中新建一个狗狗对象
Dog dog = new Dog();
      dog.name = "小黑";
      dog.age = 5;

      Dog dog2 = new Dog();
      dog2.name = "小白"
              dog2.age = 3;
        dog1.sayHello();
        dog2.sayHello();
    }
}

练习

  • 定义一个Car类,有品牌brand,颜色color,和价格price三个属性,有一个介绍自己的方法名称为show(),请使用程序定义该类,并创建一个对象。
public class color {
    //品牌
    String brand;
    //颜色
    String color;
    //价格
    int price;

    //自我介绍的方法
    public void show(){
        System.out.println("汽车的品牌为:"+brand+",汽车的颜色为:"+color+",汽车的价格为:"+price);
    }
}

五.用Java代码写一个简单的登录系统

  • 首先定义一个User类存初始的用户名和密码
  • 用户自定义的类也是一种类型(ps:不属于Java中的基本类型,属于引用类型)
package lian;

public class UserInfo {
   String username;
   String password;
}
  •  在写一个面向的对象的登录页面
package lian;

import java.util.Scanner;

public class ren {
    public static  void main(String[] args) {
        UserInfo[] users = new UserInfo[50];
        UserInfo info = new UserInfo();
        info.username = "li";
        info.password = "666666";
        users[0] = info;

        Scanner input = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String uname = input.next();
        System.out.println("请输入密码:");
        String upwd = input.next();
        boolean flag = false;//登录失败

        //判定是否成功登录
        for (int i = 0;i < users.length;i++){

            if (users[i] != null && users[i].username.equals(uname) && users[i].password.equals(upwd)){
                     flag = true;
                     break;
            }
        }
        if (flag == true){
            System.out.println("登录成功");
        }else {
            System.out.println("登录失败");
        }
    }
}

练习
  • 创建一个Movie类,有电影名称、导演、演员三个属性。写一个打印所有属性信息的方法。

先编写一个定义的类作为引用类型

package lian;

public class Movie {
String moviename;
String director;
String[] actors = new String[5];
public void initData(){
    actors[0] = "张三";
    actors[1] = "李四";
    actors[2] = "王五";
    actors[3] = "赵二";
    actors[4] = "刘一";
      }

      //写一个介绍电影信息的方法
    public void show(){
        System.out.println("电影名称为:" + moviename);
        System.out.println("电影导演为:" + director);
        System.out.println("电影的参演人员有:");
        //列举
        for (int i = 0;i < actors.length;i++){
            System.out.println(actors[i]);
        }
    }
}

再用一个main类打印输出

package lian;

import java.util.Scanner;

public class lian {
    public static void main(String[] args) {
Movie movie = new Movie();
movie.moviename = "人生";
movie.director = "李";
movie.initData();
       //调用自我介绍的方法
       movie.show();
        }
    }

ps:这样用的话作为引用类中的数组其实是有bug的,如果有两部电影调用演员,那么就会调用相同的演员数组。

可做如下更改:

  • 首先在引用类型中注释掉
  • 然后在主函数类中更改代码
package lian;


public class lian {
    public static void main(String[] args) {
Movie movie = new Movie();
movie.moviename = "人生";
movie.director = "李";
movie.actors[0] = "张三";
movie.actors[1] = "李四";
movie.actors[2] = "王五";
movie.actors[3] = "赵二";
movie.actors[4] = "刘一";
//movie.initData();
       //调用自我介绍的方法
       movie.show();
        System.out.println("------");
        //创建第二部电影
        Movie movie2 = new Movie();
        movie2.moviename = "我的人生";
        movie2.director = "人";
        movie2.actors[0] = "为";
        movie2.actors[1] = "国";
        movie2.actors[2] = "家";
        movie2.actors[3] = "谋";
        movie2.actors[4] = "福";
        movie2.show();
        }
    }

ps:这样一来就可以两个不同的电影有不同的演员。

六.关于类的方法

  • 定义一个方法就是定义了一个功能。也就是类可以有什么能力,可以做到什么事情。

  • 定义类方法的五要素:

  1. 访问修饰符

  2. 返回值类型

  3. 方法名

  4. 参数列表

  5. 方法体

ps:(图截取自视频老师讲解)

七.类的无参无返回值方法

package lian;

public class Dog {
    public void run(){
        System.out.println("小黑在跑");
    }
    public void bark(){
        System.out.println("小黑在叫");
    }
}
package lian;

public class dog2 {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.run();
        dog.bark();
    }
}

八.方法的返回值

  1. 如果方法具有返回值,方法中必须使用关键字return返回该值,返回值类型为该返回值的类型。

  2. 如果方法没有返回值,返回值的类型应为void(不能省略)。

练习
  • 从键盘接收三门课分数,计算三门课的平均分和总成绩,编写成绩计算类实现功能。

先定义一个引用类型

package lian;

public class Calc {
    int chinese;
    int math;
    int english;
        public int getTotal () {
            int totalScore = chinese + math + english;
            return totalScore;
        }
            public double getAvgScore () {
                //第一种求平均分的方法
               // double result = (chinese + math + english) / 3.0;
               // return result;
                //第二种平均分的方法
                return getTotal()/3.0;
            }
        }

再用一个main主函数类

package lian;

import java.util.Scanner;

public class kecheng2 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
      Calc calc = new Calc();
        System.out.println("请输入语文成绩:");
        calc.chinese = input.nextInt();
        System.out.println("请输入数学成绩:");
        calc.math = input.nextInt();
        System.out.println("请输入英语成绩:");
        calc.english = input.nextInt();

        int total = calc.getTotal();
        //调用一下求平均分的方法
        double avgScore = calc.getAvgScore();
        String result = String.format("%.2f", avgScore);
        System.out.println("总分为:"+total);
        System.out.println("平均分为:"+result);

    }
}
关于方法调用问题
  • 如果两个方法不在同一个类中,我们先要实例化对象,然后再通过对象名.方法名()调度。

  • 如果两个方法在同一个类中,那么我们直接通过方法名称调用即可。

九.全局变量和局部变量

  • 变量声明的位置决定变量作用域

全局变量是指定义在任何函数之外的变量,也就是不被任何“{函数体}”所包含,作用域(有效范围)是从定义变量的位置开始到源文件(整个程序)结束

全局变量是在类中定义的变量,它不属于任何一个方法。所有方法都可以共性(读取值,修改值),并且全局变量不赋初值,系统会给默认值。

全局变量特点:系统会给默认值。如果是整型,默认值为0。

局部变量是指在一个函数(包括main函数)内部定义的变量,它只在本函数内部有效,其他函数不能使用这些变量,函数的参数也就是局部变量。

局部变量:在方法中定义的变量,出了方法所在的{}它就死亡了。

十.笔记

package lian;

public class lian {
    public static void main(String[] args) {
        String str1 = "abc";
        String str2 = "abc";
        if (str1 == str2) {
            System.out.println("=");
        }
    }
}

ps:固定的两个格式(或者说两个静态的字符串)可以输出“=”,但不建议这样用,容易出问题。

package lian;

import java.util.Scanner;

public class lian {
    public static void main(String[] args) {
        String str1 = "abc";
        Scanner input =new Scanner(System.in);
        String str2 = input.next();
        if (str1 == str2) {
            System.out.println("=");
        }
    }
}

ps:这样用动态的Scanner输入方式后,结果就不是“=”了,这时的比较就要用equals了。equals既可以识别动态也可以识别静态,因此为了程序的健壮性我们最好引用equals。

  • 在Java中判定一个对象是否为空用的是null。
  • 在Java中判定两个字符串是否相等,用的是equals()。

原文地址:https://blog.csdn.net/Li_030406/article/details/142448578

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!