Java学习历程之----提升篇(一)

千禧难题之五:

杨-米尔斯规范场存在性和质量间隔假设:杨-米尔斯场论讲的是现代规范场(规范场讲的就是在一定条件下,每一种物品都是有规律的)理论的基础,旨在使用非阿贝尔李群描述基本粒子的行为,是由物理学家杨振宁和米尔斯在1954年首先提出来的。以杨·米尔斯理论为基础的规范场论可以说是20世纪后半叶最伟大的物理成绩之一,其成功为量子电动力学、弱相互作用和强相互作用提供了一个统一的数学形式化架构——标准模型,而标准模型准确地预言了在世界各地实验室中观察到的事实,其应用已经深入在物理学的其他分支中,诸如统计物理、凝聚态物理和非线性系统等等。                                                                                       

科普

知识

前言

      本周我们就进入Java学习的新篇章,java提升篇的学习,上一篇章我们主要是学习了类和对象,其中构造方法是我们需要重点要掌握的内容。新一篇章我们来学习面向对象语言的三大特性—封装、继承和多态!本周我们主要是对封装进行学习。

一、封装

      封装将类的某些信息隐藏在类内部,不允许外部程序直接访问,只能通过该类提供的方法来实现对隐藏信息的操作和访问。

例如:一台计算机内部极其复杂,有主板、CPU、硬盘和内存, 而一般用户不需要了解它的内部细节,不需要知道主板的型号、CPU 主频、硬盘和内存的大小,于是计算机制造商将用机箱把计算机封装起来,对外提供了一些接口,如鼠标、键盘和显示器等,这样当用户使用计算机就非常方便。

二、封装的特点

二、封装的特点:

  1. 1.只能通过规定的方法访问数据。

    2.隐藏类的实例细节,提高代码的复用性。

三、封装的具体步骤

三、实现封装的具体步骤如下:

  1. 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进阶之旅

扫码关注我们

我就知道你在看!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值