「Java类getter」java类getter和setter 默认值
本篇文章给大家谈谈Java类getter,以及java类getter和setter 默认值对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java getter和setter作用是什么?
- 2、Java网络编程从入门到精通(18):Socket类的getter和setter方法(2)
- 3、关于java中getter与setter的用法
- 4、JAVA中的setter//getter()方法是什么意思?
- 5、Java抽象类中提供getter方法有什么意义?
- 6、Java中getter方法的意义是什么
java getter和setter作用是什么?
get和set就是java中的封装技术。首先我们需要知道,一旦一个变量被“private”私有化了,那么在其他类文件就不能引用(使用)它。使用“private”是把被使用的变量保护起来,使别人不知道这个变量的名称是什么,有保护的作用。
而set和get就是在和“private”私有化的变量在同一个类文件中,set和get是“public”共有的,也就是说这两个方法是可以被在其他类文件中使用的。set方法的意思是定义一个方法含一个参数,把所含有的这个参数(后期自己设置)赋给你需要私有化的变量(在当前类中设置),相当于充当媒介,外界想要改变已经“private”私有化的变量,必须要在其他类文件中给方法set一个参数,通过set变量来更改。
set的名字可以随便取,如此一来其他类中根本不知道在另一个类中“private”私有化的变量名称,也不能直接更改。get则是获取这个私有化的变量值。是定义了一个带返回类型的方法,这个返回类型就是已经被你私有化变量的类型。以题目为例,你私有化了String类型的name,那么get方法的返回类型就是String类型,同时返回当前类中name的值。
这样一来在其他类文件中,可以通过set方法来给和更改另一个类中的加密变量值,可以通过get来获取另一个类中加密的变量值,而这个被加密的变量则变量名始终没有人知道。
扩展资料:
“java中的封装”是把过程和数据包围起来,对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。封装是一种信息隐藏技术,在java中通过关键字private,protected和public实现封装。
封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性。
参考资料:百度百科-java中的封装
Java网络编程从入门到精通(18):Socket类的getter和setter方法(2)
二 用于获得和设置Socket选项的getter和setter方法
Socket选择可以指定Socket类发送和接受数据的方式 在JDK *** 有 个Socket选择可以设置 这 个选项都定义在 SocketOptions接口中 定义如下
public final static int TCP_NODELAY = x ; public final static int SO_REUSEADDR = x ; public final static int SO_LINGER = x ; public final static int SO_TIMEOUT = x ; public final static int SO_SNDBUF = x ; public final static int SO_RCVBUF = x ; public final static int SO_KEEPALIVE = x ; public final static int SO_OOBINLINE = x ;
有趣的是 这 个选项除了第一个没在SO前缀外 其他 个选项都以SO作为前缀 其实这个SO就是Socket Option的缩写 因此 在Java中约定所有以SO为前缀的常量都表示Socket选项 当然 也有例外 如TCP_NODELAY 在Socket类中为每一个选项提供了一对get和set方法 分别用来获得和设置这些选项
TCP_NODELAY
public boolean getTcpNoDelay() throws SocketExceptionpublic void setTcpNoDelay(boolean on) throws SocketException
在默认情况下 客户端向服务器发送数据时 会根据数据包的大小决定是否立即发送 当数据包中的数据很少时 如只有 个字节 而数据包的头却有几十个字节(IP头+TCP头)时 系统会在发送之前先将较小的包合并到软大的包后 一起将数据发送出去 在发送下一个数据包时 系统会等待服务器对前一个数据包的响应 当收到服务器的响应后 再发送下一个数据包 这就是所谓的Nagle算法 在默认情况下 Nagle算法是开启的
这种算法虽然可以有效地改善网络传输的效率 但对于网络速度比较慢 而且对实现性的要求比较高的情况下(如游戏 Telnet等) 使用这种方式传输数据会使得客户端有明显的停顿现象 因此 最好的解决方案就是需要Nagle算法时就使用它 不需要时就关闭它 而使用setTcpToDelay正好可以满足这个需求 当使用setTcpNoDelay(true)将Nagle算法关闭后 客户端每发送一次数据 无论数据包的大小都会将这些数据发送出去
SO_REUSEADDR
public boolean getReuseAddress() throws SocketException public void setReuseAddress(boolean on) throws SocketException
通过这个选项 可以使多个Socket对象绑定在同一个端口上 其实这样做并没有多大意义 但当使用close方法关闭Socket连接后 Socket对象所绑定的端口并不一定马上释放 系统有时在Socket连接关闭才会再确认一下是否有因为延迟面未到达的数据包 这完全是在底层处理的 也就是说对用户是透明的 因此 在使用Socket类时完全不会感觉到
这种处理机制对于随机绑定端口的Socket对象没有什么影响 但对于绑定在固定端口的Socket对象就可能会抛出 Address already in use JVM_Bind 例外 因此 使用这个选项可以避免个例外的发生
package mynet;import *;import java io *;public class Test{ public static void main(String[] args) { Socket socket = new Socket(); Socket socket = new Socket(); try { socket setReuseAddress(true); socket bind(new InetSocketAddress( )); System out println( socket getReuseAddress(): + socket getReuseAddress()); socket bind(new InetSocketAddress( )); } catch (Exception e) { System out println( error: + e getMessage()); try { socket setReuseAddress(true); socket bind(new InetSocketAddress( )); System out println( socket getReuseAddress(): + socket getReuseAddress()); System out println( 端口 第二次绑定成功! ); } catch (Exception e ) { System out println(e getMessage()); } } }}
上面的代码的运行结果如下
socket getReuseAddress():trueerror:Address already in use: JVM_Bindsocket getReuseAddress():true端口 第二次绑定成功!
使用SO_REUSEADDR选项时有两点需要注意
必须在调用bind方法之前使用setReuseAddress方法来打开SO_REUSEADDR选项 因此 要想使用SO_REUSEADDR选项 就不能通过Socket类的构造方法来绑定端口
必须将绑定同一个端口的所有的Socket对象的SO_REUSEADDR选项都打开才能起作用 如在例程 中 socket 和socket 都使用了setReuseAddress方法打开了各自的SO_REUSEADDR选项
SO_LINGER
public int getSoLinger() throws SocketExceptionpublic void setSoLinger(boolean on int linger) throws SocketException
这个Socket选项可以影响close方法的行为 在默认情况下 当调用close方法后 将立即返回 如果这时仍然有未被送出的数据包 那么这些数据包将被丢弃 如果将linger参数设为一个正整数n时(n的值最大是 ) 在调用close方法后 将最多被阻塞n秒 在这n秒内 系统将尽量将未送出的数据包发送出去 如果超过了n秒 如果还有未发送的数据包 这些数据包将全部被丢弃 而close方法会立即返回 如果将linger设为 和关闭SO_LINGER选项的作用是一样的
如果底层的Socket实现不支持SO_LINGER都会抛出SocketException例外 当给linger参数传递负数值时 setSoLinger还会抛出一个IllegalArgumentException例外 可以通过getSoLinger方法得到延迟关闭的时间 如果返回 则表明SO_LINGER是关闭的 例如 下面的代码将延迟关闭的时间设为 分钟
if(socket getSoLinger() == ) socket setSoLinger(true );
SO_TIMEOUT
public int getSoTimeout() throws SocketExceptionpublic void setSoTimeout(int timeout) throws SocketException
这个Socket选项在前面已经讨论过 可以通过这个选项来设置读取数据超时 当输入流的read方法被阻塞时 如果设置timeout(timeout的单位是毫秒) 那么系统在等待了timeout毫秒后会抛出一个InterruptedIOException例外 在抛出例外后 输入流并未关闭 你可以继续通过read方法读取数据
如果将timeout设为 就意味着read将会无限等待下去 直到服务端程序关闭这个Socket 这也是timeout的默认值 如下面的语句将读取数据超时设为 秒
socket setSoTimeout( * );
当底层的Socket实现不支持SO_TIMEOUT选项时 这两个方法将抛出SocketException例外 不能将timeout设为负数 否则setSoTimeout方法将抛出IllegalArgumentException例外
SO_SNDBUF
public int getSendBufferSize() throws SocketExceptionpublic void setSendBufferSize(int size) throws SocketException
在默认情况下 输出流的发送缓冲区是 个字节( K) 这个值是Java所建议的输出缓冲区的大小 如果这个默认值不能满足要求 可以用setSendBufferSize方法来重新设置缓冲区的大小 但最好不要将输出缓冲区设得太小 否则会导致传输数据过于频繁 从而降低网络传输的效率
如果底层的Socket实现不支持SO_SENDBUF选项 这两个方法将会抛出SocketException例外 必须将size设为正整数 否则setSendBufferedSize方法将抛出IllegalArgumentException例外
SO_RCVBUF
public int getReceiveBufferSize() throws SocketExceptionpublic void setReceiveBufferSize(int size) throws SocketException
在默认情况下 输入流的接收缓冲区是 个字节( K) 这个值是Java所建议的输入缓冲区的大小 如果这个默认值不能满足要求 可以用setReceiveBufferSize方法来重新设置缓冲区的大小 但最好不要将输入缓冲区设得太小 否则会导致传输数据过于频繁 从而降低网络传输的效率
如果底层的Socket实现不支持SO_RCVBUF选项 这两个方法将会抛出SocketException例外 必须将size设为正整数 否则setReceiveBufferSize方法将抛出IllegalArgumentException例外
SO_KEEPALIVE
public boolean getKeepAlive() throws SocketExceptionpublic void setKeepAlive(boolean on) throws SocketException
如果将这个Socket选项打开 客户端Socket每隔段的时间(大约两个小时)就会利用空闲的连接向服务器发送一个数据包 这个数据包并没有其它的作用 只是为了检测一下服务器是否仍处于活动状态 如果服务器未响应这个数据包 在大约 分钟后 客户端Socket再发送一个数据包 如果在 分钟内 服务器还没响应 那么客户端Socket将关闭 如果将Socket选项关闭 客户端Socket在服务器无效的情况下可能会长时间不会关闭 SO_KEEPALIVE选项在默认情况下是关闭的 可以使用如下的语句将这个SO_KEEPALIVE选项打开
socket setKeepAlive(true);
SO_OOBINLINE
public boolean getOOBInline() throws SocketException public void setOOBInline(boolean on) throws SocketException
如果这个Socket选项打开 可以通过Socket类的sendUrgentData方法向服务器发送一个单字节的数据 这个单字节数据并不经过输出缓冲区 而是立即发出 虽然在客户端并不是使用OutputStream向服务器发送数据 但在服务端程序中这个单字节的数据是和其它的普通数据混在一起的 因此 在服务端程序中并不知道由客户端发过来的数据是由OutputStream还是由sendUrgentData发过来的 下面是sendUrgentData方法的声明
public void sendUrgentData(int data) throws IOException
虽然sendUrgentData的参数data是int类型 但只有这个int类型的低字节被发送 其它的三个字节被忽略 下面的代码演示了如何使用SO_OOBINLINE选项来发送单字节数据
package mynet;import *;import java io *;class Server{ public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket( ); System out println( 服务器已经启动 端口号 ); while (true) { Socket socket = serverSocket accept(); socket setOOBInline(true); InputStream in = socket getInputStream(); InputStreamReader inReader = new InputStreamReader(in); BufferedReader bReader = new BufferedReader(inReader); System out println(bReader readLine()); System out println(bReader readLine()); socket close(); } }}public class Client{ public static void main(String[] args) throws Exception { Socket socket = new Socket( ); socket setOOBInline(true); OutputStream out = socket getOutputStream(); OutputStreamWriter outWriter = new OutputStreamWriter(out); outWriter write( ); // 向服务器发送字符 C outWriter write( hello world\r\n ); socket sendUrgentData( ); // 向服务器发送字符 A socket sendUrgentData( ); // 向服务器发送字符 B outWriter flush(); socket sendUrgentData( ); // 向服务器发送汉字 中 socket sendUrgentData( ); socket sendUrgentData( ); // 向服务器发送汉字 国 socket sendUrgentData( ); socket close(); }}
由于运行上面的代码需要一个服务器类 因此 在加了一个类名为Server的服务器类 关于服务端套接字的使用方法将会在后面的文章中详细讨论 在类Server类中只使用了ServerSocket类的accept方法接收客户端的请求 并从客户端传来的数据中读取两行字符串 并显示在控制台上
测试
由于本例使用了 因Server和Client类必须在同一台机器上运行
运行Server
java mynet Server
运行Client
java mynet Client
在服务端控制台的输出结果
服务器已经启动 端口号 ABChello world中国
在ClienT类中使用了sendUrgentData方法向服务器发送了字符 A ( )和 B ( ) 但发送 B 时实际发送的是 由于sendUrgentData只发送整型数的低字节 因此 实际发送的是 十进制整型 的二进制形式如图 所示
图 十进制整型 的二进制形式
从图 可以看出 虽然 分布在了两个字节上 但它的低字节仍然是
在Client类中使用flush将缓冲区中的数据发送到服务器 我们可以从输出结果发现一个问题 在Client类中先后向服务器发送了 C hello world r n A B 而在服务端程序的控制台上显示的却是ABChello world 这种现象说明使用sendUrgentData方法发送数据后 系统会立即将这些数据发送出去 而使用write发送数据 必须要使用flush方法才会真正发送数据
在Client类中向服务器发送 中国 字符串 由于 中 是由 和 两个字节组成的 而 国 是由 和 两个字节组成的 因此 可分别发送这四个字节来传送 中国 字符串
lishixinzhi/Article/program/Java/hx/201311/26387
关于java中getter与setter的用法
setter和getter是用于封装的,一般我们会把类变量生命成private,这样的话只有类成员自身可以直接访问这个变量,而此类外部就不能直接访问,于是getter和setter就构成了从类成员外部访问这些变量的手段。因为getter和setter方法是public的,可以从类成员外部进行访问,所以我们在需要取得这个length的值就可以用getter,要改变值就用setter。
set方法中int
len是方法需要的参数。调用方法的时候要在setLength()的括号里写一个int类型的值或变量,否侧编译会报错。作用就是,把这个对象的length设置为括号里面的int的值。
JAVA中的setter//getter()方法是什么意思?
你好,在java中setter//getter()方法,就是给一个bean类的对象提供一个对类中的私有属性设置以及访问的方法。就比如如下的例子:
public class Dog {
private String name;
private String says;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSays() {
return says;
}
public void setSays(String says) {
this.says = says;
}
public static void main(String[] args) {
Dog d1=new Dog();
d1.setName("spot");
d1.setSays("Ruff");
Dog d2=new Dog();
d2.setName("scruffy");
d2.setSays("wurf");
System.out.println(d1.getName()+"==="+d1.getSays());
System.out.println(d2.getName()+"==="+d2.getSays());
}
}
希望能帮到你。
Java抽象类中提供getter方法有什么意义?
抽象类中可以有抽象方法,也可以有普通方法;抽象类中的getter方法也是封装的一部分,为了可以访问到该类中的私有属性。
Java中getter方法的意义是什么
用代码讲解一下:
public class Student {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s1=new Student();
s1.setName("小明");
System.out.println("学生的姓名为:"+s1.getName());
}
}
上面的意思是创建一个学生类,声明一个name变量,并给了它getter和setter方法。
先说setter方法,刚开始创建name变量时没有赋值,后面用这个方法给他赋值“小明”
再说getter方法,name变量有了值“小明”后就可以用这个方法把它调出来。
Java类getter的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java类getter和setter 默认值、Java类getter的信息别忘了在本站进行查找喔。