作业

1.多线程下载图片

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket; public class imageclient_Demo1 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(),9090);
InputStream IN = socket.getInputStream();
FileOutputStream out = new FileOutputStream("F:\\1.jpg");
byte[] buf = new byte[1024];
int content = 0;
while((IN.read(buf))!=-1) {
out.write(buf,0,content);
}
out.close();
socket.close();
}
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashSet; public class imageserver_Demo2 extends Thread{
Socket socket; HashSet<String> ips = new HashSet<String>(); public imageserver_Demo2(Socket socket) {
// TODO Auto-generated constructor stub
this.socket = socket;
} public void run() {
try {
// TODO Auto-generated method stub
OutputStream outputStream = socket.getOutputStream();
FileInputStream in = new FileInputStream("F:\\2.jpg");
byte[] buf = new byte[1024];
int content = 0;
while((in.read(buf))!=1) {
outputStream.write(buf,0,content);
}
String ip = socket.getInetAddress().getHostAddress();
if(ips.add(ip)) {
System.out.println("您好!"+ip+"。您已成功下载,当前下载量"+ips.size());
}
in.close();
socket.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public static void main(String[] args) throws IOException {
ServerSocket serversocket = new ServerSocket(9090); while(true) {
Socket socket = serversocket.accept();
new imageserver_Demo2(socket).start();
}
} }

2.实现登陆与注册 功能。

  客户端与服务端连接的时候,就要提示客户端请选择功能。
  客户端注册的时候,用户名与密码都是发送给服务端 的,服务端需要把数据保存到服务端的文件上。
  登陆: 登陆的时候客户端输入用户名与密码发送给服务端,服务端需要校验,返回结果给客户端。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket; public class LoginClinet { public static void main(String[] args) throws IOException {
Socket socket = new Socket(InetAddress.getLocalHost(),9090);
OutputStreamWriter socketOut = new OutputStreamWriter(socket.getOutputStream());
BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.println("请选择功能: A(登陆) B(注册)");
String option = keyReader.readLine();
if("a".equalsIgnoreCase(option)){
getInfo(socketOut, keyReader, option);
//读取服务器反馈的信息
String line = socketReader.readLine();
System.out.println(line);
}else if("b".equalsIgnoreCase(option)){
getInfo(socketOut, keyReader, option);
//读取服务器反馈的信息
String line = socketReader.readLine();
System.out.println(line);
}
}
} public static void getInfo(OutputStreamWriter socketOut,BufferedReader keyReader, String option)throws IOException {
System.out.println("请输入用户名:");
String userName = keyReader.readLine();
System.out.println("请输入密码:");
String password = keyReader.readLine();
String info = option +" "+userName+" "+password+"\r\n";
socketOut.write(info);
socketOut.flush();
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties; public class LoginServer extends Thread { Socket socket;
static File file = new File("F:\\users.properties");
public LoginServer(Socket socket) {
this.socket = socket;
}
static {
try {
if (!file.exists()) {
file.createNewFile();
}
} catch (IOException e) {
e.printStackTrace();
} }
@Override
public void run() {
while(true){
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
OutputStreamWriter socketOut = new OutputStreamWriter(
socket.getOutputStream());
String info = bufferedReader.readLine();
String[] datas = info.split(" ");
String option = datas[0];
String userName = datas[1];
String password = datas[2];
if ("a".equalsIgnoreCase(option)) {
Properties properties = new Properties();
properties.load(new FileReader(file));
if (properties.containsKey(userName)) {
String tempPass = properties.getProperty(userName);
if (password.equals(tempPass)) {
socketOut.write("欢迎" + userName + "登陆成功\r\n");
} else {
socketOut.write("密码错误\r\n");
}
} else {
socketOut.write("用户名不存在,请重新输入...\r\n");
}
socketOut.flush();
} else if ("b".equalsIgnoreCase(option)) {
Properties properties = new Properties();
properties.load(new FileReader(file));
if (!properties.containsKey(userName)) {
properties.setProperty(userName, password);
properties.store(new FileWriter(file), "users");
socketOut.write("注册成功\r\n");
} else {
socketOut.write("用户名已经被注册,请重新输入\r\n");
}
socketOut.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
} public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9090);
while (true) {
Socket socket = serverSocket.accept();
new LoginServer(socket).start();
}
}
}

梳理复习

continue: 跳过本次循环语句,继续下一次循环。
continue的作用范围: 只能适用于循环语句。一旦执行了continue语句,那么在循环体内continue之后的循环 语句跳过执行。
for(int i = 0 ; i<5 ; i++){
if(i==1){
continue;
} System.out.println("i="+i);
}

break: 用于结束一个循环语句或者是一个switch语句.

break作用范围: 只能用于循环语句或者是switch语句。
outer:for(int j = 0 ; j<2; j++){ // j=0  j=1
inner:for(int i = 0 ; i<3 ; i++){ //i=0
System.out.println("hello world");
break outer; //结束当前所在的循环。 如果配合标识的使用,可以作用于外层的for循环。
}
}

return:也可以用来终止循环

for(int i = 0 ; i<3 ; i++){
System.out.println("hello world");
return;
}

函数重载的要求
   1. 函数名一致。
   2. 形参列表不一致(形参的个数不一致或者是形参对应 的类型不一致)
   3. 与返回值类型无关。
函数重写的要求
   1. 子父类的函数名与形参列表必须一致。
   2. 子类的权限修饰符必须要大于或者等于父类的权限修饰符。
   3. 子类的返回值类型必须要小于或者等于父类的返回类型。
   4. 子类抛出的异常类型必须要小于或者等于父类抛出的异常类型。

匿名对象:没有引用类型变量指向的对象就称作为匿名对象。
 
匿名对象的主要作用:简化书写。
匿名对象主要用于两种应用场景:
   1. 如果一个对象的方法只会调用一次的时候,然后该对象就不再使用了,这时候就就可以使用匿名对象。
   2. 作为参数传递。
// Runtime runtime = Runtime.getRuntime();
Runtime.getRuntime().exec("C:\\Windows\\notepad.exe");
FileReader fileReader = new FileReader("F:\\a.txt");
BufferedReader bufferedReader = new BufferedReader(new FileReader("F:\\a.txt"));
封装的步骤:
   1. 私有化要封装的属性。
   2. 根据需求提供对应的get或者是set方法。
封装的好处:
    1.提高数据的安全性。
    2.操作简单。
    3.隐藏实现。

封装一定会用的场景:如果是实体类的成员属性,我们在现实开发中全部都封装起来。

class Member{
private String name;
private String sex; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setSex(String sex){
if("男".equals(sex)||"女".equals(sex)){
this.sex = sex;
}
}
public String getSex(){
return sex;
}
}
public class Demo8 {
public static void main(String[] args) {
Member m = new Member();
m.setName("狗娃");
m.setSex("男");
}
}

构造代码块:给对象进行统一的初始化工作。
应用场景: 如果创建任意对象的时候都需要调用某个方法为该对象进行初始化时,这时候就可以使用构造代码块。
静态代码块:静态代码块是静态代码块所属的类被加载到内存的时候执行的。
静态代码块的应用场景: 以后主要用于准备一个项目的初始化工作。
比如: 从配置配置文件中读取数据库用户名与密码。

class Baby{
int id;
String name;
{
cry();
}
static{
System.out.println("静态代码块执行了...");
}
public Baby(int id, String name) {
this.id = id;
this.name = name;
}
public Baby(){}
public void cry(){
System.out.println("哭...");
}
public String toString() {
return " 编号:"+this.id+" 姓名:"+ this.name;
}
}
public class Demo9 {
public static void main(String[] args) {
Baby b1 = new Baby();
Baby b2 = new Baby(110, "李杰");
}
}

Day 23:JAVA SE复习的更多相关文章

  1. Java复习总结(二)Java SE 面试题

    Java SE基础知识 目录 Java SE 1. 请你谈谈Java中是如何支持正则表达式操作的? 2. 请你简单描述一下正则表达式及其用途. 3. 请你比较一下Java和JavaSciprt? 4. ...

  2. Java SE教程

    第0讲 开山篇 读前介绍:本文中如下文本格式是超链接,可以点击跳转 >>超链接<< 我的学习目标:基础要坚如磐石   代码要十份规范   笔记要认真详实 一.java内容介绍 ...

  3. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

  4. 黑马程序员 ——Java SE(1)

    ----<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训 ...

  5. Java SE之XML<一>XML文档规约

    [文档整理系列] Java SE之XML<一>XML文档规约 1.xml文档引用: 1.外部私有DTD: <!DOCTYPE rootNodeName SYSTEM "ur ...

  6. Java SE 之 数据库操作工具类(DBUtil)设计

    JDBC创建数据库基本连接 //1.加载驱动程序 Class.forName(driveName); //2.获得数据库连接 Connection connection = DriverManager ...

  7. Java SE/EE/ME概念理解(Java版本发展历史)

    继上一篇文章http://www.cnblogs.com/EasonJim/p/6181981.html中说的区别,其实分析的不够彻底,因此再次在这里做详细的分析. 零.Java与Sun.Oracle ...

  8. java se系列(一)开发前奏

    1. 软硬件知识 电子计算机:俗称电脑,是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.由硬件和软件所组成,没有安装任何软件的计算机称为裸机 cpu:是一台计算机的运算核心和控制核 ...

  9. Java SE 5.0 - SE 8 的功能增强

    Table of Contents 前言 Java 5.0 Generics Enhanced for Loop Autoboxing Typesafe Enums Varargs Static Im ...

随机推荐

  1. sparkRDD:第1节 RDD概述;第2节 创建RDD

    RDD的特点: (1)rdd是数据集: (2)rdd是编程模型:因为rdd有很多数据计算方法如map,flatMap,reduceByKey等: (3)rdd相互之间有依赖关系: (4)rdd是可以分 ...

  2. Codeforces Round #580 (Div. 2)D(思维,Floyd暴力最小环)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;const int maxn=300;cons ...

  3. 数学公式在 iOS 中的表示

    1. 三角函数  double sin (double);正弦  double cos (double);余弦  double tan (double);正切 2 .反三角函数  double asi ...

  4. vs Qt,运行后,中文字符显示乱码

    方法一: //在头文件前面加上下面几行代码 #pragma execution_character_set("utf-8") 方法二: //直接中文前面加u8 setWindows ...

  5. 【JAVA蓝桥杯】基础练习2 十六进制转十进制

    资源限制 时间限制:1.0s   内存限制:512.0MB 问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~15分别用大写的英文字母A ...

  6. hbase meta中分区信息错误的记录

    bulk write hbase 时遇到下面的错误: 19/03/20 02:16:02 ERROR LoadIncrementalHFiles: IOException during splitti ...

  7. vue项目真机测试

    1.在项目中重启命令行运行ipconfig(如果是ios系统运行ifconfig)获取到项目在本机运行的ip地址 2.在项目的package.json中修改允许访问ip地址(--host 0.0.0. ...

  8. 今日份学习: springboot 用到的注解

    笔记 上回用到的所有注解 @Around @Aspect @Autowired @Bean @Configuration @RequestMapping @ResponseBody @RestCont ...

  9. GIMP

    1. 认识GIMP 2. GIMP与Photoshop的对比 3. GIMP官方手册教程 4. 2本GIMP的外文书下载 5. 2个外部入门教程 6. 其他相关软件 1. 认识GIMP GIMP是可用 ...

  10. 深入理解python(三)python字符编码和字符串处理

    说是有选择和循环分支,,也实在没有什么比较大的坑要注意的,所以就直接进入比较令人困扰的地方 unicode和字符串 这个地方是一直以来我比较头痛的地方,因为坑比较多而且python3和python2在 ...