学习日记[16]

閱讀時間約 17 分鐘

现在补的是昨天的内容。

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);
}
}



    avatar-img
    0會員
    20內容數
    这个专题是我个人的学习日记,每日会更新,内容很乱,请多见谅。
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    你可能也想看
    Google News 追蹤
    Thumbnail
    嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
    Thumbnail
    這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
    Thumbnail
    本章節是Java入門的第八天,主要介紹物件導向的概念。這包括了類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、Lambda表達式、泛型和反射等主題。每個主題都配有相關的程式碼範例,以協助讀者更好地理解這些概念。
    Thumbnail
    本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
    Thumbnail
    此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
    Thumbnail
    此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
    Thumbnail
    本章節是一個初級的 TypeScript 教學,主要介紹了 TypeScript 中物件導向程式設計的各種核心概念,包括類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等。每個概念都通過詳細的解釋和實例代碼來進行深入的介紹。
    Thumbnail
    default methods 似乎也引起不小的討論,因為 default methods 加上可以實作多個介面,已經有點像 C++ 的多重繼承了,只差在沒辦法繼承成員變數而已,是好是壞就看怎麼使用了。我個人覺得還蠻方便的
    ※ 迴圈控制的兩個指令:break(跳脫)、continue(繼續) break(跳脫):當遇到一個需要強制脫離迴圈的情境,使用break(跳脫)就會直接跳出迴圈。 continue(繼續):用於跳過迴圈目前的迭代,直接開始下一次迭代的執行。 造成無限迴圈的例子: 說明: 當 x 的值
    Thumbnail
    在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
    我希望自己能一直寫下去 讀過的東西大部分都會忘記,為了讓自己在未來快速回憶已經理解過的東西,現在要再多花點時間把知識內化,用自己的話寫出來 回到課程內容: 1.recursion每呼叫自己一次就會在stack push 1個”activation record”(我先簡稱為空間,這名稱需要背嗎
    Thumbnail
    嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
    Thumbnail
    這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
    Thumbnail
    本章節是Java入門的第八天,主要介紹物件導向的概念。這包括了類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、Lambda表達式、泛型和反射等主題。每個主題都配有相關的程式碼範例,以協助讀者更好地理解這些概念。
    Thumbnail
    本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
    Thumbnail
    此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
    Thumbnail
    此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
    Thumbnail
    本章節是一個初級的 TypeScript 教學,主要介紹了 TypeScript 中物件導向程式設計的各種核心概念,包括類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等。每個概念都通過詳細的解釋和實例代碼來進行深入的介紹。
    Thumbnail
    default methods 似乎也引起不小的討論,因為 default methods 加上可以實作多個介面,已經有點像 C++ 的多重繼承了,只差在沒辦法繼承成員變數而已,是好是壞就看怎麼使用了。我個人覺得還蠻方便的
    ※ 迴圈控制的兩個指令:break(跳脫)、continue(繼續) break(跳脫):當遇到一個需要強制脫離迴圈的情境,使用break(跳脫)就會直接跳出迴圈。 continue(繼續):用於跳過迴圈目前的迭代,直接開始下一次迭代的執行。 造成無限迴圈的例子: 說明: 當 x 的值
    Thumbnail
    在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
    我希望自己能一直寫下去 讀過的東西大部分都會忘記,為了讓自己在未來快速回憶已經理解過的東西,現在要再多花點時間把知識內化,用自己的話寫出來 回到課程內容: 1.recursion每呼叫自己一次就會在stack push 1個”activation record”(我先簡稱為空間,這名稱需要背嗎