实验二 面向对象(一)(预习报告)

面向对象——Java实验报告

实验二: Java面向对象(二)

实验二 面向对象(一)(预习报告)

<center> 
<strong>姓名:</strong> 
<u>XXX</u> 
&emsp;&emsp;
<strong>班级:</strong> 
<u>XXXXX</u> 
&emsp;&emsp;
<strong>学号:</strong>
<u>XXXXXXXXXXXX</u></center>

一、实验目标

(1)能够根据需要解决的实际问题,利用Java语言实现类的定义;
(2)能够熟练运用构造方法来实例化对象以及调用对象的方法。

二、实验环境

IntelliJ IDEA Community Edition 2021.1 x64 + openjdk-16.0.1

三、实验准备

  • 定义一个计算机类,要求该类中至少包含3个私有的属性(为每个属性定义设置和获取方法),该类中至少包含两个构造方法(一个无参,一个有参),以及包含2-4个方法来描述计算机对象的行为(其中一个方法要能打印输出计算机对象的所有属性值)。

问题分析: 题目主要的几个信息点,计算机类三个私有属性两个构造方法类的描述方法(打印输出计算机对象的所有属性值)
因此可以构造以下主要结构:

class Computer{
 /* 三个私有属性
    private cpu;//cpu型号
    private Price;//计算机价格
    private Brand;//计算机品牌
    */
     /*每个属性的get方法和set方法;
    get属性(){return 属性;}
    set属性(新属性值){this.属性=新属性值;}
    */
     /*
    属性描述方法,例如
    public static void UseCpu() {System.out.println("Cpu --/50%");}
    */
     /*
    打印输出方法
        public static void infoComupter() {
        定义Computer各属性的信息;
        逐项打印Computer各属性信息;
    */}
  • 定义一个类,该类中包含以下几个方法(静态):
    (1) 实现字符串数组的逆序排序,输出结果为字符串数组;
    (2) 求两个整形数组的交集;
    (3) 求两个浮点型数组的并集;

问题分析: (1) 字符串数组逆序排序,可以通过双变量分别从进行首尾向中间逐次置换进行,则其可能的结构为:

StringReverse() {
  int i=0,j = (arry1.length)-1;
	 int mid= (arry1.length-1)/2;
  while(i<mid){
      char t = arry1[i];
      arry1[i++]=arry1[j];
      arry1[j--]=t;}
}

(2) 两个整型数组的交集,判断是否是两个数组共有的元素,当两个数组共有时存入新数组中。则函数的结构有:

IntIntersection() {
    定义数组nums1,nums2;
    int[]ans=new int[40];
    int k=0;
    for (int i = 0; i < num1.length; i++) {
        for (int j = 0;j< num2.length; j++) {
            if (num1[i] == num2[j]) {ans[k++]=num1[i];}
        }
    }
}

(3) 两个浮点数组的并集,思路与(2)相反,当非两个数组共有的时候存入新数组。则函数结构有:


public static void FloatUnion() {
    定义数组nums1,nums2;
    double[] ans = new double[50];
    int f = 0;
    for (int i = 0; i <nums1.length; i++) {
        boolean flag=true;
        for (int j = 0; j<nums2.length; j++) {
            if (nums1[i] == nums2[j]) {
                flag= false;//将数组2作为参考数组,两个数组共有时不进行操作
                break; 
            }
        }
        if (flag){ ans[f++]=nums1[i];}
    }
    for (int i =0;i<nums2.length;i++){
        ans[f++]=nums2[i];}//然后将参考数组存入结果数组
}
  • 定义一个表示学生信息的类Student,要求如下:

​ (1)类Student的成员变量:
sNO表示学号;sName表示姓名;sSex表示性别;sAge表示年龄;sJava:表示Java课程成绩。

​ (2)类Student带参数的构造方法:
​ 在构造方法中通过形参完成对成员变量的赋值操作。

​ (3)类Student的方法成员:
getNo():获得学号;
getName():获得姓名;
getSex():获得性别;
getAge():获得年龄;
getJava():获得Java 课程成绩
​ 根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。

问题分析: (1)(2)(3)按照题目需求逐项构造结构即可,如下(与第一题目要求类似)

//(1)类Student的成员变量:
class Student{
    private String sNO;//学号
    private String sName;//姓名
    private String sSex;//性别
    private String sAge;//年龄
    private double sJava;//Java课程成绩
//(2)类Student带参数的构造方法:在构造方法中通过形参完成对成员变量的赋值操作。
 public Student(String sNO, String sName, String sSex, String sAge, double sJava) {
        this.sNO = sNO;
        this.sName = sName;
        this.sSex = sSex;
        this.sAge = sAge;
        this.sJava = sJava;}
   //(3)类Student的方法成员:
 public String getNo() {return sNO;}//	getNo():获得学号;
    public String getsName() {return sName;}//	getName():获得姓名;
    public String getsSex() {return sSex;}//	getSex():获得性别;
    public double getsJava() {return sJava;}//	getAge():获得年龄;
    public String getsAge() {return sAge;}//	getJava():获得Java 课程成绩
   }

在题目主要部分的计算可以使用Arrylist存储将无序信息变得可以迭代使方便统计输出等操作。

public class experimentThree {
 public static void main(String[] args) {
        //创建五个该类的对象
        List<Student> Stu=new ArrayList<>();
        //存储学生对象
        double sum=0.0;
        double max = 0,min= wang.getsJava();
        for (var i :Stu){
            //输出学生对象
            sum +=i.getsJava();
            if (max<i.getsJava()) max=i.getsJava();//最大值
            else if (min> i.getsJava()) min = i.getsJava();}//最小值
        //输出这五个学生Java语言成绩的平均值sum/5,输出他们Java语言成绩的最大值max和最小值min。
    }}

四、预习遇到的问题

  在本次实验的预习过程中,由于基础知识不太扎实,导致多次在一些基本问题上栽跟头,比如私有变量的定义与赋值方面。在部分题目的理解上存在较大的误解,比如第一题字符逆序最开始的解决思路是直接使用循环从尾部开始逆向输出,这种方法相对取巧,是不可取的方案,经过老师的指导与讲解后对问题有了较为深入的理解才选用的现有方案。

### 回答1: ctfhub 文件上传 - 00截断是一种常见的安全漏洞,攻击者可以通过截断文件名或者文件内容来绕过文件上传的限制,从而上传恶意文件或者执行任意代码。这种漏洞需要开发人员在编写文件上传功能时注意对文件名和内容进行严格的校验和过滤,以防止攻击者利用截断漏洞进行攻击。同时,用户也应该注意不要上传可疑的文件或者访问不可信的网站,以保护自己的计算机安全。 ### 回答2: 文件上传漏洞是目前很多Web应用存在的一种常见漏洞,该漏洞的攻击者可以利用该漏洞从Web应用程序中上传恶意文件,绕过访问控制机制,并在受害者服务器上执行任意命令。 在CTFHub文件上传-00截断中,漏洞原理是:在上传文件时,上传文件的后缀名是通过从客户端请求中获取的,如果在获取后缀名的过程中,我们可以通过攻击来修改请求,就可以上传任意类型的文件,甚至是可执行文件,从而达到绕过文件类型的限制。 具体细节如下: 1. 开始上传文件,上传的文件后缀名为.php 2. 修改上传请求中的文件后缀名为.gif,并截断请求,使之只保留文件的前8个字节。 3. 上传的文件类型变为gif,并成功上传。 4. 由于文件类型被篡改,服务器未检测到有可执行文件被上传,因此上传成功。 5. 资产管理窗口中能够看到已上传的文件,并能够通过访问路径访问到上传的文件,例如,可以直接访问上传的可执行文件,从而达到绕过文件类型限制,执行任意命令的目的。 由此可见,文件上传漏洞是一种危害性较高的漏洞,因此开发人员在开发Web应用程序时,一定要认真检查,确保不会出现类似的漏洞现象。同时,在测试人员测试网站时,也应该重点检查文件上传功能,以确保网站的安全性和可靠性。 ### 回答3: ctfhub 文件上传 - 00截断是一种常见的文件上传漏洞攻击,攻击者利用该漏洞可以上传恶意文件并将其存储到服务器中,从而导致服务器被攻击。 文件上传 - 00截断漏洞主要是利用了一些文件上传的不足之处,攻击者可以通过伪造请求包来修改原始文件名,从而实现文件截断的目的,也就是只保留了原始文件名的部分内容而去掉了后面的内容。 当攻击者上传文件时,如果原始文件名过长,则服务器会自动截断文件名,一旦攻击者将文件名截断并发送一个伪造的请求包到服务器上,则服务器会根据该请求包上传一个被截断的文件,从而导致服务器受到攻击。 例如,攻击者可以将文件名设置为“hack.php\x00.jpg”,当该文件上传到服务器上时,服务器会将文件名截断为“hack.php”,从而隐藏了文件的真实后缀名,诱骗用户下载并执行该文件。 为了避免被此类文件上传漏洞攻击,开发人员应该加强字符串截断的限制,防止非法输入,并进行文件类型检测,只允许上传指定的文件类型,同时加密重要文件和数据,保护系统安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值