作业

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. tensorflow变量的使用(02-2)

    import tensorflow as tf x=tf.Variable([1,2]) a=tf.constant([3,3]) sub=tf.subtract(x,a) #增加一个减法op add ...

  2. 发送邮件功能 Service 层

    package com.thinkgem.jeesite.modules.yudengjipush.service; import java.text.ParseException; import j ...

  3. Vue - 监听页面刷新和关闭

    一,在 created中 注册 页面刷新和关闭事件 created() {  window.addEventListener('beforeunload', e => this.test(e)) ...

  4. Periodic-table

    1. Periodic table 1.1 元素的排列 1.2 表中的行与列 1.3 元素区块 1.4 周期表中的一些趋势 1.5 元素周期律的本质 1.6 电子排布 2. 更多相关链接 2.1 维基 ...

  5. 把链接生成二维码 二维码中间带有logo

    在工程中引入三个文件jquery.qrcode.js.qrcode.js.utf.js.其中utf.js文件是防止链接中的参数出现中文乱码现象 jquery.qrcode.js文件 function ...

  6. JAVA 内部类 总结

    内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权 ...

  7. Numpy 广播(Broadcast)

    广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式,对数组的算术运算通常在相应的元素上进行. 如果两个数组 a 和 b 形状相同,即满足a.shape == b ...

  8. idea配置使用

    1.下载时注意连带下载git 2.实时清除内存 打开 show memory indicator 3.插件安装  前端常用插件(vue,element,css,html,node,ts等)找到适合自己 ...

  9. 超级方便的linux命令手册

    超级方便的linux命令手册 NO 分类 PS1 命令名 用法及参数 功能注解 对应章节 1 文件管理 # ls ls -a 列出当前目录下的所有文件,包括以.头的隐含文件     文件管理 # ls ...

  10. 视图家族 & 路由组件

    目录 视图家族 & 路由组件 视图集与路由组件 基于 GenericAPIView 的十大接口 基于 generics 包下工具视图类的六大基础接口 视图集 路由组件:必须配合视图集使用 自定 ...