首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java学习历程之----提升篇(一)

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

作者头像
用户5410712
发布2022-06-01 18:15:35
发布2022-06-01 18:15:35
4270
举报
文章被收录于专栏:居士说AI居士说AI

千禧难题之五:

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

前言

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

一、封装

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

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

二、封装的特点

二、封装的特点:

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

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

三、封装的具体步骤

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

1.修改属性的可见性来限制对属性的访问,一般设为 private。

2.为每个属性创建一对赋值(setter)方法和取值(getter)方法,一般设为 public,用于属性的读写。

3.在赋值和取值方法中,加入属性控制语句(对属性值的合法性进行判断)。

四、实战

下面以一个学生类的封装为例介绍封装过程。一个学生的主要属性有姓名、年龄。假设学生类为Student,示例如下:

代码语言:javascript
复制
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()方法访问属性,代码如下:

代码语言:javascript
复制
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());
    }
}

通过封装,实现了对属性的数据访问限制,满足了年龄的条件。在属性的赋值方法中可以对属性进行限制操作,从而给类中的属性赋予合理的值,并通过取值方法获取类中属性的值(也可以直接调用类中的属性名称来获取属性值)。代码及运行结果截图如下:

小编有话说

喜大普奔!小编的电脑又可以正常运作了。那我们立刻马上就来揭露上周练习题目的参考答案吧。

第一题:

代码语言:javascript
复制
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);
    }
}
代码语言:javascript
复制
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();
    }
}

第二题:

代码语言:javascript
复制
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();
    }
}
代码语言:javascript
复制
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();
    }
}

第三题:

代码语言:javascript
复制
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)+"只鸭子");
        }
    }
}

第四题:

代码语言:javascript
复制
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) +"次");
    }
}

编辑:玥怡居士|审核:世外居士

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT进阶之旅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档