变量
含义
分类
static
含义
修饰成员变量、方法代表类级别
可以直接通过类名.调用
语法
修饰符成员变量
多个对象共享一个变量
修饰方法
一般作为工具类,方便调用
注意点
- static修饰的方法可以访问
- static修饰的成员变量
- static修饰的方法
- static修饰的方法可以不可以访问
- 非static修饰的成员变量
- 非static修饰的方法
- 非static修饰的方法可以访问
- static修饰的成员变量
- static修饰的方法
- 非static修饰的成员变量
- 非static修饰的方法
- static方法里面不可以使用this关键字
总结:静态只能访问静态的
案例一
static修饰成员变量
_01staticDemo.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| public class _01staticDemo { public static void main(String[] args) { User zs = new User(10,"zs"); User ls = new User(20,"ls"); User.blood="red"; System.out.println(User.blood); System.out.println(zs.blood); System.out.println(ls.blood); zs.blood="blue"; System.out.println(zs.blood); System.out.println(ls.blood); System.out.println(User.blood); }
}
class User{ int age; String name; static String blood; public User(int age,String name){ this.age = age; this.name = name; } }
|
案例二
static修饰方法
CommonUtil.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
public class CommonUtil{
public static void sort(int [] data){ for(int i=1;i<data.length;i++){ System.out.println(i); for(int j=0;j<data.length-i;j++){ if(data[j]>data[j+1]){ int temp = data[j]; data[j] = data[j+1]; data[j+1] = temp; } } } } }
|
_02staticMethod.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class _02staticMethod { public static void main(String[] args) { int [] xx = {1,2,7,5}; CommonUtil.sort(xx); System.out.println(Arrays.toString(xx)); } }
|
GC
含义
Grabage Collection,是后台运行级别比较低的线程,定时释放堆内存。
作用
注意点
- 当一个对象被回收的时候会先执行它的finalize方法
- 调用System.gc()方法可以触发GC执行一次工作
案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| public class _03GC { public static void main(String[] args) { for(int i=0;i<4;i++){ Teacher teacher = new Teacher("zs"+i); } System.gc(); }
}
class Teacher{ String name; public Teacher(String name){ this.name = name; } @Override protected void finalize() throws Throwable { System.out.println(name+"被回收了"); } }
|
对象比较
==
equals
TODO
instanceOf
案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| public class _04ObjectComparate { public static void main(String[] args) { Car one = new Car(110); Car two = new Car(110); System.out.println(one == two); System.out.println(one instanceof Car); System.out.println(two instanceof Car); System.out.println(two instanceof Object); }
}
class Car{ int num; Car(int num){ this.num = num; } }
|
构造器
含义
用来创建并返回对象的
在创建对象的时候可以初始化对象的成员变量信息
语法
1 2 3 4
| 范围修饰符 类名([数据类型 参数1,...,数据类型 参数N]){ [调用其他构造器] 初始化成员变量; }
|
默认的无参构造器
含义
当一个类没有显示指定构造器的时候默认会有一个无参构造器
语法
特点
- 没有参数
- 范围修饰符和类的一样【TODO】
- 如果显示给了默认的则无效
工作
- 如果给了有参构造器后,一般都会显示的给个无参构造器
案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class _05DefaultConstructor { public static void main(String[] args) { Dog dog = new Dog("xx"); } }
class Dog { String name; Dog(String name){ this.name = name; } }
|
package
含义
包,在磁盘中其实就是文件夹
用途
- java源文件的归类【或者说划分类,将功能同类的类放到相同包下】
- 避免java文件名冲突
特点
- 在文件系统中其实就是文件夹
- 在java源文件的第一行出现package 所在包名;
- 在java源文件只能存在一个package 语句
规范
- 公司域名倒写.项目名.模块名
- 全部小写
- 如果数字开头需要添加_
层级显示
常见包名
Import
含义
导入【用来引用在哪个包中的类】
ctrl + shift + o //导入需要的,删除不需要的
常见语法
import 包名.类名;
引用指定包名下的类
import 包名.*;
引用指定包下的所有类
继承
含义
- 子类拥有父类的属性、方法
- 子类根据需求扩展
- 可以对继承下来的方法进行重写[TODO]
- 增加其他字段和方法
语法
使用场景
提取共性到父类,再使用继承
注意点
好处
- 使编码更高效
- 易维护
- 方便扩展
- 代码的重用、避免重复编写代码
- …..
案例
Animal.java
1 2 3 4 5 6 7 8 9
| public class Animal { String name; int age; public void eat(){ System.out.println("吃东西"); } }
|
Cat.java
1 2 3 4 5 6 7 8
| public class Cat extends Animal { String color; public void catchFish(){ System.out.println("捕鱼"); } }
|
Dog.java
1 2 3
| public class Dog extends Animal{ }
|
数据类型转换
案例
Animal.java
1 2 3 4 5 6 7 8 9
| public class Animal { String name; int age; public void eat(){ System.out.println("吃东西"); } }
|
Cat.java
1 2 3 4 5 6 7 8
| public class Cat extends Animal { String color; public void catchFish(){ System.out.println("捕鱼"); } }
|
Dog.java
1 2 3 4 5
| package com.neu.day04._02extends;
public class Dog extends Animal{ }
|
Test.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| public class Test { public static void main(String[] args) { Dog dog = new Dog(); dog.name = "土狗"; dog.age = 10; Cat cat = new Cat(); cat.name="小猫"; cat.age = 20; cat.color="白色"; dog.eat(); Animal animal = cat; if(animal instanceof Dog){ Dog otherDog = (Dog) animal; System.out.println("dog..."); }else if(animal instanceof Cat){ Cat otherCat =(Cat) animal; System.out.println("cat..."); } } }
|
封装
含义
- 隐藏字段、方法实现细节
- 根据需求对外提供方法字段的方法
如何实现
范围修饰符做到的
种类
各位同学自行编写代码去测试
种类 |
当前类 |
相同包 |
子类不同包 |
非子类不同包 |
private |
y |
n |
n |
n |
默认 |
y |
y |
n |
n |
protected |
y |
y |
y |
n |
public |
y |
y |
y |
y |
通常做法
全部字段私有,根据情况对外提供setter和getter
如果方法只能在当前类中使用的,就把该方法设置私有【通俗点就是能满足要求情况下范围修饰符越小越好】
案例
Test.java
1 2 3 4 5 6 7 8 9 10 11
| public class Test { public static void main(String[] args) { User user = new User(); user.setAge(10); user.setName("xx"); user.sayInfo(); } }
|
User.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public class User { private String name; private int age;
public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public void sayInfo(){ System.out.println("我的年龄是"+age+"名字是"+name); } }
|
super
含义
父对象
使用场景
子类调用父类的构造器
TODO
子类调用父对象的方法
子类调用父对象的字段
案例
User.java
1 2 3 4 5 6 7 8 9
| public class User { protected String name="xx"; protected int age; public void say(){ System.out.println("hello"); } }
|
Work.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| public class Worker extends User{ String name="yy";
public void print(){ System.out.println(super.name); } public void say(){ System.out.println("world"); } public void sayInfo(){ super.say(); } public static void main(String[] args) { Worker worker = new Worker(); worker.sayInfo(); } }
|
方法重写
含义
当父类的方法不满足子类要求的时候可以重写方法
语法
1 2 3 4 5
| @Overried 修饰符 方法返回类型 方法名([参数1,参数2,参数3…]){ }
|
可以这样理解,复制父类需要重写的方法到子类中,然后在方法上面添加@Override关键字
注意点
返回的范围修饰符要大于等于父类方法的
不能抛出比父类更大的异常
不理解没关系,后面学习异常之后会重写写案例的
static是不能重写
案例
Animal.java
1 2 3 4 5 6 7 8
| public class Animal { protected String name; protected void move(){ System.out.println("脚...."); } }
|
Bird.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| public class Bird extends Animal{ public static void main(String[] args) { Bird bird = new Bird(); bird.name="小鸟"; }
@Override public void move() { System.out.println("翅膀飞行"); } }
|