声明:学基础,在校学生,本文所有内容来自纯书本,然后通过自己的理解和参考编写而来,如有说的不对的地方,欢迎评论指错!(仅做学习交流)
类和对象的创建
- 类的创建:(public private protected)+ class + 类名 {
<类体>;
} - 对象的创建: 类名 + 对象名 = new 类名();
同时创建多个对象
类名 + 对象名 = new 类名(),对象名1 = new 类名() ……. - 类中成员的修饰符:public(公有的),private(私有的),friendly(友好的),protected(受保护的),final(最终的),abstract(抽象的);
- -this-
this只有在实例方法中使用
This 解决同名的问题
我所理解的是当前的意思
this(参数)。此方法用来在构造函数中调用构造函数
公有成员和私有成员
- 类的成员变量和成员方法如果它的访问权限是public,它就可以被其它所有类访问声明一个类中的成员为公有的,那么该类必须是公有类。
- 创建公有成员: public 变量名 //类成员变量
public int lichaowu(){ //类成员方法
………
}
以上用的公有的修饰。成员修饰有多种见上章表,用法一样,但要注意权限 - 一个类至少有一个公有的,保护的或者友好的成员方法
- 如果一个成员方法不会产生任何不希望的后果,它可以被声明为公有的
- 如果一个成员方法可能使对象失效或不被其它类使用,它应当是私有的
- 一个对象所有的成员变量如有可能应当是私有的,至少应当是保护类型的
- 封装(null)
构造函数与重载
-
构造函数与类名同名,没有返回值,一个类可以定义多个构造函数,但每个构造函数的参数内容必须不同;
-
创建构造函数:类名(参数列表){
…….
} -
成员方法的重载:重载的是意思是一个类中有多个相同名的方法。但是每个方法的参数不同(可以没有参数);
作用:Java程序中方法的重载是实现面向对象多态性的一个重要方法1. 参数个数不同
2. 参数类型不同
3. 与方法前面的修饰符,返回值无关
4. 调用时根据它的实参的类型,个数以及顺序来区分调用哪个方法(顺序时类型必须不一样)
5. 不能通过访问权限。返回类型,抛出异常进行重载。
6. 方法的异常类型和数目不会对重载造成影响
7. 对于继承来说,如果某一个方法在父类中是priavte(私有的),那么就不能在子类对其进行重载,若要定义,也只是定义了一个新的方法,而不会达到重载的效果。
8. Java中支持构造函数的重载(构造函数可以省略不写,会自动生成的,为了符合类的定义),格式同上。 -
构造函数怎么调用构造函数,前面在this讲过。如下:
public class Person{
String name;
int age;
public Person(String name){
this.name = name;
}
public Person(String name,int age){
this(name); //调用了Person(String name)
this.age = age;
}
}
知识提前扩展(网络编程+netchatroom)
对于学习要勇于探索新的知识,其实有的时候我们都存在一个误区,也是我以前一直存在的,那就是觉得自己基础不好(特别对待英语,数学等),导师讲一个小项目,然后用得是一种我们没学过的语言或者一种工具来写,他在讲的时候可能我们听不懂,我们会觉得老师怎么样怎么样,心里觉得这老师不会讲,不会体会同学们的感受,为什么不从基础讲起,然后干脆不听了,反正听不懂。然而你想过没有其实完全可以通过课后时间来学,而且甚至可以比老师讲的还快。对于不听这是一种自己内心本就抵抗的心理+一个懒字。解决方法:你要正确全面认真的认识这门语言或者工具。另外对于我来说就一个字:狠。就是对自己狠!对一件事连续坚持一个星期,慢慢你会发现原来也没有那么难。接着一个月,你会发现你坚持的事不止一件了。
- 首先感谢华信IT教育的王海斌校长和蒋斌老师牺牲您们宝贵的周未时间给我上课,每一次听课都是对这个行业的一种新的认知!感谢!不负众望!交流学习扣扣群:866512107
- 网络编程是什么?
答:网络编程我理解成为两点;1.网络是什么?网络是创建用户与用户之间的通信的类;2.网络编程就是把网络给实例化。然后实现一些功能,如:接收/发送也就是实现通信等。 - 网络编程的应用?
简单点说就是只要你连网就会用到已经写好的网络编程。没有网络编程你任何事都做不了发不了QQ消息,打不了游戏。反正只要你想通信,你就得用到网络编程。这是我的理解 - 如何创建服务器
我这里不做文字讲述直接写代码+注释:
package FHVK;
/**
* 创建服务器的程序
* @author 李超武
*本程序还不能实现通信,1.没有连接对象 2.没有发送和接收的功能*/
import java.net.*; /*java中与网络相关的功能都定义在此包
创建服务器的方法就在此中包括下面要讲的连接服务器,
所以这句就是把它导入到本程序中,方便进行调用其中的方法*/
public class Server { //创建一个类
//主函数程序的入口
public static void main(String[] args){
Server server = new Server(); //创建对象
server.CreateServer(8888); //调用server对象中创建服务器的方法
}
//创建服务器的方法
public void CreateServer(int port){ /*port代表端口,1,端口代表程序在计算机中的位置,2.ip地址代表计算机在网络中的位置*/
//捕获异常(还有抛出异常,最好用捕获直播解决。麻烦少)
try{
//这是最关键的,创建连接服务器对象传给它一个端口
ServerSocket serversocket = new ServerSocket(port);
//提示语句
System.out.println("代表服务器创建成功。等待用户的连接...");
}catch (Exception e){
e.printStackTrace();
}
}
}
运行本程序将输出:代表服务器创建成功。等待用户的连接…
所以差个用户连接接着往下看哈哈。
- 如何使用本地客户端连接服务器/如何自己写服务器并连接
为了更好的表达出来我将在创建服务器的方法中写一个发送功能。发送一条:“Successful connection to server!”的信息,怎么写见下图(什么意思我会在写连接服务器的时候写):
我先介绍使用本地客户端连接,由于Win不会默认打开本地客户端所以需要我们自己进行打开
打开方法:控制面板->程序和功能->启用或关闭Windows功能
显示下图,打开Telnet客户端,确定即可;
打开之后,我们来进行连接;
先打开cmd(win+r)
然后在里面输入:telnet localhost 8888 (回车) //意思我会在写连接服务器的时候写
由于本人使用的不是Win,所以没办法贴图;
回车之后将显示:Successful connection to server!(本地客户端有自带的发送和接收方法)
到这里说明你己成功到服务器;
接下来我们写连接服务器(同样贴代码)
package FHVK;
/**
* 创建一个客户端
* 连接到服务器端
* @author 李超武
* 实现发送和接收功能
*/
import java.net.*; //讲过,同理也要导进来
import java.io.*; /* i/o流包,代表输入输出
(我们将使用它的InputStream流类和OutputStream流类进行接收和写入)*/
public class Client {
//全局变量,全局变量的使用是为了某个变量或者常量的作用域达到整个类
InputStream in; /*为什么定义成全局的?这会讨论到作用域,在本程序用不到
但在后面写UI的时候用得到,在后续说*/
//偷下懒,写过的注释不写啦
public static void main(String[] args){
Client client = new Client();
/*locahlost代表本地ip地址
8888代表端口其它计算机就是通过这两个数据找到对应计算机的服务器
*/
client.ConnectClient("localhost", 8888); /*telnet localhost 8888 是cmd中的命令
telnet是Win内部命令用于连接到指定服务器,localhost 8888在上面说过 那如果是别人想连怎么办
很简单,把localhost改成服务器ip地址就好啦,但要注意前提得在同一局域网*/
}
//创建连接服务器方法
public void ConnectClient(String ip,int port){
try{
//最重要的,创建连接对象并把ip和端口给它
Socket connect = new Socket(ip,port);
//获取输入流对象用于接收消息
in = connect.getInputStream();
/*在服务器中我们加了getBytes()方法就是用来把字符转换为字节
在传送过程中所有数据都会转换成字节进行发送和接收*/
int data = in.read(); //int data用户接收字节数据
while(data != 13){
/*为什么循环?因为数据是一个一个字节读取的
有个结束判断为什么不等于13,在服务器中
我们在message后面是不是加了\r\n,\r的ASCII值为13
所以当读取到\r的时候就跳出循环啦 \n的值为10*/
System.out.print((char)data); //接收的字节,为了更好的表示出来我们把它强转成字符
data = in.read(); //继续接收
}
}catch (Exception e){
e.printStackTrace();
}
}
}
运行:先运行Server 再运行客户端
- 你们有没有发现只是单方面在接收和发送消息,如何把客户端做成可以发送和接收并还可以贴上UI,聊天不可能是客户和服务器聊,服务器只是处理发送过来的数据,然后转发给指定的客户,所以怎么写多个客户端(类似群聊),你有没有发现如果我发送的是一串中文,而文字是占两个字节,而接收是一个字节接收,会出现什么问题?这将在下一章讲,考虑到时间和篇幅〜(由于时间关系很多细节和点没讲到位欢迎指错。。。。)
- 顺便祝我科二一把过哈哈哈哈哈哈