java学习篇之面向对象与项目实战

1、基础认知

  1. 类是抽象的概念,是对象的模板
  2. 对象是具体的事物,是类的具体实例
  3. new关键字是创建实例对象最重要的标志

类名要求:

  1. 要有直白意义,最好是英文
  2. 首字母大写
  3. 不要书字开头,不要有特殊字符

对象名要求:

  1. 要有直白意义,最好是英文
  2. 首字母小写
  3. 不要书字开头,不要有特殊字符

成员变量

成员变量解释隶属于对象的变量

用于保存对象的静态特征

同类型的不同对象拥有相同的成员变量,但值相互独立

public class Dog {
    String name;
    int age;
    float weight;
    public static void main(String[] args) {
        Dog dudu = new Dog();
        dudu.name = "嘟嘟";
        dudu.age = 6;
        dudu.weight = 13.5f;
        Dog lucky = new Dog();
        lucky.name = "Lucky";
        lucky.age = 3;
        lucky.weight = 10.2f;
        System.out.println(dudu.name + "今年" + dudu.age + "岁了");
        System.out.println(lucky.name + "体重" + lucky.weight + "千克");
    }
}

方法

是用于完成特定功能的整段代码

public class Method {
    public String isOddNumber(int num){
        if(num%2==0){
            return "偶数";
        }else {
            return "奇数";
        }
    }
    public static void main(String[] args) {
        int a = 10;
        Method method = new Method();
        String r1 = method.isOddNumber(a);
        System.out.println(a + "是" + r1);
        int b = 11;
        String r2 = method.isOddNumber(b);
        System.out.println(b + "是" + r2);
    }
}

2、封装

包-package

  1. 把功能相似或相关的类组织在同一个包中
  2. 包也采用了树形目录的存储方式
  3. 通过包也可以限定类的访问权限
  4. package关键字用于说明当前的类归属与哪个包

包的命名规范

  1. 包采用“逆域名法”进行命名,用“.”进行分割,单词全部小写
  2. 标准格式:域名后缀.组织机构名.项目名[.模块名].包的职能
  3. import关键字用于导入其他包的类

访问修饰符

访问修饰符的作用范围
修饰词本类同一个包的类继承类其他类
private×××
无(默认)××
protected×
public

封装

  1. 封装即隐藏功能的实现细节
  2. 利用对象与方法是实现封装的直接途径
  3. 良好的封装让代码更容易阅读与维护
例1:排序类的调用
Algorithm.java
package com.simple;

public class Algorithm {
    //传入五个数,进行排序
    public void sort(int a, int b, int c, int d, int e){
        int [] arr = {a, b, c, d, e};
        for (int i = 0; i < arr.length ; i++){
            for (int j = 0; j < arr.length-1-i; j++){
                if (arr[j]>arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }for (int m = 0;m<arr.length; m++){
            System.out.print(arr[m]+ " ");
        }
    }
}
Sorter.java
package com.simple;

public class Sorter {
    public static void main(String[] args) {
        Algorithm algorithm = new Algorithm();
        algorithm.sort(77, 91, 56 ,88, 102);
    }
}
例2:getter与setter的使用
MobileNumber.java
package com.simple;

public class MobileNumber {
    private String owner;
    private String areaCode = "86";
    public long mobileNumber;
    //getter方法,用于读取成员变量的内容
    public String getAreaCode(){
        //this关键字代表当前对象的~~~
        return this.areaCode;
    }
    public String getOwner(){
        return this.owner;
    }
    //setter方法,用于设置成员变量的内容
    public void setOwner(String owner){
        this.owner = owner;
    }
    //Alt+insert快捷键可以快速使用getter和setter方法
    public long getMobileNumber() {
        return mobileNumber;
    }
    public void setMobileNumber(long mobileNumber) {
        this.mobileNumber = mobileNumber;
    }
}

MobileNumberTest.java
package com.simple;

public class MobileNumberTest {
    public static void main(String[] args) {
        MobileNumber mobileNumber = new MobileNumber();
        mobileNumber.setOwner("老单");
        String owner = mobileNumber.getOwner();
        System.out.println(owner+"的区号:"+mobileNumber.getAreaCode());
    }
}

3、继承

Mark1.java

package com.simpl2;

public class Mark1 {
    protected String title;
    protected String color;
    protected String movie;
    public void description(){
        System.out.println("型号:" +title);
        System.out.println("颜色:" +color);
        System.out.println("首次出现电影:" +movie);
    }
    private void fire(){
        System.out.println("利用手臂燃料泵射出火焰");
    }
    public static void main(String[] args) {
        Mark1 mark1 = new Mark1();
        mark1.title = "马克一型";
        mark1.color = "银灰色";
        mark1.movie = "钢铁侠1";
        mark1.description();
        mark1.fire();
    }
}

Hulk.java

package com.simpl2;
//extends关键字用于类的继承,前为子类,其后为父类
//子类会继承父类的(default)/protected/public修饰的成员变量
public class Hulk extends Mark1{
    private void repair(){
        System.out.println("弹射备件替换战损组件");
    }
    public static void main(String[] args) {
        Hulk hulk = new Hulk();
        hulk.title = "反浩克装甲";
        hulk.color = "红色";
        hulk.movie = "复仇者联盟3";
        hulk.description();
        hulk.repair();
    }
}

mark85.java

package com.simpl2;

public class Mark85 extends Mark1{
    private void createShield(){
        System.out.println("利用纳米技术生成防御护盾");
    }
    public static void main(String[] args) {
        Mark85 mark85 = new Mark85();
        mark85.title = "马克85型";
        mark85.color = "红色";
        mark85.movie = "复仇者联盟4";
        mark85.description();
        mark85.createShield();
    }
}

4、多态

多态是同一个行为具有多个不同表现形式或形态的能力(彩照与黑白照)

实现多态的关键是接口

  1. 接口是一个抽象的类型,只提供方法的定义
  2. 实现类的一个接口的具体实现,要实现每一个接口方法的功能
接口:Language
package com.simple3.system;
//创建一个新的接口
public interface Language {
    //模拟各国语言的方法定义
    public void voice();
}
Chinese.java
package com.simple3.system;
public class Chinese implements Language{
    @Override
    public void voice() {
        System.out.println("你好,有什么可以帮到你吗?");
    }
}
English.java
package com.simple3.system;
public class English implements Language{
    @Override
    public void voice() {
        System.out.println("Hi,may I help you?");
    }
}
French.java
package com.simple3.system;
public class French implements Language{
    @Override
    public void voice() {
        System.out.println("Bonjour, puis - je vous aider?");
    }
}
CustomerServer.java
package com.simple3.system;
public class CustomerServer {
    public Language contact(int areaCode){
        if (areaCode == 86){
            return new Chinese();
        }else if (areaCode == 33){
            return new French();
        }else {
            return new English();
        }
    }
}
Customer.java
package com.simple3;
import com.simple3.system.CustomerServer;
import com.simple3.system.Language;

public class Customer {
    public static void main(String[] args) {
        CustomerServer customerServer = new CustomerServer();
        Language language = customerServer.contact(36);
        language.voice();
    }
}

5、ArrayList类

  1. ArrayList是java内置的数据集合,用于存储多个数据
  2. ArrayList是数组替代品,提供了更多数据操作方法
  3. 几乎是每个项目中必用的类
package com.simple4;
import java.util.List;
import java.util.ArrayList;

public class ArrayListSimple {
    public static void main(String[] args) {
        //泛型<类型>,用于规范列表中的数据类型
        List<String> bookList = new ArrayList<String>();  //创建ArrayList对象
        bookList.add("红楼梦");  //向列表末端追加数据
        bookList.add("西游记");
        bookList.add("水浒传");
        bookList.add("三国演义");
        bookList.add(0, "镜花缘");
//        bookList.add(1);  //不建议这么写
        System.out.println(bookList);
        String bookName = bookList.get(2);  //得到指定索引位置(从0开始)的数据
        System.out.println(bookName);
        int size = bookList.size();  //得到列表数据的总数
        System.out.println(size);
        bookList.remove(2);  //移除第三条数据
        System.out.println(bookList);
        bookList.remove(bookList.size()-1);  //移除最后一条数据
        System.out.println(bookList);
        for (String book : bookList){  //遍历所有的数据
            System.out.print("《" + book + "》 ");
        }
    }
}

6、项目开发

利用字符串格式化替代拼接字符串

String template = "%-2s月%-2s日 | 气温:%-4s℃(日)  %-4s℃(夜) | 天气:%s(日)  %s(夜) | 风力:%s(日)  %s(夜) ";
String row = String.format(template, (Object[]) new String[]{
    weather.getMonth(),
    weather.getDay(),
    weather.getDayAirTemperature(),
    weather.getNightAirTemperature(),
    weather.getDayWeather(),
    weather.getNightWeather(),
    weather.getDayWindPower(),
    weather.getNightWindPower()
});

天气预报项目整体代码

package com.imooc.weather;
import com.imooc.weather.impl.WeatherUtilsImpl;
import java.util.List;
import java.util.Scanner;

public class Application {
    public static void main(String[] args) {
        String aliyun = "*******";
        System.out.println("查询最近天气预报");
        System.out.println("输入1:查询未来24小时天气预报");
        System.out.println("输入2:查询最近3天天气预报");
        System.out.println("输入3:查询未来7天天气预报");
        System.out.print("请输入您的选择:");
        Scanner scanner = new Scanner(System.in);
        int i = scanner.nextInt();
        System.out.println("用户输入数字:" +i);
        if (i==1){
            System.out.print("请输入城市名称查询未来24小时的天气预报:");
            String city = scanner.next();
            WeatherUtils weatherUtils = new WeatherUtilsImpl();
            List<HourWeather> weatherList = weatherUtils.w24h(aliyun, city);
            System.out.println(weatherList);
            if (weatherList.size()==0){
                System.out.println("抱歉,未找到该城市的天气数据!");
            }else {
                for (HourWeather hourWeather : weatherList){
                    String template = "%s月%s日%s时|%-3s|%-20s|%-8s|%-4s℃";
                    String row = String.format(template, (Object[]) new String[]{
                            hourWeather.getMonth(),
                            hourWeather.getDay(),
                            hourWeather.getHour(),
                            hourWeather.getWindDirection(),
                            hourWeather.getWindPower(),
                            hourWeather.getWeather(),
                            hourWeather.getTemperature()
                    });
                    System.out.println(row);
                }
            }
        }
        else if (i==2){
            System.out.print("请输入城市名称查询未来3天的天气预报:");
            String city = scanner.next();
            WeatherUtils weatherUtils = new WeatherUtilsImpl();
            List<DayWeather> weatherList = weatherUtils.w3d(aliyun, city);
            System.out.println(weatherList.size());
            if (weatherList.size()==0){
                System.out.println("抱歉,未找到该城市的天气数据!");
            }else {
                for (DayWeather weather : weatherList){
                    String template = "%-2s月%-2s日 | 气温:%-4s℃(日)  %-4s℃(夜) | 天气:%s(日)  %s(夜) | 风力:%s(日)  %s(夜) ";
                    String row = String.format(template, (Object[]) new String[]{
                            weather.getMonth(),
                            weather.getDay(),
                            weather.getDayAirTemperature(),
                            weather.getNightAirTemperature(),
                            weather.getDayWeather(),
                            weather.getNightWeather(),
                            weather.getDayWindPower(),
                            weather.getNightWindPower()
                    });
                    System.out.println(row);
                }
            }
        }else if(i==3){
            System.out.print("请输入城市名称查询未来7天的天气预报:");
            String city = scanner.next();
            WeatherUtils weatherUtils = new WeatherUtilsImpl();
            List<DayWeather> weatherList = weatherUtils.w7d(aliyun, city);
            System.out.println(weatherList.size());
            if (weatherList.size()==0){
                System.out.println("抱歉,未找到该城市的天气数据!");
            }else {
                for (DayWeather weather : weatherList){
                    String template = "%-2s月%-2s日 | 气温:%-4s℃(日)  %-4s℃(夜) | 天气:%s(日)  %s(夜) | 风力:%s(日)  %s(夜) ";
                    String row = String.format(template, (Object[]) new String[]{
                            weather.getMonth(),
                            weather.getDay(),
                            weather.getDayAirTemperature(),
                            weather.getNightAirTemperature(),
                            weather.getDayWeather(),
                            weather.getNightWeather(),
                            weather.getDayWindPower(),
                            weather.getNightWindPower()
                    });
                    System.out.println(row);
                }
            }
        }
    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值