第三周课程总结及实验报告(一)

第三周课程总结

面向对象的程序设计

特性:①封装性 ②继承性 ③多态性

类的定义

1、

class 类名称{
    属性
    方法
    }
  • 1
  • 2
  • 3
  • 4

2、声明一个类需要通过一个关键字class
3、类与对象的关系
1)类是对某一类事物的描述,是抽象的、概念上的意义,对象是实际存在的该类事物的每一个个体,也被称为实例。

内存划分
这里写图片描述

开辟堆内存空间的时候,对nameage进行了初始化。
没有实例化,就没有开辟堆内存,栈指针就没有指向,就会出现空指针异常。

对象的创建及使用



对象的引用和传递

关键字new用来创建对象。从一个类中创建用一个对象被称为实例化,所以,对象也常被称为实例。Java中新创建的对象被放在被称为“堆”的系统存储区中。Java中的对象都通过“对象引用”(object reference)来访问。一个类的变量持有一个对象,实际上是对该对象的引用。当变量不再引用任何对象时,该对象引用就为null。而我们说的把对象传给一个方法实际上是把对象的引用传给一个方法(参考C++中指针的概念)。但是多数情况下,对象和对象引用的区别都被大家忽略。而这又恰恰是理解对象的关键。

 

封装性的使用

编程中封装的具体优点:
1.提高代码的安全性
2.提高代码的复用性
3.“高内聚”:封装细节,便于修改内部代码,提高可维护性
4.“低耦合”:简化外部调用,便于调用者使用,便于扩展和写作。
java中使用“访问控制符”来控制哪些细节需要封装。哪些细节需要暴露的。Java中4种“访问控制符”。分别为:private、default、protected、public,他们说明了面相对象的封装性。

对外提供公开的用于设置对象属性的public方法

          1:设置set

          2:获取get

      2:在set方法中加入逻辑判断,过滤掉非法数据。

构造方法的定义及注意事项

   构造方法:构造方法是为类中的属性初始化的.

    1构造方法的特征:与类名称相同、不含返回值类型的定义、不能在方法中使用return返回一个值

    2通过构造方法为属性初始化的时候,最好也经过setter方法完成.

    eg:

class Car{

private String a;//进行了封装

private int b;

Car(String s,int n){

this.setA(s);//通过构造方法为属性初始化时,最好使用setter方法完成

this.setB(n);

 

}

public String getA() {

return a;

}

public void setA(String a) {

this.a = a;

}

public int getB() {

return b;

}

public void setB(int b) {

this.b = b;

}

 

}

 

 

this

this是 JavaScript 语言的一个关键字。

它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用。

二:作为对象方法的调用

作为构造函数调用

所谓构造函数,就是通过这个函数,可以生成一个新对象。这时,this就指这个新对象。


function test() {
 this.x = 1;
}

var obj = new test();
obj.x // 1

 

String对象的声明

 String类是用来构造一个字符串对象的.字符串对象操作在程序当中会频繁的使用到,我们可以通过实现这个类,就可以构造我们需要的字符串对象。通过String类构造字符串对象的方式主要有两种:(1)常用的创建方式    String s = "常用的创建方式";(这种创建方式比较节省内存资源)    如:String s1 = "abcd";        String s2 = "abcd";(s1==s2,这是因为这两个引用变量在内存中存的地址是一样的)(2)不常用的创建方式    String str = new String();    如:String str1 = new String("abcd");

 

String与new String

栈区存引用和基本类型,不能存对象,而堆区存对象。==是比较地址,equals()比较对象内容。

字符串的内容不可改变

String类是final类故不可以继承,也就意味着String引用的字符串内容是不能被修改。String有两种实例化方式:

   (1)直接赋值(例中,String str = "Hello";就是直接赋值实例化了)
   (2)使用new调用构造方法完成实例化;

                                 二,实验操作    song        jia        hao

1.打印输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其中各位数字立方和等于该数本身。例如,153是一个“水仙花数”。

2. 编写Java程序,求13-23+33-43+…+973-983+993-1003的值。

3. 编程求1!+2!+3!+…+20!。

4. 编写Java程序,计算8+88+888+…前10项之和。

5. 一个数如果恰好等于它的因子之和,这个数就称为完数。编写程序输出1000以内的所有完数。

6. 编写应用程序,输出满足1+2+3+…+n<8888的最大正整数。

7. 使用for循环打印下面的图(等腰三角形)

1、打印输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其中各位数字立方和等于该数本身。例如,153是一个“水仙花数”。
实验源代码

public class new1{
       public static void main(String[] args)
       {
            int  i, u, t, h;
            
            for(i=100;i<1000;i++)
            {
                 u=i%10;
                 t=i/10%10;
                 h=i/100%10;
              
                 if(i==u*u*u+t*t*t+h*h*h)
                 {
                       System.out.println("水仙花数是"+i);
                  }
             }
         }
}

实验结果

2、编写Java程序,求13-23+33-43+…+973-983+993-1003的值。
实验源代码

public class new1 {
    public static void main(String[] args) {
        int n,sum=0;
                for(n=1;n<101;n++){
                    if(n%2==0){
                        sum-=n*10+3;
                    }
                    else{
                        sum+=n*10+3;
                    }
                }
                System.out.println(sum);
    }
}

 

3、编程求1!+2!+3!+…+20!。
实验源代码

public class new1 {
    public static void main(String[] args) {
        int i,j;
        long s=1,sum=0;
        for (i=1;i<=20;i++) {
            for (j=1;j<=i;j++) {
                s=s*j;
            }
            sum+=s;
            s=1;
        }
        System.out.println(sum);
    }
}

实验结果

4、编写Java程序,计算8+88+888+…前10项之和。
实验源代码

public class new1 {
    public static void main(String[] args) {
        int n=8,sum=0;
        for(int i=1;i<11;i++) {
            sum+=n;
            n=(8+n*10);
        }
        System.out.println(sum);
    }
}

实验结果

5、一个数如果恰好等于它的因子之和,这个数就称为完数。编写程序输出1000以内的所有完数。
实验源代码

public class new1 {
    public static void main(String[] args){
        int i,j;
        for(i=1;i<1001;i++){
            int sum=0;
            for(j=1; j<i; j++){
                if(i%j==0){
                    sum+=j;
                }
            }
            if(i==sum){
                System.out.println( i );
            }
        }
    }

}

实验结果

6、编写应用程序,输出满足1+2+3+…+n<8888的最大正整数。
实验源代码

public class new1 {
    public static void main(String[] args){
        int sum=0;
        for(int i=1;sum<8888;i++){
            sum+=i;
            if(sum+i>8888){
                System.out.println(i-1);
            }
        }
    }
}

实验结果

7、使用for循环打印下面的图形。
实验源代码

public class new1 {
    public static void main(String[] args){
        for(int i=0;i<5;i++){
            for(int j=i+1;j<5;j++){
                System.out.print(" ");
            }
            for(int k=0;k<=i;k++){
                System.out.print("* ");
            }
            System.out.println();
        }
    }
}

实验结果

posted on 2019-09-12 20:52  莫念初  阅读(201)  评论(0编辑  收藏  举报

导航