千锋20200319

在千锋“逆战”学习第34天

      每日一句:作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。
      今天主要学习了反射中的类对象知识。
      明天继续努力。

课堂案例

网络编程:注册与登陆

public class Client {
	public void reg() {
		try {
			Socket client = new Socket("192.168.2.100",9999);
			ClientRegThread crt = new ClientRegThread(client);
			crt.start();
			crt.join();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
	public void login() {
		try {
			Socket client = new Socket("192.168.2.100",7777);
			ClientLoginThread clt = new ClientLoginThread(client);
			clt.start();
			clt.join();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
public class ClientLoginThread extends Thread{
	private Socket client;

	public ClientLoginThread(Socket client) {
		this.client = client;
	}
	
	public void run() {
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8"));
			PrintWriter pw = new PrintWriter(new OutputStreamWriter(client.getOutputStream(), "UTF-8"));
			
			Scanner sc = new Scanner(System.in);
			System.out.println("输入用户名:");
			String username = sc.next();
			System.out.println("输入密码:");
			String password = sc.next();
			String userinfo = username + "#" + password;
			
			pw.println(userinfo);
			pw.flush();
			String msg = br.readLine();
			System.out.println(msg);
			pw.close();
			br.close();
			client.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
public class ClientRegThread extends Thread {
	private Socket client;

	public ClientRegThread(Socket client) {
		this.client = client;
	}

	public void run() {
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8"));
			PrintWriter pw = new PrintWriter(new OutputStreamWriter(client.getOutputStream(), "UTF-8"));

			Scanner sc = new Scanner(System.in);
			System.out.println("输入用户名:");
			String username = sc.next();
			System.out.println("输入密码:");
			String password = sc.next();

			String userinfo = username + "#" + password;
			pw.println(userinfo);
			pw.flush();
			String msg = br.readLine();
			System.out.println(msg);
			pw.close();
			br.close();
			client.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
public class LoginThread extends Thread {
	private Socket client;
	private Properties userPros;

	public LoginThread(Socket client, Properties userPros) {
		super();
		this.client = client;
		this.userPros = userPros;
	}

	public void run() {
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8"));
			PrintWriter pw = new PrintWriter(new OutputStreamWriter(client.getOutputStream(), "UTF-8"));

			String user = br.readLine();
			String[] users = user.split("#");
			String username = users[0];
			String password = users[1];

			if (userPros.containsKey(username)) {
				if (userPros.getProperty(username).equals(password)) {
					pw.println("登录成功");
					pw.flush();
				} else {
					pw.println("登录失败,密码错误");
					pw.flush();
				}
			} else {
				System.out.println("用户名不存在");
				pw.flush();
			}
			pw.close();
			br.close();
			client.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
public class RegThread extends Thread {
	// 客户端
	private Socket client;
	// 配置文件
	private Properties userPros;

	public RegThread(Socket client, Properties userPros) {
		this.client = client;
		this.userPros = userPros;
	}

	public void run() {
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8"));
			PrintWriter pw = new PrintWriter(new OutputStreamWriter(client.getOutputStream(), "UTF-8"));

			String user = br.readLine();
			String[] users = user.split("#");
			String username = users[0];
			String password = users[1];

			if (userPros.containsKey(username)) {
				pw.println("用户名存在,重新注册");
				pw.flush();
			} else {
				userPros.setProperty(username, password);
				userPros.store(new FileWriter("userPros.propertise"), null);
				pw.println("注册成功");
				pw.flush();
			}
			pw.close();
			br.close();
			client.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
public class Server {
	private Properties userPros;

	public Server() {
		userPros = new Properties();
		File file = new File("userPros.propertise");
		if (file.exists()) {
			try {// 把文件内容加载入properties集合
				userPros.load(new FileReader(file));
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	public void registerUser() {
		try {
			ServerSocket server = new ServerSocket(9999);
			System.out.println("注册线程已启动...");
			while (true) {
				Socket client = server.accept();

				new RegThread(client, userPros).start();
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void login() {
		try {
			ServerSocket server = new ServerSocket(7777);
			System.out.println("登录线程启动");
			while (true) {
				Socket client = server.accept();
				LoginThread lt = new LoginThread(client, userPros);
				lt.start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
public class StartMenu {
	public static void main(String[] args) {
		Client client = new Client();
		System.out.println("欢迎进入系统");
		Scanner sc = new Scanner(System.in);

		int choice = 0;
		do {
			System.out.println("输入选择:1.注册	2.登录	0.退出");
			choice = sc.nextInt();
			switch (choice) {
			case 1:
				client.reg();
			case 2:
				client.login();
			default:
				break;
			}
		} while (choice != 0);
		System.out.println("退出");
	}
}
public class StartServer {
	public static void main(String[] args) {
		Server server = new Server();
		new Thread() {
			public void run() {
				server.registerUser();
			}
		}.start();
		new Thread() {
			public void run() {
				server.login();
			}
		}.start();
	}
}

运行结果:

登录线程启动
注册线程已启动...
欢迎进入系统
输入选择:1.注册	2.登录	0.退出
1
输入用户名:
mike
输入密码:
123
注册成功

输入选择:1.注册	2.登录	0.退出
2
输入用户名:
mike
输入密码:
123
登录成功

输入选择:1.注册	2.登录	0.退出
0
退出

--------------------------------------------------------------------------
对象类

public class TestClassObject {
	public static void main(String[] args) {
		Student s = new Student();
		// System.out.println(s.getClass());
		Class c = s.getClass();
		System.out.println(c.toString());
	}
}

class Student {
	String name;
	int age;
	String sex;

	public Student() {}

	public Student(String name) {
		this.name = name;
	}

	public Student(int age) {
		this.age = age;
	}

	public void study() { }

	public void exam() {	}

	public void work() { }
}

运行结果:

class week07.day34.reflects.Student

--------------------------------------------------------------------------
获取对象类

public class TestGetClassObject {
	public static void main(String[] args) {
		// 1.通过类的对象获取类对象
		Person p = new Person();// 类的对象
		Class c = p.getClass();// 类对象
		System.out.println(c.getName());
		System.out.println("----------");

		// 2.通过类名获取Class对象
		Class c2 = Person.class;
		System.out.println(c2.getName());
		System.out.println("----------");

		// 3.通过Class静态方法获取Class对象
		try {
			Class c3 = Class.forName("week07.day34.reflects.Person");
			System.out.println(c3.getName());
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}

class Person {

}

运行结果:

week07.day34.reflects.Person
----------
week07.day34.reflects.Person
----------
week07.day34.reflects.Person

--------------------------------------------------------------------------
对象类方法

public class TestClassMethods {
	public static void main(String[] args)
			throws ClassNotFoundException, InstantiationException, IllegalAccessException {
		Class c = Class.forName("week07.day34.methods.Student");

		System.out.println(c.getName());
		System.out.println("-----");

		// 获得指定类对象的包
		Package pack = c.getPackage();
		System.out.println(pack.getName());
		System.out.println("-----");

		// 获得父类Class对象
		Class superClass = c.getSuperclass();
		System.out.println(superClass.getName());
		System.out.println("-----");

		// 获得接口
		Class[] interfaces = c.getInterfaces();
		for (Class inter : interfaces) {
			System.out.println(inter.getName());
		}
		System.out.println("-----");

		// 获取属性(自身+父类公开属性)
		Field[] fields = c.getFields();
		for (Field f : fields) {
			System.out.println(f.getName());
		}
		System.out.println("-----");

		// 获取Class对象自身所有属性
		Field[] fields2 = c.getDeclaredFields();
		for (Field f : fields2) {
			System.out.println(f.getName());
		}
		System.out.println("-----");

		// 获取自身+父类所有公开方法
		Method[] methods = c.getMethods();
		for (Method m : methods) {
			System.out.println(m.getName());
		}
		System.out.println("-----");

		// 自身方法
		Method[] methods2 = c.getDeclaredMethods();
		for (Method m : methods2) {
			System.out.println(m.getName() + ":" + m.getReturnType());
		}
		System.out.println("-----");

		//
		Constructor[] cs = c.getConstructors();
		for (Constructor ct : cs) {
			System.out.print(ct.getName() + ":");
			Class[] param = ct.getParameterTypes();// 获得构造方法形参
			for (Class p : param) {
				System.out.println(p.getName());
			}
		}
		System.out.println();
		System.out.println("-----");

		//
		Object o = c.newInstance();
		Student stu = (Student) o;
		System.out.println(stu);
	}
}

class Person {
	public String sex;
	public double money;

	public void eat() {
	}

	public void sleep() {
	}
}

class Student extends Person implements Serializable, Runnable, Comparable {
	public String name;
	public int age;
	double score;

	public Student() {
	}

	public Student(String name) {
		this.name = name;
	}

	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public void exam() { }

	public void play() { }

	public int compareTo(Object o) {
		return 0;
	}

	public void run() { }
}

运行结果:

week07.day34.methods.Student
-----
week07.day34.methods
-----
week07.day34.methods.Person
-----
java.io.Serializable
java.lang.Runnable
java.lang.Comparable
-----
name
age
sex
money
-----
name
age
score
-----
run
compareTo
play
exam
sleep
eat
wait
wait
wait
equals
toString
hashCode
getClass
notify
notifyAll
-----
run:void
compareTo:int
play:void
exam:void
-----
week07.day34.methods.Student:java.lang.String
int
week07.day34.methods.Student:java.lang.String
week07.day34.methods.Student:
-----
week07.day34.methods.Student@55f96302

--------------------------------------------------------------------------
对象类——Instance

public class TestNewInstance {
	public static void main(String[] args) throws Exception {
		//1.直接new
		Teacher t1 = new Teacher();
		t1.name = "aaa";
		System.out.println(t1.name);
		System.out.println("-----");
		
		//2.反射——通过类对象创建类的对象
		Class c = Teacher.class;
		Teacher t2 = (Teacher)c.newInstance();
		t2.name="bbb";
		System.out.println(t2.name);
		System.out.println("-----");
		
		//3.
		Object o = objectCreate("week07.day34.methods.Teacher");
		System.out.println(o);
	}
	//创建对象
	//创建对象工厂
	public static Object objectCreate(String className) {
		try {
			Class c = Class.forName(className);
			return c.newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

class Teacher {
	String name;
	String sex;
	Integer age;

	public Teacher() {
	}

	public Teacher(String name, String sex, Integer age) {
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	public void study() {
		System.out.println("我在学校");
	}

	public void exam() {
		System.out.println("我在考试");
	}

	public void calc() {
		System.out.println("我在算分");
	}
}

运行结果:

aaa
-----
bbb
-----
week07.day34.methods.Teacher@6d06d69c

--------------------------------------------------------------------------

public class TestNewInstanceForFile {
	public static void main(String[] args) throws Exception {
		FileReader fr = new FileReader("application.txt");
		BufferedReader br = new BufferedReader(fr);
		String className = br.readLine();
		
		Object o = objectCreate(className);
		System.out.println(o);
	}
	//创建对象
	//创建对象工厂
	public static Object objectCreate(String className) {
		try {
			Class c = Class.forName(className);
			return c.newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

运行结果:

week07.day34.methods.Teacher@6d06d69c
发布了40 篇原创文章 · 获赞 0 · 访问量 1133

猜你喜欢

转载自blog.csdn.net/qq_41841482/article/details/104974510