java04

  1. 1. 变量
    1. 1.1. 含义
    2. 1.2. 分类
  2. 2. static
    1. 2.1. 含义
    2. 2.2. 语法
    3. 2.3. 注意点
    4. 2.4. 案例一
    5. 2.5. 案例二
  3. 3. GC
    1. 3.1. 含义
    2. 3.2. 作用
    3. 3.3. 注意点
    4. 3.4. 案例
  4. 4. 对象比较
    1. 4.1. 案例
  5. 5. 构造器
    1. 5.1. 含义
    2. 5.2. 语法
  6. 6. 默认的无参构造器
    1. 6.1. 含义
    2. 6.2. 语法
    3. 6.3. 特点
    4. 6.4. 工作
    5. 6.5. 案例
  7. 7. package
    1. 7.1. 含义
    2. 7.2. 用途
    3. 7.3. 特点
    4. 7.4. 规范
    5. 7.5. 层级显示
    6. 7.6. 常见包名
  8. 8. Import
    1. 8.1. 含义
    2. 8.2. 常见语法
  9. 9. 继承
    1. 9.1. 含义
    2. 9.2. 语法
    3. 9.3. 使用场景
    4. 9.4. 注意点
    5. 9.5. 好处
    6. 9.6. 案例
  10. 10. 数据类型转换
    1. 10.1. 案例
  11. 11. 封装
    1. 11.1. 含义
    2. 11.2. 如何实现
    3. 11.3. 种类
    4. 11.4. 通常做法
    5. 11.5. 案例
  12. 12. super
    1. 12.1. 含义
    2. 12.2. 使用场景
    3. 12.3. 案例
  13. 13. 方法重写
    1. 13.1. 含义
    2. 13.2. 语法
    3. 13.3. 注意点
    4. 13.4. 案例

变量

含义

分类

  • 局部变量
  • 成员变量
    • 实例变量【对象级别】
    • 类变量 【类级别】

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");


//static
//含义:类级别
//修饰
//成员变量
//含义:类级别的成员变量
//特点
//多个对象共享一份(只有一份)
//类点.调用 || 对象.调用(不建议)
//方法
//注意事项??



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
/**
* 工具类
* @author Administrator
*
*/
public class CommonUtil{


/**
* 冒泡排序
* @param data
*/
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 {
//static
//修饰
//成员变量
//方法
//目的:一般作为工具类
//调用方式:类名.static修饰的方法 || 对象.static修饰的方法[不建议]
public static void main(String[] args) {

int [] xx = {1,2,7,5};

CommonUtil.sort(xx);

//CommonUtil util = new CommonUtil();
//util.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) {

//没有被引用
//Teacher teacher = new Teacher("ZS");
//teacher=null;
//System.gc();

//理解对象,使用完之后就变成孤立对象
//new Teacher("ZS");
//System.gc();


//超出对应的作用范围也会被回收
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);

//instanceOf

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]){
[调用其他构造器]
初始化成员变量;
}

默认的无参构造器

含义

当一个类没有显示指定构造器的时候默认会有一个无参构造器

语法

1
2
3
当前类的范围修饰符 类名(){

}

特点

  • 没有参数
  • 范围修饰符和类的一样【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 语句

规范

  • 公司域名倒写.项目名.模块名
  • 全部小写
  • 如果数字开头需要添加_

层级显示

1626960159049

常见包名

  • java.util

    JDK提供的工具类

  • java.awt

    GUI

  • java.lang 比如:String、Math、Exception

    不用去导入的,自动导入了

  • java.sql

    数据库相关的

  • java.net

    网络相关的

  • java.io

    IO相关的

Import

含义

导入【用来引用在哪个包中的类】

ctrl + shift + o //导入需要的,删除不需要的

常见语法

  • import 包名.类名;

    引用指定包名下的类

  • import 包名.*;

    引用指定包下的所有类

继承

含义

  • 子类拥有父类的属性、方法
  • 子类根据需求扩展
    • 可以对继承下来的方法进行重写[TODO]
    • 增加其他字段和方法

语法

1
2
3
4
//子类(派生类) extends 父类{
//0-N个扩展属性
//0-N个扩展方法
//}

使用场景

提取共性到父类,再使用继承

注意点

  • java中的类属于单继承

好处

  • 使编码更高效
  • 易维护
  • 方便扩展
  • 代码的重用、避免重复编写代码
  • …..

案例

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{

}

数据类型转换

  • 基本数据类型转换

    自行回顾

  • 引用数据类型转换

    • 自动转换 [子赋值父]

    • 强制转换

      • 什么情况使用:父类型的对象 赋值 给子类型对象的时候

      • 语法:(目标类型) 待强转对象

      • 常见错误

        ClassCastException

        如何避免:使用instanceof先判断

案例

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();


//dog 是 animal
Animal animal = cat;

if(animal instanceof Dog){
Dog otherDog = (Dog) animal;
System.out.println("dog...");
}else if(animal instanceof Cat){
Cat otherCat =(Cat) animal; //ClassCastException
System.out.println("cat...");
}
}
}

封装

含义

  • 隐藏字段、方法实现细节
  • 根据需求对外提供方法字段的方法
    • setter
    • getter

如何实现

范围修饰符做到的

种类

各位同学自行编写代码去测试

种类 当前类 相同包 子类不同包 非子类不同包
private y n n n
默认 y y n n
protected y y y n
public y y y y

通常做法

  • 全部字段私有,根据情况对外提供setter和getter

    1658741636352

  • 如果方法只能在当前类中使用的,就把该方法设置私有【通俗点就是能满足要求情况下范围修饰符越小越好】

案例

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;


//一般做法
//字段
//全部private
//对外提供setter || getter的方法 【eclipse生成】
//方法
//如果方法确定只在本类中使用,直接使用private即可【总结:作用范围越小越好】


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";

//supper
//含义:父对象
//使用场景
//调用父类的构造器[TODO]

//调用父对象的字段
//调用父对象的方法

public void print(){
//System.out.println(name);
System.out.println(super.name);
}

public void say(){
System.out.println("world");
}

public void sayInfo(){
//say();
super.say();
}

public static void main(String[] args) {
Worker worker = new Worker();
//worker.print();
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{

//重写父类的方法

//语法
//@Override
//就是一个和父类一样的方法,只是方法体不一样

//@Override 注解

//注意点
//返回的范围修饰符要大于等于父类方法的
//不能抛出比父类更大的异常
//static是不能重写


public static void main(String[] args) {

Bird bird = new Bird();
bird.name="小鸟";


//bird.move();


}

//代表该方法是重写父类的[强烈建议]
@Override
public void move() {
System.out.println("翅膀飞行");
}
}