Setsuna - Java
type: channel
link: https://www.kok-s0s.top/index.php/tag/Java
items: Network Programming
items: Multithreaded programming
items: Learn java from a fresh start
items: 与Java相关的问题

Network Programming
type: item
date: 2021-03-30T15:59:00+08:00
description: 网络编程 什么是计算机网络 eg:信封 写信 讲述包的概念（对方的信息，地址；自己的地址） eg: 打电话 --连接-- 接了 --通话 TCP 发短信 --发送了就完事了 --接受 UDP 计算机网络 计算机网络（英语：computer network），通常也简称网络，是指容许节点分享资源的数字电信网络[1]:1-3。在电脑网络，电脑设备会透过节点之间的连接（数据链路）互相交换数据。传输介质可分为有线及无线两类——有线的可用到双绞线、光纤电缆等介质[1]:1-4；无线则可用到Wi-Fi、NFC[2]:4-32。 网络编程的目的 无线电台 传播交流信息 数据交换 通信 要达到效果所需的 如何准确定位网络上的一台主机 eg：192.168.16.124 : 端口 ，定位到这个计算机上的某个资源 找到这个主机，如何传输数据？ 传输介质 javaweb：网页编程 网络编程：TCP/IP C/S 网络通信的两个要素 如何实现网络的通信？ 通信双方的地址： ip 端口号 eg：192.168.16.124：5900 规则：网络通信的协议 TCP/IP 参考模型 网络编程中两个主要的问题 如何准确定位到网络上的一台或者多台主机 找到主机之后如何进行通信 网络编程的要素 IP 和 端口号 ip 网络通信协议 udp，tcp 万物皆对象 ---Java IP地址 IP地址：InetAddress 唯一定位一台网络上计算机 127.0.0.1 ： 本机localhost ip地址的分类 IPv4/IPv6 IPv4 127.0.0.1 4个字节组成。 0~255，42亿个；30亿都在北美，亚洲4亿；2011年用尽IPv4 IPv6 fe80::d06b:cf88:8c85:7e09%9 128位；8个无符号整数！ eg: 2001:0bb2:aaaa:0015:0000:0000:1aaa:1321 公网（互联网） 私网（局域网） ABCD类地址 192.168.xxx.xxx 专门给组织内部使用的 域名：IP地址不容易记忆，用域名更方便 eg：我的blog域名为 www.kok-s0s.top package lesson01; import java.net.InetAddress; import java.net.UnknownHostException; //测试ip public class TestInetAddress { public static void main(String[] args) { try { //查询本机地址 InetAddress inetAddress1 = InetAddress.getByName("127.0.0.1"); System.out.println(inetAddress1); InetAddress inetAddress3 = InetAddress.getByName("localhost"); System.out.println(inetAddress1); InetAddress inetAddress4 = InetAddress.getLocalHost(); System.out.println(inetAddress1); //查询我的blog地址 InetAddress inetAddress2 = InetAddress.getByName("www.kok-s0s.top"); System.out.println(inetAddress2); //常用方法 System.out.println(inetAddress2.getAddress()); System.out.println(inetAddress2.getCanonicalHostName()); System.out.println(inetAddress2.getHostAddress()); System.out.println(inetAddress2.getHostName()); } catch (UnknownHostException e) { e.printStackTrace(); } } } 端口Port 端口表示计算机上的一个程序的进程： 不同的进程有不同的端口号！用来区分软件！ 规定范围 0~65535 * 2 可以 TCP:80 UDP:80 同时存在，但单个协议下，端口号不能冲突 端口分类 公有端口 0~1023 HTTP : 80 HTTPS : 443 FTP : 21 Telent : 23 程序注册端口：1024~49151，分配给用户或者程序 Tomcat : 8080 MySQL : 3306 Oracle : 1521 动态，私有：49152~655…

Multithreaded programming
type: item
date: 2021-03-23T15:45:00+08:00
description: ⭐Important 学习渠道_遇见狂神说B站视频 线程基本概念 线程 进程 多线程 多线程 多个同时在运行的任务 一个进程可以有多个线程，如视频中同时听声音，看图像，看弹幕，等等 Process与Thread 程序，是指令和数据的有序集合，其本身没有任何运行的含义，是一个静态的概念。 进程则是执行程序的一次执行过程，它是一个动态的概念。是系统资源分配的单位。 通常一个进程中可以包含若干个线程，当然一个进程中至少有一个线程，不然没有存在的意义。线程是CPU调度和执行的单位。 Tips：很多多线程是模拟出来的，真正的多线程是指有多个CPU，即多核，如服务器。如果是模拟出来的多线程，即在一个CPU的情况下，在同一个时间点，CPU只能执行一个代码，因为切换的很快，所以就有同时执行的错觉。 概念 线程就是独立的执行路径； 在程序运行时，即使没有自己创建线程，后台也会有很多个线程，如主线程，gc线程； main()称之为主线程，为系统的入口，用于执行整个程序； 在一个进程中，如果开辟了多个线程，线程的运行由调度器安排调度，调度器是与操作系统紧密相关的，先后顺序是不能人为干预的； 对同一份资源操作时，会存在资源抢夺的问题，需要加入并发控制； 线程会带来额外的开销，如CPU调度时间，并发控制开销； 每个线程在自己的工作内存交互，内存控制不当会造成数据不一致； 继承Thread类 Thread细节看Java SE 8帮助文档 package demo01; //创建线程方式一：继承Thread类，重写run()方法，调用start开启线程 //总结：注意，线程开启不一定立即执行，由CPU调度执行 public class TestThread extends Thread { @Override public void run() { //run方法线程体 for (int i = 0; i < 200; i++) { System.out.println("I'm watching you!" + i); } } public static void main(String[] args) { //main线程，主线程 //创建一个线程对象 TestThread testThread1 = new TestThread(); //调用start()方法开启线程 testThread1.start(); for (int i = 0; i < 1000; i++) { System.out.println("I'm learning!" + i); } } } 网图下载 package demo01; import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.net.URL; //练习Thread，实现多线程同步下载图片 public class TestThread2 extends Thread { private String url; //网络图片地址 private String name; //保存的文件名 public TestThread2(String url, String name) { this.url = url; this.name = name; } @Override public void run() { WebDownloader webDownloader = new WebDownloader(); webDownloader.downloader(url, name); System.out.println("下载了文件名为：" + name); } public static void main(String[] args) { TestThread2 t1 = new TestThread2("https://www.kok-s0s.top/usr/uploads/2021/03/750247936.jpg", "1.jpg"); TestThread2 t2 = new TestThread2("https://www.kok-s0s.top/usr/uploads/2021/03/1165126803.jpg", "2.jpg"); TestThread2 t3 = new TestThread2("https://www.kok-s0s.top/usr/uploads/2021/03/564529999.jpg", "3.jpg"); //线程并不一定立即执行，由CPU进行调度 t1.start(); t2.start(); t3.start(); …

Learn java from a fresh start
type: item
date: 2021-03-16T10:56:00+08:00
description: ⭐Important 学习渠道_遇见狂神说B站视频 JavaBase 注释 标识符 数据类型 基本类型（primitive type） 引用类型（reference type） 数据类型面试相关 类型转换 变量 变量作用域 常量 变量的命名规范 运算符 包机制 JavaDoc Java流程控制 用户交互Scanner Scanner进阶的使用 顺序结构 选择结构 原文件及switch实例 反编译结果 循环结构 while do...while for break && continue 练习 Java方法详解 什么是方法？ 方法调用 方法的重载 命令行传参 可变参数 递归 Java数组 什么是数组 数组的声明和创建 三种初始化及内存分析 下标越界及小结 数组的使用 二维数组 Arrays类讲解 冒泡排序 稀疏数组 面向对象编程 什么是面向对象 回顾与新知 类与对象的创建 构造器详解 创建对象内存分析 封装详解 什么是继承 Super详解 方法重写 什么是多态 instanceof和类型转换 static关键字详解 抽象类 接口的定义与实现 N种内部类 异常 Error和Exception 捕获和抛出异常 自定义异常 经验总结 JavaBase 注释 单行注释 //这是一个注释 多行注释 /* 这是个多行注释 */ 文档注释JavaDoc /** *@Description Hello *@Author kok-s0s */ 标识符 关键字 java所有的组成部分都需要名字。类名，变量名以及方法名都被称为标识符 标识符注意点 所有的标识符都应该以字母（A-Z或者a-z），美元符（$），或者下划线（_）开始 首字符之后可以是字母，美元符，下划线或数字的任何字符组合 不能使用关键字作为变量名或方法名 标识符是大小写敏感的 合法标识符eg：age，$salary，_value，__1_value 非法标识符eg：123abc，-salary，#abc public static void main(String[] args) { String 王者荣耀 = "最强王者"; System.out.println(王者荣耀); } 可以使用中文命名，但是一般不建议使用，也不建议使用拼音表达，因为很low 数据类型 强类型语言 要求变量的使用要严格符合规定，所有变量都必须先定义后才能使用 弱类型语言 与强类型相反 eg: JavaScript 基本类型（primitive type） 数值类型 整数类型 byte 占1个字节范围 int 占4个字节范围 short 占2个字节范围 long 占8个字节范围 浮点类型 float 占4个字节范围 double 占8个字节范围 字符类型 char 占2个字节范围 boolean类型 占1位 （true or false） 引用类型（reference type） 类 接口 数组 位（bit）：是计算机内部数据存储的最小单位，11001100是一个八位二进制数。 字节（byte）：是计算机中数据处理的基本单位，习惯商用大写B来表示。 1B（byte，字节）=8bit（位） 字符：是指计算机中使用的字母，数字 ，字和符号。 //八大基本数据类型 //整数 int num1 = 10; byte num2 = 20; short num3 = 30; long num4 = 30L; //long类型要在数字后面加个L //小数：浮点数 float num5 = 50.1F; //float类型要在数字后面加个F double num6 = 3.1415926; //字符 char name = '人'; //字符串，String不是关键字，是个类 //String name1 = "人类"; //布尔值：是非 boolean flag = true; //boolean flag = false; 数据类型面试相关 //整数扩展： 进制 二进制0b 十进制 八进制0 十六进制0x int i = 10; int i2 = 010; //八进制0 int i3 = 0x10; //十六进制0x 0~9 A~F 16 System.out.println(i); System.out.println(i2); System.out.println(i3); System.out.println("============================"); //================================================ //浮点数扩展？ 银行业务怎么表示？ 钱 //BigDecimal 数学工具类 //==============================…

与Java相关的问题
type: item
date: 2021-03-09T10:07:00+08:00
description: 卸载JDK 1.删除java的安装目录 2.清除变量设置里的JAVA_HOME 3.清除path与java相关的信息 4.试试java -version判断是否是否删除干净。 IDE 1.psvm自动生成主函数语句 2.sout快捷键自动生成输出语句 3.ctrl+alt+L能够做自动排版工作 4.Ctrl + D 复制当前行到下一行 intellij java 反编译 打开intellij的project struck选项,找到字节码文件的位置，将相应的文件拖到存放对应class文件的地方，再用intellij打开其文件，IDEA会自动反编译文件出来。 原文件 package struct; public class switchDemo { public static void main(String[] args) { String name = "kok-s0s"; //JDK7的新特性，表达式结果可以是字符串！！！ //字符的本质是数字 //反编译 java---class（字节码文件）---反编译（IDEA） switch (name) { case "kok-s0s": System.out.println("ok!"); break; case "who": System.out.println("who are you?"); break; default: System.out.println("what are you going to do?"); } } } 反编译结果 // // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package struct; public class switchDemo { public switchDemo() { } public static void main(String[] args) { String name = "kok-s0s"; byte var3 = -1; switch(name.hashCode()) { case -543248720: if (name.equals("kok-s0s")) { var3 = 0; } break; case 117694: if (name.equals("who")) { var3 = 1; } } switch(var3) { case 0: System.out.println("ok!"); break; case 1: System.out.println("who are you?"); break; default: System.out.println("what are you going to do?"); } } }