2023-10-15|閱讀時間 ‧ 約 17 分鐘

学习日记[16]

    现在补的是昨天的内容。

    1.《java高级编程》:主要是两个方面,一个是跳转语句,另一个是初始化和清理工作。先来讲跳转语句,它主要是用在循环内部的跳出循环的语句。分为四类,return,break,continue和标签语句。return语句有两个作用,给方法一个返回值与结束该方法。这两层含义说明它大多数时间是用在方法内部的。break语句的功能是跳出整个循环语句,而不是循环语句中的一次循环,这是continue的作用。直观一点讲就是,break语句之后将不再进行该循环,而continue还是需要继续进行该循环的。标签语句是从goto演变而来,它限制了goto语句的适用范围和内部逻辑。goto是再编译层面之后进行跳转,而标签语句是在编译层面进行时进行跳转,这样就减少了许多不必要的bug。

    然后就是初始化和清理,文章讲的很详细,这里就不复制粘贴,就按照我的想法进行操作了。我把这一章节分为 个部分,分别是初始化和清理的必要性,构造器是什么,构造器和初始化的关系,如何进行清理,初始化的顺序及特殊的初始化。

    • 初始化和清理的必要性,这个书上讲的比我个人理解的详细多了,这里就抄录几段话:“这个元素占用的资源就会一直得不到释放,结果是资源用尽”“特别是在使用程序库时,如果用户不知道如何初始化库的构件,更是如此”
    • 构造器时在创建对象时自动调用的特殊的方法,但不无需特别定义,可以理解为每一个类自带的特殊方法。构造器的标识符和类的标识符,用来唯一识别这个类的方法,同时他也没有返回值。注意这里是没有返回值而不是返回值为空。构造器里可以进行相关的初始化操作,也可以不进行任何初始化,系统会帮助我们将每一个属性都进行赋予初始值。一般这种构造器称为默认构造器或者无参构造器,在创建类的同时进行初始化。好玩的是,即使我们不主动在类中添加构造器,编译器也会相对应的进行默认构造器的操作,以确保所有的可执行对象都能进行合理的初始化,从而减少错误的量。
    • 构造器是确保对象得到合理初始化的一种工具,但是初始化的工具还有很多,可以理解为包含关系。这里就不得不提两个特殊的性质。方法的重载和this关键词。方法的重载,是指方法名相同,参数列表不同的一类方法的总称。接受不同的参数从而进行个性化定制操作。但是返回值不是区分重载方法的标志,虽然我们可以在源代码上看到他的返回值不同,但是客户端只能看到方法名和参数列表是否合乎规则,返回值是无法查看的。如果一个类创建了多个对象,我们想要在某一个特定类执行某个操作,可用通过对象名来定位,但是在方法内部该如何定义指向呢?这时候this关键词就有出场的必要了,他是指向引用该对象本身,但是无法单独使用,除非是return this;这种情况,在使用时必须跟上该类中相对应的方法或者属性。
    • 如何清理这一节我是直接跳过了,等之后有时间再看吧,看这一节确实很枯燥
    • 初始化的顺序,总体来说遵循两条规则,先定义的先初始化,先静态后其他。这其中非静态是没什么可以说的,他就是简单的先定义先初始化。静态元素的初始化就是我们要讨论的点,他和非静态不同,静态变量通常只进行一次初始化,因为它的空间是公共的,不随着对象的不同而变化操作对象和空间。

    2.《计算机导论》:上次说到了DNS,它的功能是将某一个特定的名字唯一的映射到服务器的ip地址,让人们更直观地进行服务器的访问。这个名字是必须在命名空间的范围内才是一个规范的、合法的名字。在网络中,这个命名空间总称为域名空间,分为一般域和国家域,每一个域下都有许多个节点,我们熟悉的有com,net,gov,pro等等。其中一般域中有十四个节点,而国家域有很多,都是不同国家或国家某个州的缩写。

    然后就是P2P模式再解释,P2P又可分为集中式和分散式,集中式是指在用户之间添加一个中间服务器,这个服务器可以相应客户端的操作请求。分散式是指客户端之间连接而成一个虚拟的网络,称之为重叠网络。如果连接方式有规律,那就是结构化网络,相反,没有规律就是非结构化网络。结构化网络使用的是DHT,分布式散列表。

    下面一层是传输层,它的功能是接受网络层的数据,并把它送到相应的进程,使得应用层可以进行相关操作。传输层分为两个部分,客户端和服务器端,每一端都有一个地址和进程。地址之间、进程之间相互连结,地址用ip来表示,进程之间使用端口号来表示,客户端的端口号称为临时端口号,服务器端口号称为知名端口号,每一个临时端口号都知道与自己匹配的知名端口号,所我们只需要知道临时端口号即可

    我们是用协议让每一个步骤得到规范的,传输层也不例外,尽管传输层有许多不同的协议,但比较出名的有UDP(用户数据报协议)和TCP(传输控制协议),UPD不安全已经不用了。TCP规定了来连接设备、数据传输和链接拆卸段以提供更加全面的连接服务。这里要补充一些该概念,一个数据被分为很多称为段的数据包,TCP对每个段进行相关的加密编号,这个编号也被称为序列号。

    3.个人感悟:我读书不是为了全盘接收他们的观点,我是在理解的基础上删删减减,量身而裁。还有就是以后学习,至少带三本书,并且里面必须有一本哲学或是历史的书。三者这是分别进行一节这样量的学习,循环往复。我是这样想的,快乐地增长知识,等回过头来就毕业了,会想这些日常会微笑着感慨:好无聊的生活啊, :)

    4.这是我这两天的主要成果,就直接放在下面了,午安,各位。

    package addStack;

    import java.util.*;

    class Stack
    {
    //这里是栈的相关内容
    int []stack; //用数组来替代栈本身
    int capacity; //这个是栈的容量
    int top; //用top来标记栈的状态
    public Stack(int capacity)
    {
    this.capacity = capacity;
    this.top = -1;
    stack = new int[this.capacity];
    }

    //初始化栈,分配栈固定的容量
    public boolean is_E()
    {
    return top == -1;
    }

    //判断栈是否为空
    public boolean is_F()
    {
    return top >= (this.capacity - 1);
    }

    //判断栈是否已满
    public void add_Element(int data)
    {
    if( is_F() )
    System.out.println("栈已满,无法添加元素");
    else
    stack[++this.top] = data; //这里其实是两个步骤,++i是先相加然后进行赋值
    }

    //遍历栈
    public void print_Stack()
    {
    int i = this.top;
    if( is_E() )
    System.out.print("栈为空,无法打印。");
    else
    {
    System.out.print("结果是:");
    for( ; i >= 0 ; i--)
    {
    System.out.print("\u001B[31m" +stack[i]); //改变重要数据的颜色,此处是红色
    }
    }
    }
    //栈的使用长度
    public int getLength_Stack()
    {
    return (this.top + 1);
    }
    //清空栈
    public void clear_Stack()
    {
    if (is_E())
    return;
    else
    while (!is_E())
    stack[top--] = 0; //同样,这里也是两步
    }
    }
    class Convert
    {
    //为了更好地进行相关操作,虽然它不是属性,但还是放在这里比较好
    Scanner scanner = new Scanner(System.in);
    Stack p = new Stack(32);
    int data;
    int choice;
    int standard = 127;
    //构造函数进行类的初始化
    public Convert()
    {
    this.data = -1;
    this.choice = -1;
    }
    //输入类,1:基准数 2:选择
    public void input_Data(int i)
    {
    do
    {
    try
    {
    //输入需要转化的数据
    if(i == 1)
    {
    System.out.print("\n请输入您希望转化的正整数[ > 127]: ");
    this.data = scanner.nextInt();
    if (standard <= data)
    break;
    continue;
    }
    //输入功能
    else if(i == 2)
    {
    System.out.print("\n请输入您希望进行的操作: ");
    this.choice = scanner.nextInt();
    if(choice >= 0 && choice <= 6)
    break;
    continue;
    }
    }
    catch (java.util.InputMismatchException e)
    {
    System.out.println("\n\n您输入的并非规定内容\n");
    scanner.next(); //清除键盘缓冲值,无限循环问题出在这里
    }
    }while( true );
    }

    //打印用户可操作的选项
    public void print_Function()
    {
    System.out.print("\u001B[0m"); // 恢复默认颜色
    if( data < 0 )
    {
    System.out.println("\n未找到可执行数据");
    }
    else
    {
    System.out.print("\n\n-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
    System.out.println("\n 功能区:1.转化为二进制 2.转化为八进制 3.转化为十六进制 ");
    System.out.println("\n 系统区:4.更改数据 5.查看当前需要转换的数据 6.退出程序");
    System.out.print("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
    }

    }



    //选项的一些具体事项,实现转化功能
    //这里还是有些臃肿,后面再改一下
    public void convert_Function()
    {
    int temp = this.data;
    //二进制转化
    if( choice == 1 )
    {
    p.clear_Stack();
    do
    {
    p.add_Element(temp % 2);
    temp /= 2;
    }while( temp >= 2 );
    p.add_Element(temp);
    System.out.println();
    p.print_Stack();
    }
    //八进制转化
    else if( choice == 2 )
    {
    p.clear_Stack();
    do
    {
    p.add_Element(temp % 8);
    temp /= 8;
    }while( temp >= 8 );
    p.add_Element(temp);
    System.out.println();
    p.print_Stack();
    }
    //十六进制转化
    else if( this.choice == 3 )
    {
    p.clear_Stack();
    do
    {
    int i = temp % 16;
    if( i <= 15 && i >= 10)
    p.add_Element( (i - 10) + 'A');
    else
    p.add_Element( i + '0');
    temp /= 16;
    }while( temp >= 16);
    if( temp <= 15 && temp >= 10)
    p.add_Element( (temp - 10) + 'A');
    else
    p.add_Element( temp + '0');
    System.out.println();
    System.out.print("结果是:");
    for( int k = this.p.top ; k >= 0 ; k--)
    {
    System.out.printf("\u001B[31m" + "%c",p.stack[k]);
    }
    }
    //重新输入数据
    else if( this.choice == 4 )
    {
    p.clear_Stack();
    input_Data(1);
    print_Function();
    input_Data(2);
    convert_Function();
    }
    //查看数据
    else if(choice == 5)
    {
    p.clear_Stack();
    System.out.println("\n当前的数据为:" + "\u001B[31m" + this.data);
    print_Function();
    input_Data(2);
    convert_Function();
    }
    //退出程序
    else if(choice == 6)
    {
    p.clear_Stack();
    System.out.println("\n程序已退出,感谢使用");
    }
    }
    }
    public class Text
    {
    public static void main(String[] args)
    {
    Scanner scanner = new Scanner(System.in);
    Convert text = new Convert();
    text.input_Data(1);
    do
    {
    try
    {
    text.print_Function();
    text.input_Data(2);
    text.convert_Function();
    }
    catch (java.util.InputMismatchException e)
    {
    System.out.println("\n\n您输入的并非整数,请进行相关\n");
    continue;
    }
    }while( text.choice != 6);
    }
    }



    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.