一切皆对象,先设计对象,再编程,自己编程指挥者,让对象去实现功能。
重写是子类重写实现父类的方法;
重载是类内部有好几个方法一样,参数不一样的方法;
抽象方法没有方法体,就是没有内容。
接口全是抽象方法,你实例化它,实例化对象也不能用这个方法呀
就是一个容器,列表list、集合set、字典map都属于集合
不同之处:
(1)集合的长度是可变的,数组长度不可变;
(2)数组存放基本类型的数据类型和引用类型,集合用来存放对象的引用,不能存放基本数据类型;跟python中的数组和列表一样,集合也可以存放基本类型,只不过多 了一步地址引用。
(3)数组存放的数据类型必须相同,
可以将类对象存为数组,由对象组成的数组。
单列集合都可以
双列集合不可以(因为没继承iterable)
插入平衡二叉树的4种情况:
(1)左左
(2)左右
(3)右左
(4)右右
存对象的时候必须要定义排序规则
第一种实现接口来定义规则
第2种使用匿名类
包就是1个文件夹
定义com.hh.luxiao,就会以,号分割,得到一个3级的文件夹目录
不同输入输出设备之间的数据传输抽象为流
根据流传输的数据类型:
根据流的操作方式:
java系列3 java文件IO操作
https://blog.csdn.net/xiaotiig/article/details/126030988
(1)这类是你编程的时候出现的系统性错误,比如少加分号;,
(2)这类错误无法使用异常处理语句处理
可以通过try…catch语句捕获;
可以通过try…catch捕获处理,或者使用throws抛出;
try: 可能会出错的代码块
catch:try中出错了由catch来获取
finally:可以有也可以无,只要有一定会执行。
枚举可以定义在类内部,也可以定义在类外部。
枚举就是类,作用就是固定的定义了常量,比如男,女
泛型就是一个泛化模糊的概念,提升程序的泛化性能:
你定义的时候直接就确定了数据类型,之后想用其他类型就没法用
比如你定义了 int i; 到时候你想让i成为浮点型,你直接用一个T来代表这就是一个类型就行了。
用它来操作数据库,5步
1 加载驱动程序
2 建立连接
3 向数据库发送SQL语句
4 处理返回语句
5 关闭连接
(1)程序结束条件
(2)最小化问题实现,程序调用自己
(3)程序的输出
方法调用是在栈里面运行
让多个线程轮流去占用资源,而不是一起了
锁对象一定要唯一,看黑马的锁对象唯一教程视频
package com.itheima.socketdemo2;
import java.io.IOException;
import java.net.*;
public class ClientDemo {
public static void main(String[] args) throws IOException {
//1.找码头
DatagramSocket ds = new DatagramSocket();
//2.打包礼物
//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
String s = "送给村长老丈人的礼物";
byte[] bytes = s.getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1");
int port = 10000;
DatagramPacket dp = new DatagramPacket(bytes,bytes.length,address,port);
//3.由码头发送包裹
ds.send(dp);
//4.付钱走羊
ds.close();
}
}
package com.itheima.socketdemo2;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class ServerDemo {
//注意点:
//1.要先运行接收端,再运行发送端
//2.如果接收端再启动之后,没有接收到数据,那么会死等(阻塞).
//3.在接收数据的时候,需要调用一个getLength方法,表示接收到了多少字节
public static void main(String[] args) throws IOException {
//1.找码头 ---- 表示接收端从10000端口接收数据的.
DatagramSocket ds = new DatagramSocket(10000);
//2,创建一个新的箱子
byte [] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
//3.接收礼物,把礼物放到新的箱子中
System.out.println("-----------接收前----------");
ds.receive(dp);
System.out.println("------------接收后---------");
//4.从新的箱子里面获取礼物
// byte[] data = dp.getData();
int length = dp.getLength();
System.out.println(new String(bytes,0,length));
//5.拿完走羊
ds.close();
}
}
发送端
package com.itheima.socketdemo7;
import java.io.*;
import java.net.Socket;
public class ClientDemo {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1",10000);
OutputStream os = socket.getOutputStream();
os.write("hello".getBytes());
// os.close();如果在这里关流,会导致整个socket都无法使用
socket.shutdownOutput();//仅仅关闭输出流.并写一个结束标记,对socket没有任何影响
/*InputStream is = socket.getInputStream();
int b;
while((b = is.read()) !=-1){
System.out.println((char) b);
}*/
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while((line = br.readLine())!=null){
System.out.println(line);
}
br.close();
os.close();
socket.close();
}
}
//接收端
package com.itheima.socketdemo7;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10000);
Socket accept = ss.accept();
InputStream is = accept.getInputStream();
int b;
while((b = is.read())!=-1){
System.out.println((char) b);
}
System.out.println("看看我执行了吗?");
/* OutputStream os = accept.getOutputStream();
os.write("你谁啊?".getBytes());*/
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(accept.getOutputStream()));//将字节流转换为字符流,解决中文乱码的问题
bw.write("你谁啊?");
bw.newLine();
bw.flush();
bw.close();
is.close();
accept.close();
ss.close();
}
}
//上传文件
public class ClientDemo {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1",10000);
//是本地的流,用来读取本地文件的.
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("socketmodule\\ClientDir\\1.jpg"));
//写到服务器 --- 网络中的流
OutputStream os = socket.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(os);
int b;
while((b = bis.read())!=-1){
bos.write(b);//通过网络写到服务器中
}
bos.flush();
//给服务器一个结束标记,告诉服务器文件已经传输完毕
socket.shutdownOutput();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while((line = br.readLine()) !=null){
System.out.println(line);
}
bis.close();
socket.close();
}
}
package com.itheima.socketdemo8;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10000);
Socket accept = ss.accept();
//网络中的流,从客户端读取数据的
BufferedInputStream bis = new BufferedInputStream(accept.getInputStream());
//本地的IO流,把数据写到本地中,实现永久化存储
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("socketmodule\\ServerDir\\copy.jpg"));
int b;
while((b = bis.read()) !=-1){
bos.write(b);
}
//将字节输入流FileInputStream 转成 字符输入流 Fliereader
//通过转换流
InputStreamReader inputStreamReader = new InputStreamReader(accept.getInputStream());
//通过缓冲输入字符流
BufferedReader br = new BufferedReader(inputStreamReader);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(accept.getOutputStream());
BufferedWriter bw = new BufferedWriter(outputStreamWriter);
bw.write("上传成功");
bw.newLine();
bw.flush();
bos.close();
accept.close();
ss.close();
}
}
这些优化看黑马程序员代码
类的字节码加载到内存,用到的时候才加载到内存,不用的时候不加载。
简单5分钟学会
两步:
(1)先获取类对象
(2)再获取对象的属性、或构造方法、或对象方法
本身属性、构造方法、对象方法也是对象,就是一个引用,获取到了可以直接用