- 本月任务

-
java工程的结构
- project:工程名/应用名
- src:源文件路径
- package:包(相当于文件夹)
- class:类
-
常见工程类型:
- java project
- web project
- maven project
- web maven project
-
结构解析
- package—— 申明包路径,类自己申明在什么位置
- import——引用外部类,指定要用到的外部类的路径(包路径+类名)
-
申明当前类:
- public:访问权限,公共的
- class:申明是要定义一个类
- 类名:自定义,首字母大写
- extends:可选,继承某个类,只能继承1个。只能继承1个,可以是class实现类,也可以是abstract class抽象类。任何类的顶层继承类都是Object
- implements:实现接口interface规定的方法,接口相当于角色,当前类就是接口的实现类
- {}:类的实现内容
任何类都直接或者间接继承了Object对象
你自己有自己的生活,同时可以继承你爸的资产,同时你爸、你老板、你老婆/老公、你儿子等等还给你提了一堆职责要求
-
定义类
- package 包路径
- import 引用类路径
- public class 首字母大写的类名 extends 父类 implements 接口列表 {}
-
属性
- 实例属性:权限 类型 变量名 变量值
- 类属性:带static的属性
-
方法
- 构造方法/构造器:权限 类名 (入参){}
- 普通方法:权限 返回值类型 方法名 (入参) { return 返回}
- main方法:public statis void main(String[] args){}
-
class文件的种类
- class:实现类
- abstract class:抽象类,抽象方法
- interface:接口类
-
java三大特性:继承、多态、封装
默认就有了继承的方法和属性
如果对继承的方法不满意,可以重写
public class Puppy{
public Puppy(){
}
public Puppy(String name){
// 这个构造器仅有一个参数:name
}
}
重载:方法名相同,但是参数不同,就当成不同的方法
-
同样名字的方法,参数不一样,就不算同一个方法
this:当前对象
super:父类
extends:继承
implements:实现
-
重写(Override)与重载(Overload)
- 重写:就是重新写从父类继承的方法,方法名、参数、返回值都不变,只是改变方法体的实现内容
- 重载(overloading) :是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
-
java三大特性:继承、多态、封装
继承的硬币反面
从下往上看:继承,下面的继承上面的。往上看是找共性
-
从上往下看:多态,越往下形态越多。往下看,找特性
Parent p = new Child();
-
方法类型
- 属性
- 方法
-
普通的方法:实现类的各类业务功能
- construtor构造方法:默认不用写,方法名就是类名,没有返回类型
- main方法:静态static,方法名只能是main,一个类只能有一个main方法
main方法
public static void main(String[] args){
// 下面的语句将创建一个Puppy对象
Puppy myPuppy = new Puppy( "tommy" );
}
-
1个类只有1个main方法
main方法的格式固定,名字只能是main
同一个main方法,放在不同的类里面,执行结果一样
启动一个java程序,即使执行一个main方法
-
变量
-
4个元素
- 访问权限(public公共的、private私有的、protexted默认:同一个包共享),你的名字、你的私密日记、你的钱包
- 变量类型:int、long、float、double、boolean、String、引用类型
- 变量名
- 变量值
-
所有的java类,都是引用类型(包括String),基本类型(8种int、long等)
-
变量类型
- 命令行与命令行共享:局部变量
- 方法与方法共享:全局变量/实例变量
- 实例与实例共享:类变量/静态变量,多了一个static关键字
- 程序与程序:环境变量
-
方法
-
方法元素
- 访问权限:public、private
-
返回值类型:int、long、float、double、boolean、String、引用类型,
void(不返回,没有return) - 方法名:
- ()入参:
- {}方法体:
- return返回值:
-
-
打印日志
- 打印日志到控制台:
- JavaScript:console.log("打印内容");
- java:System.out.println("打印内容");快捷键:syso+alt+/
- shell:echo "打印内容"
- 打印日志到控制台:
-
执行java程序
① 先定义一堆类,类里面有一堆属性和方法② 随便找一个类(习惯新建一个测试类),里面写一个main方法
③main方法里面去编排业务要执行的各个类的属性和方法
④ 执行main方法

-
实例和构造方法
- 使用一个java类,需要先实例化,也就是先调用构造器,生成一个实例对象,然后将对象保存到变量,然后通过对象的.去使用属性和方法
public static void main(String[] args){
Son s=new Son();
s.doHomeWork();
s.billionDream();
}
-
实例化和初始化
- 使用类,需要先
- 实例化:new ,在内存中创建对象,分配存储空间
- 初始化:构造方法,如果构造器为空,需要手动初始化设置属性
- 使用类,需要先
Son s2=new Son();
s.sno="1003";
s.score=85;
对比
Son s3=new Son("1003",80);
-
实例图解
实例图解.png -
封装
- 封装变化和权限
public class Person {
public String name;
public int age;
}
-
常见封装1:get、set方法
将属性从public改成private,不让外部直接取值、设置
给每个属性开放两个public方法,get属性名()取值,set属性名(变量)设置
就能保障内部属性改了,只要get、set方法名不变,外界就不需要变,而且可以在get、set方法体里面加任何逻辑
-
常见封装2:javabean
bean:豌豆荚
把很多个变量,封装到一个java类,然后用这个类,代替所有的变量
好处:简化代码,便于管理
-
常见封装3:把一个业务的一系列命令封装成方法
- 要完成一个操作,需要执行很多的命令、调用很多的方法,可以把他们封装成一个新方法,直接调这个方法就搞定
容器:各类容器和泛型
| 必备语法知识 | 语法内容 | 掌握程度 |
|---|---|---|
| for循环 | 实现数字类循环 (知道循环次数的循环) |
写道条件反射 |
| while循环 | 实现逻辑类循环 (如调用接口是否成功) |
写道条件反射 |
| 继承extends 多态implements |
继承 实现 向上转型(转成父类、接口) |
留个心 |
| 容器: Array ArrayList HashSet HashMap |
Array:固定大小,单值String[] names=new String[20]; ArrayList:动态大小,单值 HashSet:动态大小,无序,单值,不重复 HashMap:动态大小,键值对 |
新建 添加数据 取单个数据 遍历所有数据 |
-
容器(第三次强调的内容即包含容器)和泛型引申:
①存的数据有两种:值,键值对
| 容器名 | 动态/固态 | 存储数据类型 | 重复/不重复 |
|---|---|---|---|
| Array | 固定大小 | 有序,值 | 重复 |
| ArrayList | 动态大小 | 有序,值 | 重复 |
| HashSet | 动态大小 | 无序,单值 | 不重复 |
| HashMap | 动态大小 | 键值对 | 自动覆盖重复 |
②三个接口,三个对应实现类:
| 接口 | 对应实现类 |
|---|---|
| List list=new ArrayList();——新建容器 | list.add(值);——添加数据 list.get(下标);——取单个数据 for each遍历——遍历所有数据 |
| Set set=new HashSet();——新建容器 | set.add();——存放数据 |
| Map map=new HashMap();——新建容器 | map.put(key,value);——存放数据 map.get(value);——取单个数据 |
-
备注
- 单个的数据,用变量存
- 批量的数据,用容器存
- eg
List list=new ArrayList();
③泛型
- “型”就是类型
- “泛”就是广泛
- 也就是可以装各种各样的数据类型
List<String> list=new ArrayList<String>();//
Map<String,int> map=new HashMap<String,int>();
//存值,固定大小,可重复
String[] names=new String[20];
names[0]="guoya";
//存值,变动大小,可重复
List list=new ArrayList();
list.add("guoya");
list.add("guoya");
//存值,变动大小,自动去重
Set set=new HashSet();
set.add("guoya");
set.add("guoya");
//存键值对,变动大小,key自动覆盖
Map map=new HashMap();
map.put("name", "guoya");
