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 ...
随机推荐
- ToString 奇淫技巧
int和float同样结果 decimal decTemp = 2.1m; Console.WriteLine(decTemp.ToString("#0.00")); //输出2. ...
- keil条件断点
http://www.keil.com/support/man/docs/uv4/uv4_db_dbg_breakpnts.htm Target Device does not support con ...
- (未解决)flume监控目录,抓取文件内容推送给kafka,报错
flume监控目录,抓取文件内容推送给kafka,报错: /export/datas/destFile/220104_YT1013_8c5f13f33c299316c6720cc51f94f7a0_2 ...
- <c:foreach>指定循环次数
<c:forEach begin="0" end="4" var="i"> <c:set var="ans&qu ...
- jsoup教学系列
http://my.oschina.net/flashsword/blog?catalog=390084
- nodejs的C++扩展中实现异步回调
在nodejs的官方网站中有关于C++扩展的详细说明,其中包含了从"hello world"到对象封装的一系列示例.其中的“callback”节是关于回调函数的,美中不足的是,这个 ...
- WebService介绍及C/C++访问
一.什么是WebService? Web 服务是一个软件接口,它描述了一组可以在网络上通过标准化的 XML 消息传递访问的操作.它使用基于 XML 语言的协议来描述要执行的操作或者要与另一个 Web ...
- js实现超范围的数相加
在js中能表示的最大安全整数是 9007199254740991,可以用API Number.MAX_SAFE_INTEGER 看一下 超出范围就会发生精度丢失,像这样 解决方法: 相当于一个字符串 ...
- Django 学习之用户认证组件auth与User对象
一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个. 1 .authenticate() ...
- 数据库事务ACID特效
一.数据库事务正确执行的4个基础要素: 1.原子性 整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节.事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状 ...