Java面向对象程序设计思想(一)

19 篇文章 0 订阅

声明:学基础,在校学生,本文所有内容来自纯书本,然后通过自己的理解和参考编写而来,如有说的不对的地方,欢迎评论指错!(仅做学习交流)

类和对象的创建

  1. 类的创建:(public private protected)+ class + 类名 {
    <类体>;
    }
  2. 对象的创建: 类名 + 对象名 = new 类名();
    同时创建多个对象
    类名 + 对象名 = new 类名(),对象名1 = new 类名() …….
  3. 类中成员的修饰符:public(公有的),private(私有的),friendly(友好的),protected(受保护的),final(最终的),abstract(抽象的);
    在这里插入图片描述
  4. -this-
    this只有在实例方法中使用
    This 解决同名的问题
    我所理解的是当前的意思
    this(参数)。此方法用来在构造函数中调用构造函数

公有成员和私有成员

  1. 类的成员变量和成员方法如果它的访问权限是public,它就可以被其它所有类访问声明一个类中的成员为公有的,那么该类必须是公有类。
  2. 创建公有成员: public 变量名 //类成员变量
    public int lichaowu(){ //类成员方法
    ………
    }
    以上用的公有的修饰。成员修饰有多种见上章表,用法一样,但要注意权限
  3. 一个类至少有一个公有的,保护的或者友好的成员方法
  4. 如果一个成员方法不会产生任何不希望的后果,它可以被声明为公有的
  5. 如果一个成员方法可能使对象失效或不被其它类使用,它应当是私有的
  6. 一个对象所有的成员变量如有可能应当是私有的,至少应当是保护类型的
  7. 封装(null)

构造函数与重载

  1. 构造函数与类名同名,没有返回值,一个类可以定义多个构造函数,但每个构造函数的参数内容必须不同;

  2. 创建构造函数:类名(参数列表){
    …….
    }

  3. 成员方法的重载:重载的是意思是一个类中有多个相同名的方法。但是每个方法的参数不同(可以没有参数);
    作用:Java程序中方法的重载是实现面向对象多态性的一个重要方法

    1. 参数个数不同
    2. 参数类型不同
    3. 与方法前面的修饰符,返回值无关
    4. 调用时根据它的实参的类型,个数以及顺序来区分调用哪个方法(顺序时类型必须不一样)
    5. 不能通过访问权限。返回类型,抛出异常进行重载。
    6. 方法的异常类型和数目不会对重载造成影响
    7. 对于继承来说,如果某一个方法在父类中是priavte(私有的),那么就不能在子类对其进行重载,若要定义,也只是定义了一个新的方法,而不会达到重载的效果。
    8. Java中支持构造函数的重载(构造函数可以省略不写,会自动生成的,为了符合类的定义),格式同上。

  4. 构造函数怎么调用构造函数,前面在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,聊天不可能是客户和服务器聊,服务器只是处理发送过来的数据,然后转发给指定的客户,所以怎么写多个客户端(类似群聊),你有没有发现如果我发送的是一串中文,而文字是占两个字节,而接收是一个字节接收,会出现什么问题?这将在下一章讲,考虑到时间和篇幅〜(由于时间关系很多细节和点没讲到位欢迎指错。。。。)
  • 顺便祝我科二一把过哈哈哈哈哈哈
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值