day10

1.构造代码块和构造方法的区别
{
	代码块
}
public 类名 () {

}
都是实例化一个对象的时候执行的
只不过构造代码块先于构造方法执行的
2.局部变量和成员变量区别
	局部变量写在方法中,只能在方法体中使用,出了这个方法就不能再使用了
	成员变量写在类中,整个类都可以使用的。
3.声明类的语法格式
	class 类名 {
		属性
		构造方法
		方法
	}
4.一个类中属性的意义是啥
	用来描述一个类的特征的,可以通过对象对这个特征进行赋值的
5.构造方法的语法格式
public 类名 () {

}
public 类名 (参数) {

}
6.逻辑运算符的简单介绍
	
7.封装
 	1.对成员变量加修饰符 private
 	2.一定要写setter和getter方法进行赋值和取值即可
 8.this关键字
 	1.this关键字可以调用成员属性和方法
 	2.this还可以调用构造方法
 9.一个类对象作为方法的参数
 10.多类合作
 

今天的内容

1.多类合作几个全部讲

2.继承

3.继承的内存分析

4.重写和重载

1.
部门类
员工类
部门类下面有员工
2.
老师类
学生类
老师带了很多学生    把学生存倒数组中 STudent[] stus = new Student[6];
3.
成年人类
孩子类
玩具类
4.
需求:
	两个宠物一个狗一个猫宠物饿了,需要主人给宠物喂食
	1.不同的宠物吃的不同
	2.不同的宠物吃完食体力值增加
	3.主人和狗玩游戏 接飞盘的游戏。狗体力值减去10,但是会和主人的亲密度提升5
	4.主人和猫玩游戏  滚毛球。猫体力值减去12 ,但是会和主人的亲密度提升7
	
	人类
	猫类
package com.qfedu.a_homework;

//部门类
class Department {
	private String depId;//部门id
	private String deptName;//部门的名字
	private Employee employee;//部们下面的员工
	public String getDepId() {
		return depId;
	}
	public void setDepId(String depId) {
		this.depId = depId;
	}
	public String getDeptName() {
		return deptName;
	}
	public void setDeptName(String deptName) {
		this.deptName = deptName;
	}
	public Employee getEmployee() {
		return employee;
	}
	public void setEmployee(Employee employee) {
		this.employee = employee;
	}
	
	
}
//员工类
class Employee {
	private String name;//员工的名字
	private int age;//员工的年龄
	
	private char sex;//员工的性别

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public char getSex() {
		return sex;
	}

	public void setSex(char sex) {
		this.sex = sex;
	}
	
	
}
public class Demo1 {
	public static void main(String[] args) {
		//创建Employee对象
		Employee employee = new Employee();
		employee.setName("张三");
		employee.setAge(28);
		employee.setSex('男');
		//先创建部门对象
		Department department = new Department();
		//对department对象属性进行赋值
		department.setDepId("0001");
		department.setDeptName("研发部");
		department.setEmployee(employee);
		//以上是在赋值
		//取值
		//想要部门的id
		System.out.println(department.getDepId());
		//想要获取部门的名字
		System.out.println(department.getDeptName());
		//想要获取部门下面的员工对象,会打印的啥?  会打印的是地址!!!
		System.out.println(department.getEmployee());
		//能够获取出来employe对象了。
		//能不能获取emplopyee对象的属性值呢?
		
		System.out.println("员工的名字:" +department.getEmployee().getName());
		System.out.println("员工的年龄:" + department.getEmployee().getAge());
		System.out.println("员工的性别:" + department.getEmployee().getSex());
	}

}

package com.qfedu.a_homework;

class Teacher {
	private String name;//老师的姓名
	private char sex;
	private int age;
	//老师下面有很多的学生 Student[] stus = new Student[3];
	private Student[]  student;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public char getSex() {
		return sex;
	}
	public void setSex(char sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Student[] getStudent() {
		return student;
	}
	public void setStudent(Student[] student) {
		this.student = student;
	}
	
	
}
class Student {
	private String  name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}
public class Demo2 {
	public static void main(String[] args) {
		Student[] stus = new Student[2];//现在数组是一个空的
		//对数组进行赋值
		Student student = new Student();
		student.setName("骚磊");
		Student student2 = new Student();
		student2.setName("老万");
		stus[0] = student;
		stus[1] = student2;
		//脑海里面 想到stus是一个容器 数组, 里面已经放了两个值了
		//两个对象
		
		Teacher teacher = new Teacher();
		teacher.setName("老邢");
		teacher.setAge(89);
		teacher.setSex('女');
		//现在setStudent的参数是一个数组
		//stus里面有值了 两个对象student
		teacher.setStudent(stus);
		
	//以上都是在赋值
	//取值
		Student[] students = teacher.getStudent();
		for (int i = 0; i < students.length; i++) {
			System.out.println(students[i].getName());
		}
		
	}

}

package com.qfedu.a_homework;

class Adult {
	private String name;//成年人的名字
	private Child child;//成年人下面的孩子对象
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Child getChild() {
		return child;
	}
	public void setChild(Child child) {
		this.child = child;
	}
	
}
class Child {
	private String name;
	private int age;
	private Toy toy;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Toy getToy() {
		return toy;
	}
	public void setToy(Toy toy) {
		this.toy = toy;
	}
	
}
class Toy {
	private String name;//玩具的名字
	private double price;//玩具的价格
	private String kind;//玩具的种类
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public String getKind() {
		return kind;
	}
	public void setKind(String kind) {
		this.kind = kind;
	}
	
}
public class Demo3 {
	public static void main(String[] args) {
		Toy toy = new Toy();
		toy.setName("骚奥特曼");
		toy.setPrice(67.8);
		toy.setKind("皮套");
		Child child = new Child();
		child.setName("小骚磊");
		child.setAge(1);
		child.setToy(toy);
		Adult saolei = new Adult();
		saolei.setName("骚磊");
		saolei.setChild(child);
		//以上都是在赋值
		//取值
		//需求
		//通过成年人找到孩子的名字
		//saolei.getChild()获取孩子对象 .getName
		System.out.println(saolei.getChild().getName());//获取孩子的名字
		System.out.println(saolei.getChild().getAge());//获取孩子的年龄
		//通过成年人获取玩具的种类 名字 价格的
		System.out.println(saolei.getChild().getToy().getName());
		System.out.println(saolei.getChild().getToy().getKind());
		
	}

}

1.继承

Java 有三大特性: 封装 继承 多态

1.1.生活中的继承

子承父业

龙生龙 凤生凤

老鼠生来会打洞

你长得真像你父亲

1.2.Java中继承

继承是类和类之间的关系

继承至少得两个类:

语法格式:

class B  extends A {
	
}

其中 B是一个类,A是一个类

B类继承了A类。 B叫A的子类。A是B的父类(超类,基类)

入门案例:

package com.qfedu.b_extends;

class Father {
	String name;
	int age;
	//行为
	public void eat () {
		System.out.println("吃大盘鸡拌面");
	}
}
//使用了extends以后  Son 类就继承了Father这个类
//就意味着我Son类可以使用Father类下面某些属性和某些方法
class Son extends Father{
	
}

public class Demo1 {
	public static void main(String[] args) {
		Son son = new Son();
		//发现继承以后,可以使用父类一些属性
		son.name = "小骚磊";
		son.age = 1;
		System.out.println(son.name);
		System.out.println(son.age);
		son.eat();
		
	}

}

案例:

Animal 类 父类

Dog类 子类

Cat类 子类

继承的意思,就是将父类的属性和方法拿到子类中去使用

1.成员变量(属性)

​ 公开的和默认的属性,子类可以继承使用的

​ 私有的成员变量,子类无法使用的

2.成员方法

​ 公开的和默认的成员方法,子类可以继承使用

​ 私有的成员方法,子类无法使用的

总结:凡是私有的 无法继承。

3.构造方法

​ 先执行父类的构造,再执行子类的构造方法

​ 如果父类中有有参构造,但是没有无参构造。子类会报错

​ 关于构造方法:父类与子类的构造方法的形式保持一致。
​ 父类中有无参构造。子类也有无参构造。父类中没有无参构造,子类也没有无参构造方法

package com.qfedu.c_extends;

class Father {
	//只要是公开的或者默认的属性,子类可以使用的
	public String name;//公开的一个属性
	int age;//就是默认的属性
	private int id;//private修饰的 子类不能使用
	
	public Father () {
		System.out.println("父类的构造方法");
	}
	public Father (String name) {
		this.name = name;
	}
	//eat方法 使用public修饰的  子类可以使用
	public void eat () {
		System.out.println("吃窝窝头");
	}
	//默认的方法  子类是可以使用的
	void work () {
		System.out.println("开拖拉机耕地");
	}
	//  使用private修饰的方法就是私有化的方法,子类能调用吗?不能
	private void smoking () {
		System.out.println("抽旱烟");
	}	
}
class Son extends Father {

	
	//在子类写有参构造即可
	
	
}
public class Demo1 {
	public static void main(String[] args) {
		Son son = new Son();
		//验证name  age在子类中可以使用的
		son.name = "狗蛋";
		son.age = 12;
		//son.id = 12;
		son.eat();//可以使用父类的公开的方法
		son.work();
		//不可以使用父类私有化的方法
		//.son.smoking();
		
	}

}

刚才在写代码的时候,发现私有成员变量子类不能用。还有私有化的方法子类不能调用。咋办?

package com.qfedu.c_extends;

class Father1 {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	private void smoking () {
		System.out.println("抽旱烟");
	}
	public void test () {
		smoking();
	}
	
	
}
class Son1 extends Father1 {
	
}
public class Demo2 {
	public static void main(String[] args) {
		Son1 son1 = new Son1();
		//咋办? 可以使用setter和getter方法
		//son1.name = "";
		son1.setName("狗蛋");
		System.out.println(son1.getName());
		son1.test();
	}

}

练习的案例:

​ Animal 类:

​ 属性 : name, age ,sex 私有化的

​ 方法: 吃 运动

​ 子类:Panda

​ 使用Panda继承Animal 并可以使用Animal下面的所有属性和方法,对属性进行赋值

​ 方法调用

package com.qfedu.c_extends;

class Animal {
	private String name;
	private int age;
	private char sex;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public char getSex() {
		return sex;
	}
	public void setSex(char sex) {
		this.sex = sex;
	}
	//方法
	public void eat () {
		System.out.println("吃饭");
	}
	public void sport () {
		System.out.println("运动");
	}
	
}
class Panda extends Animal {
	
}
//继承有啥好处呢?代码可以重复利用
class Cat extends Animal {
	
}
class Dog extends Animal {
	
}
public class Demo3 {
	public static void main(String[] args) {
		Panda panda = new Panda();
		panda.setName("熊大");
		panda.setAge(9);
		panda.setSex('公');
		panda.eat();
		panda.sport();
	}

}

继承:

​ Java中的继承都是单继承。只能有一个父类

​ Java中可以多重继承

package com.qfedu.c_extends;

class A {
	
}
class B extends A{
	
}
class C extends B {
	
}
public class Demo4 {
	public static void main(String[] args) {
		
	}

}

总结:

1.至少两个类,使用关键字extends
2.子类是否能使用父类的成员变量和成员方法
	子类不能使用父类私有化的所有的东西
	
1.3关于父类子类的内存分析

在这里插入图片描述

1.4重写【重点】

Override

重写目的:子类可以继承父类的非私有化的方法,但是有的 时候父类的需求满足不了子类的需求了,这个时候需要重写父类非私有的方法

​ 重写要求:

1.必须有继承关系
2.父类的方法必须是非私有化的
3.在子类中重写父类的方法,这个方法除了方法体不一样其他都一样的。
4.必须再子类中去重写
package com.qfedu.d_override;

class Father {
	public void eat () {
		System.out.println("吃粗粮。。。。。。");
	}
	public void driver () {
		System.out.println("开拖拉机。。。。。");
	}
}
//当父类不能满足子类的需求的话可以在子类中重写父类的方法
class Son extends Father {
	//重写的时候在子类中 只需要打上方法的名字一敲回车即可
	//重写的方法  和父类 的 返回值  参数  方法名字 一模一样,但是方法体不一样的
	@Override//是重写的严格限定,只要有这个,就证明咱们下面的这个方法
	//就是重写的方法,告知程序员 此时eat方法是重写的不是自己独有的
	public void eat() {
		System.out.println("吃白面馒头......");
	}
	@Override
	public void driver() {
		System.out.println("开小汽车");
	}
	
}
public class Demo1 {
	public static void main(String[] args) {
		Son son = new Son();
		son.eat();
		son.driver();
		//重写的话,是不影响父类的方法的
		Father father = new Father();
		father.eat();
		father.driver();
	}

}

案例:

父类:
	交通工具:
		方法 run();
两个子类:
	飞机:
		方法 run()
	高铁:
		方法 run()
	公交车:
		方法 run()
package com.qfedu.d_override;

class Transportation {
	public void run () {
		System.out.println("可以跑......");
	}
	
}
class Fly extends Transportation {
	//是继承 我就u可以重写父类下面的方法了
	@Override//开启重写的严格的限制,告知编译器,下面的方法必须是重写的
	public void run () {
		System.out.println("飞机跑的很快大概500km/h");
	}
	
}
class Train extends Transportation {
	@Override
	public void run() {
		System.out.println("在铁轨上跑的300km/h");
	}
}
class Bus extends Transportation {
	@Override
	public void run() {
		System.out.println("在公路上跑的60km/h");
	}
}
public class Demo2 {
	public static void main(String[] args) {
		Train train = new Train();
		train.run();
	}
	

}

1.5重载【overload】

在Java中同一个类中可以有很多个方法。方法名字一样。但是参数类型不一样。这种叫重载

总结:

1.方法的重载必须在同一个类中
2.方法名字必须一致
3.方法的参数类型必须不一样
4.方法的返回值可以不一样
5.无参构造和有参构造 也是一种重载

面试题: 重写和重载的区别

package com.qfedu.d_override;

class Person {
	//在一个类中,方法法名字一样,但是参数一定不一样。这叫方法的重载
	//返回值可以不一样
	public void test () {
		System.out.println("test");
	}
	public void test (String name) {
		System.out.println(name);
	}
	public void test (int i) {
		System.out.println(i);
	}
	void test (double d1) {
		
	}
	public String test(String str1, String str2) {
		return str1 + str2;
	}
}
public class Demo3 {
	public static void main(String[] args) {
		
	}

}

作业:

1.把今天的消化掉
2.布置一些作业

String[] args) {
Train train = new Train();
train.run();
}

}


#### 1.5重载【overload】

> 在Java中同一个类中可以有很多个方法。方法名字一样。但是参数类型不一样。这种叫重载
>
> 总结:
>
> ```
> 1.方法的重载必须在同一个类中
> 2.方法名字必须一致
> 3.方法的参数类型必须不一样
> 4.方法的返回值可以不一样
> 5.无参构造和有参构造 也是一种重载
> ```
>
> 面试题: 重写和重载的区别

```Java
package com.qfedu.d_override;

class Person {
	//在一个类中,方法法名字一样,但是参数一定不一样。这叫方法的重载
	//返回值可以不一样
	public void test () {
		System.out.println("test");
	}
	public void test (String name) {
		System.out.println(name);
	}
	public void test (int i) {
		System.out.println(i);
	}
	void test (double d1) {
		
	}
	public String test(String str1, String str2) {
		return str1 + str2;
	}
}
public class Demo3 {
	public static void main(String[] args) {
		
	}

}

作业:

1.把今天的消化掉
2.布置一些作业

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/326200.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI对决:ChatGPT与文心一言的深度比较

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 引言ChatGPT与文心一言的比较Chatgpt的看法文心一言的看法Copilot的观点chatgpt4.0的回答 模型的自我评价自我评价 ChatGPT的优势在这里插入图片描述 文…

【刷题】leetcode 1 . 两数之和

两数之和 两数之和1 思路一 &#xff08;简单突破&#xff09;2 思路二 &#xff08;进行优化&#xff09;3 思路三 &#xff08;哈希表 我还不会&#xff09; 谢谢阅读Thanks♪(&#xff65;ω&#xff65;)&#xff89;下一篇文章见&#xff01;&#xff01;&#xff01; 两数…

uniapp的nvue是什么

什么是nvue uni-app App 端内置了一个基于 weex 改进的原生渲染引擎&#xff0c;提供了原生渲染能力。 在 App 端&#xff0c;如果使用 vue 页面&#xff0c;则使用 webview 渲染&#xff1b;如果使用 nvue 页面(native vue 的缩写)&#xff0c;则使用原生渲染。一个 App 中可…

USB Redirector本地安装并结合内网穿透实现远程共享和访问USB设备

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 USB Redirector是一款方便易用的USB设备共享服务应用程序&#xff0c;它提供了共享和访问本地或互联网上的U…

十五.流程控制与游标

流程控制与游标 1.流程控制1.1分支结构之IF1.2分支结构值CASE1.3循环结构之LOOP1.4循环结构之WHILE1.5循环结构之REPEAT1.6跳转语句之LEAVE语句1.7跳转语句之ITERATE语句 2.游标2.1什么是游标2.2使用游标步骤4.3举例4.5小结 1.流程控制 解决复杂问题不可能通过一个 SQL 语句完…

深度学习基础知识整理

自动编码器 Auto-encoders是一种人工神经网络&#xff0c;用于学习未标记数据的有效编码。它由两个部分组成&#xff1a;编码器和解码器。编码器将输入数据转换为一种更紧凑的表示形式&#xff0c;而解码器则将该表示形式转换回原始数据。这种方法可以用于降维&#xff0c;去噪…

【图形学】直线光栅化算法(DDA算法和Bresenham算法)

在数学上,直线就是由无穷多个点组成的, 在计算机屏幕显示的话, 需要做一些处理,对于光栅显示器&#xff0c;就是用有限多个点去逼近直线, 我们需要知道每一个像素点的坐标(都是整数) 数学上直线的方程如下 y k x b ykxb ykxb&#xff0c;给定直线的起点坐标 P 0 ( x 0 , y…

开源 UI 组件库和开发工具库概览 | 开源专题 No.59

ant-design/ant-design Stars: 87.9k License: MIT Ant Design 是一个企业级 UI 设计语言和 React UI 库。 为 Web 应用程序设计的企业级 UI。提供一套高质量的开箱即用的 React 组件。使用可预测静态类型编写 TypeScript 代码。包含完整的设计资源和开发工具包。支持数十种语…

QT上位机开发(软件的发布和部署)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 我们在读书的时候&#xff0c;如果程序写好了&#xff0c;这个时候一般直接把exe拷贝给老师就可以了。这就是最原始的软件发布。但是&#xff0c;这…

“核弹级“攻击队视角下的监管痛点解决方案

痛点分析及解决方案 一、辖区企业资产分散且不透明 - 传统的监管体系中&#xff0c;政府监管单位往往面临着辖区企业资产分散且不透明的问题。 - 企业无法梳理自身资产&#xff0c;上报的资产台账无法涵盖全部自身资产 - 监管单位精力有限&#xff0c;无法保证辖区企业资产台账…

解决jmeter测试计划无法保存、另存为的问题

问题&#xff1a; 在保存测试计划时直接保存在C:\Windows\System32&#xff0c; 导致执行时报错Couldn’t save test plan to file&#xff1a;C:\Windows\System32 解决方案&#xff1a; 将路径改为 options--------Look And Feel-------windows

Express框架使用全流程

1.目的和使用场景 对于像我这样不常使用 Node.js 进行开发的人来说&#xff0c;每次开始一个新项目都意味着从头开始设置环境&#xff0c;这个过程相当繁琐。因此&#xff0c;我决定自己构建一个开箱即用的项目脚手架。我的目标是创建一个简单易用的基础框架&#xff0c;能让我…

NET Core发布 HTTP Error 500.31 - Failed to load ASP.NET Core runtime

记录一下踩过的坑&#xff1a; 首先&#xff0c;不论是500.31还是500.30 &#xff0c;首先确保安装了三个文件 1.NET Core RunTime 2.NET SDK 3.NET Hosting 其次&#xff0c;确保三个文件的版本一致&#xff0c;如下&#xff1a; 要装就统一装同一个大版本&#xff0c;不要东…

51单片机学习总结(自学)

1、模块化编程 c语言模块化编程实现思路设计代码 具体的程序实现代码如下所示 1&#xff1a;程序的头文件 2&#xff1a;程序的函数文件 3&#xff1a;程序的主文件控制函数的实现 持续更新中......

训练YOLOS-S

文章目录 1 数据处理2 配置训练参数3 可能会遇到的报错 1 数据处理 修改类别数&#xff1a;在models/detector.py中定位到def build(args):&#xff0c;将num_classes进行修改&#xff0c;改为最大的类别id1。我有4个类别&#xff0c;类别id是从0~3&#xff0c;因此max_id3&am…

怎样才能找到合适的产品说明书模板 方法献上

制作一份专业而吸引人的产品手册对于企业来说至关重要。然而&#xff0c;对于许多企业和个人而言&#xff0c;制作产品手册可能是一个挑战&#xff0c;因为需要一定的设计和排版能力。为了帮助大家更轻松地制作出优质的产品手册&#xff0c;下面将向大家推荐三款优秀的产品手册…

如何提高客户消息的快速准确回复能力?

无论是企业还是个人&#xff0c;能够快速而准确地回复客户消息是非常重要的&#xff0c;这不仅可以增强客户对你的信任度&#xff0c;还能促进客户的满意度。 那么&#xff0c;我们该如何提高自己的回复能力呢&#xff1f;接着往下看&#xff0c;你就知道啦&#xff01; 1、学…

华为埋头造车,躺赚的却是黄牛?

文 | AUTO芯球 作者 | 雷歌 华为和赛力斯正在重庆哼哧a哼哧建厂造车&#xff0c;黄牛却在网上倒卖订单躺着赚钱。 前两天雷歌刚去试驾了问界M9&#xff0c;现场一车难求。 今天回来一看&#xff0c;好家伙&#xff0c;咸鱼上&#xff0c;黄牛们大量倒卖M9的大定订单&#x…

瑞_Java开发手册_(七)设计规约

文章目录 设计规约的意义设计规约 &#x1f64a;前言&#xff1a;本文章为瑞_系列专栏之《Java开发手册》的设计规约篇。由于博主是从阿里的《Java开发手册》学习到Java的编程规约&#xff0c;所以本系列专栏主要以这本书进行讲解和拓展&#xff0c;有需要的小伙伴可以点击链接…

大物②练习题解

1.【单选题】关于磁场中磁通量&#xff0c;下面说法正确的是&#xff08; D&#xff09; A、穿过闭合曲面的总磁通量不一定为零 B、磁感线从闭合曲面内穿出&#xff0c;磁通量为负 C、磁感线从闭合曲面内穿入&#xff0c;磁通量为正D、穿过闭合曲面的总磁通量一定为零 磁感线从…