反射
根据反射创建一个对象
一共有两种方式:
调用Class对象的newInstance方法
调用Constructor对象的newInstance方法
public class NewInstancePractice {
public static void main(String[] args) throws Exception {
// 反射 - 获取类对象的3种方式
Class<?> aClass = Class.forName("com.mobiletrain.domain.Student");
// 根据类对象,创建实例的第一种方式
Object o = aClass.newInstance();
// 根据类对象,创建实例的第二种方式
// 获取类对象里的构造器
// 再调用这个构造器的newInstance方法
// Constructor<?> nonParamConstructor = aClass.getConstructor();
// Object o1 = nonParamConstructor.newInstance();
Constructor<?> hasParamConstructor = aClass.getConstructor(String.class, String.class, String.class, String.class, String.class, String.class);
Object o1 = hasParamConstructor.newInstance("1", "2", "3", "4", "5", "6");
System.out.println();
}
}
网络编程
客户端与服务端的交互
ThreadPoolManager.java
public class ThreadPoolManager {
private static ExecutorService pool = Executors.newFixedThreadPool(10);
private ThreadPoolManager() {}
public static ExecutorService getPool() {
return pool;
}
}
ConnectionProcessor.java
class ConnectionProcessor implements Runnable {
private Socket accept;
public ConnectionProcessor(Socket accept) {
this.accept = accept;
}
@Override
public void run() {
try {
InputStream is = accept.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while (true) {
String line = br.readLine();
if (line == null) {
break;
}
System.out.println(line);
}
br.close();
isr.close();
is.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Server.java
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(8080);
while (true) {
Socket accept = serverSocket.accept();
ConnectionProcessor processor = new ConnectionProcessor(accept);
ThreadPoolManager.getPool().submit(processor);
}
}
}
Client.java
public class Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost", 8080);
OutputStream os = socket.getOutputStream();
os.write("这是第一行\n这是第二行".getBytes());
os.close();
// socket.close();
}
}
Java图形化编程
一般Java不会用于桌面开发,所以Swing、AWT很少用
Frame类
直译: 框架。窗口
也就是想要实现图形化编程,必须先有一个窗口
paint方法
系统会调用此方法,进行窗口绘制
练习代码
- BasicFrame.java
public class BasicFrame extends Frame {
public void launch() {
// 窗口的标题
setTitle("Tank War");
// 窗口的位置
setLocation(200, 200);
// 窗口的尺寸
setSize(500, 500);
// 设置显示
setVisible(true);
// 不允许拉伸
setResizable(false);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
@Override
public void paint(Graphics g) {
// 画线
g.setColor(Color.PINK);
g.drawLine(100, 100, 200, 200);
// 画矩形
g.setColor(Color.ORANGE);
g.drawRect(100, 100, 200, 200);
// 画圆形
g.setColor(Color.BLACK);
g.drawOval(100, 100, 200, 200);
// 绘制字符
}
}
- BasicFramePractice.java
public class BasicFramePractice {
public static void main(String[] args) {
BasicFrame basicFrame = new BasicFrame();
basicFrame.launch();
}
}