千禧难题之五:
杨-米尔斯规范场存在性和质量间隔假设:杨-米尔斯场论讲的是现代规范场(规范场讲的就是在一定条件下,每一种物品都是有规律的)理论的基础,旨在使用非阿贝尔李群描述基本粒子的行为,是由物理学家杨振宁和米尔斯在1954年首先提出来的。以杨·米尔斯理论为基础的规范场论可以说是20世纪后半叶最伟大的物理成绩之一,其成功为量子电动力学、弱相互作用和强相互作用提供了一个统一的数学形式化架构——标准模型,而标准模型准确地预言了在世界各地实验室中观察到的事实,其应用已经深入在物理学的其他分支中,诸如统计物理、凝聚态物理和非线性系统等等。
科普
知识
前言
本周我们就进入Java学习的新篇章,java提升篇的学习,上一篇章我们主要是学习了类和对象,其中构造方法是我们需要重点要掌握的内容。新一篇章我们来学习面向对象语言的三大特性—封装、继承和多态!本周我们主要是对封装进行学习。
一、封装
封装将类的某些信息隐藏在类内部,不允许外部程序直接访问,只能通过该类提供的方法来实现对隐藏信息的操作和访问。
例如:一台计算机内部极其复杂,有主板、CPU、硬盘和内存, 而一般用户不需要了解它的内部细节,不需要知道主板的型号、CPU 主频、硬盘和内存的大小,于是计算机制造商将用机箱把计算机封装起来,对外提供了一些接口,如鼠标、键盘和显示器等,这样当用户使用计算机就非常方便。
二、封装的特点
二、封装的特点:
1.只能通过规定的方法访问数据。
2.隐藏类的实例细节,提高代码的复用性。
三、封装的具体步骤
三、实现封装的具体步骤如下:
1.修改属性的可见性来限制对属性的访问,一般设为 private。
2.为每个属性创建一对赋值(setter)方法和取值(getter)方法,一般设为 public,用于属性的读写。
3.在赋值和取值方法中,加入属性控制语句(对属性值的合法性进行判断)。
四、实战
下面以一个学生类的封装为例介绍封装过程。一个学生的主要属性有姓名、年龄。假设学生类为Student,示例如下:
package tisheng1;
public class Student {
private String name; // 姓名
private int age; // 年龄
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
// 对年龄进行限制
if (age < 6 || age > 50) {
System.out.println("年龄必须在6到50之间!否则默认年龄为18!");
this.age = 18; // 默认年龄
} else {
this.age = age;
}
}
}
如上述代码所示,使用private 关键字修饰属性,这就意味着除了 Student 类本身外,其他任何类都不可以访问这些属性。但通过这些属性的 setXxx() 方法来对其进行赋值,通过 getXxx() 方法来访问这些属性。
编写测试类TestStudent,在该类的main() 方法中调用Employee属性的setXxx()方法对其相应的属性进行赋值,并调用getXxx()方法访问属性,代码如下:
package tisheng1;
public class TestStudent {
public static void main(String[] args) {
Student people = new Student();
people.setName("小圈圈");
people.setAge(16);
System.out.println("姓名:" + people.getName());
System.out.println("年龄:" + people.getAge());
}
}
通过封装,实现了对属性的数据访问限制,满足了年龄的条件。在属性的赋值方法中可以对属性进行限制操作,从而给类中的属性赋予合理的值,并通过取值方法获取类中属性的值(也可以直接调用类中的属性名称来获取属性值)。代码及运行结果截图如下:
小编有话说
喜大普奔!小编的电脑又可以正常运作了。那我们立刻马上就来揭露上周练习题目的参考答案吧。
第一题:
package jinjie13;
import java.util.Scanner;
public class Circle {
double radius;
public Circle() {
System.out.println("无参构造函数被调用,需要输入圆半径");
Scanner scanner = new Scanner(System.in);
System.out.print("请输入圆的半径(cm):");
double r;
r = scanner.nextDouble();
radius = r;
}
public Circle(double r) {
this.radius = r;
System.out.println("有参数的构造函数被调用,radius="+radius);
}
public void getArea() {
double area = Math.PI * radius * radius;
System.out.println("圆的面积为:" + area);
}
public void getPerimeter() {
double perimeter = 2 * Math.PI * radius;
System.out.println("圆的周长为:" + perimeter);
}
}
package jinjie13;
public class Test1 {
public static void main(String[] args){
Circle c1 = new Circle();//调用无参数的构造方法
c1.getArea();
c1.getPerimeter();
System.out.println();
Circle c2 = new Circle(8.8);//调用一个参数的构造方法
c2.getArea();
c2.getPerimeter();
}
}
第二题:
package jinjie13;
public class Student {
String stuID="180030T";
String name="小圈圈";
String gender="男";
public Student(){}//调用无参构造方法
public Student(String ID,String name,String gender){
this.stuID=ID;
this.name=name;
this.gender=gender;
}
public void run(){
System.out.printf("我是%s,学号为%s,性别为:%s",name,stuID,gender);
System.out.println();
}
public void examine(){
int score=90;
System.out.printf("%s的成绩为:%s",name,score);
System.out.println();
}
}
package jinjie13;
public class Test2 {
public static void main(String[] args){
Student a1 = new Student();
a1.run();
a1.examine();
System.out.println();
Student a2 = new Student("180029T","小布丁","女");
a2.run();
a2.examine();
}
}
第三题:
package jinjie13;
public class ducks {
public static int count(int n){
int sub=2;//剩下的鸭子数
if(n<=7){
sub=count(n+1)*2+2;
n--;
}
return sub;
}
public static void main(String[]args){
System.out.println("出发时共有"+count(1)+"只鸭子");
for(int i=1;i<=7;i++){
System.out.println("经过第"+i+"个村庄有"+count(i)+"鸭子,卖出"+(count(i)/2+1)+"只鸭子,还剩"+count(i+1)+"只鸭子");
}
}
}
第四题:
package jinjie13;
import java.util.Scanner;
public class jiaogu {
static int count=1;
public static int judge(int n){
System.out.print(n+" ");
if(1==n){
System.out.println();
return count;//最后得到数字1 返回次数
}else{
if(n%2==0){
count++;
return judge(n/2);//偶数
}else{
count++;
return judge(n*3+1);//奇数
}
}
}
public static void main(String[] args) {
System.out.printf("请输入一个数字:");
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println("经过了"+judge(n) +"次");
}
}
编辑:玥怡居士|审核:世外居士
往期精彩回顾
Java学习历程之----进阶篇总结(十三)
Java学习历程之----进阶篇(十二)
Java学习历程之----进阶篇(十一)
IT进阶之旅
扫码关注我们
我就知道你在看!