Day 23:JAVA SE复习
作业
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();
- }
- }
- }
梳理复习
- for(int i = 0 ; i<5 ; i++){
- if(i==1){
- continue;
- }
- System.out.println("i="+i);
- }
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复习的更多相关文章
- Java复习总结(二)Java SE 面试题
Java SE基础知识 目录 Java SE 1. 请你谈谈Java中是如何支持正则表达式操作的? 2. 请你简单描述一下正则表达式及其用途. 3. 请你比较一下Java和JavaSciprt? 4. ...
- Java SE教程
第0讲 开山篇 读前介绍:本文中如下文本格式是超链接,可以点击跳转 >>超链接<< 我的学习目标:基础要坚如磐石 代码要十份规范 笔记要认真详实 一.java内容介绍 ...
- Java基础复习笔记系列 四 数组
Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...
- 黑马程序员 ——Java SE(1)
----<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训 ...
- Java SE之XML<一>XML文档规约
[文档整理系列] Java SE之XML<一>XML文档规约 1.xml文档引用: 1.外部私有DTD: <!DOCTYPE rootNodeName SYSTEM "ur ...
- Java SE 之 数据库操作工具类(DBUtil)设计
JDBC创建数据库基本连接 //1.加载驱动程序 Class.forName(driveName); //2.获得数据库连接 Connection connection = DriverManager ...
- Java SE/EE/ME概念理解(Java版本发展历史)
继上一篇文章http://www.cnblogs.com/EasonJim/p/6181981.html中说的区别,其实分析的不够彻底,因此再次在这里做详细的分析. 零.Java与Sun.Oracle ...
- java se系列(一)开发前奏
1. 软硬件知识 电子计算机:俗称电脑,是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.由硬件和软件所组成,没有安装任何软件的计算机称为裸机 cpu:是一台计算机的运算核心和控制核 ...
- Java SE 5.0 - SE 8 的功能增强
Table of Contents 前言 Java 5.0 Generics Enhanced for Loop Autoboxing Typesafe Enums Varargs Static Im ...
随机推荐
- Elasticsearch 如何使用RESTful API
所有其他语言可以使用 RESTful API 通过端口 9200 和 Elasticsearch 进行通信,你可以用你最喜爱的 web 客户端访问 Elasticsearch .事实上,正如你所看到的 ...
- 学习笔记(11)- 文本生成RNNLG
https://github.com/shawnwun/RNNLG 数据集 给出了4个行业的语料,餐馆.酒店.电脑.电视,及其组合数据. 数据格式 任务 根据给定格式的命令,生成自然语言. 方法.模型 ...
- Duilib程序添加托盘图标显示
转载:https://www.zhaokeli.com/article/8266.html 温馨提示:技术类文章有它的时效性,请留意文章更新时间以及软件的版本 功能描述 实现点击关闭后,程序最小化到托 ...
- Thymeleaf的内置属性(转)
原文链接: http://somefuture.iteye.com/blog/2253761 Thymeleaf是另一个Java视图模板引擎,使用上和FreeMarker各有千秋,不了解的可以从其他博 ...
- Linux centosVMware shell中的函数、shell中的数组、
一.shell中的函数 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可. 格式: function _name() { command ...
- Android LowMemoryKiller原理分析
copy from : http://gityuan.com/2016/09/17/android-lowmemorykiller/ frameworks/base/services/core/jav ...
- Java并发编程:Java内存模型JMM
简介 Java内存模型英文叫做(Java Memory Model),简称为JMM.Java虚拟机规范试图定义一种Java内存模型来屏蔽掉各种硬件和系统的内存访问差异,实现平台无关性. CPU和缓存一 ...
- Django线上部署代码修改失效问题
记一次django项目的线上部署维护问题,django+nginx 关于nginx反向代理服务器的介绍这里有一篇博客介绍的比较好:nginx的相关介绍 以及当一次客户端请求发出后,uwsig以及uWS ...
- linux的ls -al指令
ls是“list”的意思,参数-al则表示列出所有的文件,包括隐藏文件,就是文件前面第一个字符为.的文件. 1.第一列便是这个文件的属性: #第一个属性表示这个文件时“目录.文件或链接文件等”: ...
- 报错google.protobuf.text_format.ParseError: 166:8 : Message type "object_detection.protos.RandomHorizontalFlip" has no field named "i".解决方法
运行python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/ssd_mobilenet_ ...