1、基础认知
- 类是抽象的概念,是对象的模板
- 对象是具体的事物,是类的具体实例
- new关键字是创建实例对象最重要的标志
类名要求:
- 要有直白意义,最好是英文
- 首字母大写
- 不要书字开头,不要有特殊字符
对象名要求:
- 要有直白意义,最好是英文
- 首字母小写
- 不要书字开头,不要有特殊字符
成员变量
成员变量解释隶属于对象的变量
用于保存对象的静态特征
同类型的不同对象拥有相同的成员变量,但值相互独立
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
- 把功能相似或相关的类组织在同一个包中
- 包也采用了树形目录的存储方式
- 通过包也可以限定类的访问权限
- package关键字用于说明当前的类归属与哪个包
包的命名规范
- 包采用“逆域名法”进行命名,用“.”进行分割,单词全部小写
- 标准格式:域名后缀.组织机构名.项目名[.模块名].包的职能
- import关键字用于导入其他包的类
访问修饰符
访问修饰符的作用范围
修饰词 | 本类 | 同一个包的类 | 继承类 | 其他类 |
---|---|---|---|---|
private | √ | × | × | × |
无(默认) | √ | √ | × | × |
protected | √ | √ | √ | × |
public | √ | √ | √ | √ |
封装
- 封装即隐藏功能的实现细节
- 利用对象与方法是实现封装的直接途径
- 良好的封装让代码更容易阅读与维护
例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、多态
多态是同一个行为具有多个不同表现形式或形态的能力(彩照与黑白照)
实现多态的关键是接口
- 接口是一个抽象的类型,只提供方法的定义
- 实现类的一个接口的具体实现,要实现每一个接口方法的功能
接口: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类
- ArrayList是java内置的数据集合,用于存储多个数据
- ArrayList是数组替代品,提供了更多数据操作方法
- 几乎是每个项目中必用的类
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);
}
}
}
}
}