java中类字段什么意思?java中类定义的属性是什么意思
大家好,关于java中类字段什么意思很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于java中类定义的属性是什么意思的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
java中类定义的属性是什么意思
java是面向对象编程的语言
什么叫对象?
publicclassPerson{
privatestringname;
}
什么叫类?
Person是定义了一个人的java类-----它是一类事物的统称
既然是人了,那就应该有名字吧,name就是person的一个属性,比如还有年龄啊,性别啊什么的
实例化对象---就是通过类(Person)具体拿到某一个人
比如Personp=newPerson("张三")
张三就是Person中具体的一个对象
这就是面相对象编程明白吧
java "字段"啥意思
public final static InputStream in= nullInputStream();
nullInputStream是这样实现的:
private static InputStream nullInputStream() throws NullPointerException{
if(currentTimeMillis()> 0)
return null;
throw new NullPointerException();
}
他不是返回null,就是抛出异常,如何初始化in呢?
解答:
看了一下java.lang.System的源代码.
System类里有大量的native方法,是调用本地代码的,这些代码很可能是由虚拟机来调用的.
System类的开头有一段:
static{
registerNatives();
}
这段代码会在虚拟机启动的时候就执行,它在虚拟机里注册System需要使用的一些本地代码
比如:
private static native Properties initProperties(Properties props);
private static native void setOut0(PrintStream out);
在windows下的话,它就告诉虚拟机到哪个dll文件里去找相应的实现
>然而,我知道out是一个PrintStream的对象,但我查看了有关的原代码:public final static PrintStream out= nullPrintStream();
>public final static InputStream in= nullInputStream();
在nullInputStream()方法里有注释解释为什么会设置为空:
/**
* The following two methods exist because in, out, and err must be
* initialized to null. The compiler, however, cannot be permitted to
* inline access to them, since they are later set to more sensible values
* by initializeSystemClass().
*/
private static InputStream nullInputStream() throws NullPointerException{
if(currentTimeMillis()> 0)
return null;
throw new NullPointerException();
}
也就说in, out, and err初始化为null,然后会在后来由initializeSystemClass()方法类初始化成有意义的值
/**
* Initialize the system class. Called after thread initialization.
*/
private static void initializeSystemClass(){
props= new Properties();
initProperties(props);
sun.misc.Version.init();
FileInputStream fdIn= new FileInputStream(FileDescriptor.in);
FileOutputStream fdOut= new FileOutputStream(FileDescriptor.out);
FileOutputStream fdErr= new FileOutputStream(FileDescriptor.err);
setIn0(new BufferedInputStream(fdIn));!!!
setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));!!!
setErr0(new PrintStream(new BufferedOutputStream(fdErr, 128), true));!!!
// Enough of the world is now in place that we can risk
// initializing the logging configuration.
try{
java.util.logging.LogManager.getLogManager().readConfiguration();
} catch(Exception ex){
// System.err.println("Can′t read logging configuration:");
// ex.printStackTrace();
}
// Load the zip library now in order to keep java.util.zip.ZipFile
// from trying to use itself to load this library later.
loadLibrary("zip");
// Subsystems that are invoked during initialization can invoke
// sun.misc.VM.isBooted() in order to avoid doing things that should
// wait until the application class loader has been set up.
sun.misc.VM.booted();
}
in,out,err就是在以上方法以下三条语句里初始化的.
setIn0(new BufferedInputStream(fdIn));!!!
setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));!!!
setErr0(new PrintStream(new BufferedOutputStream(fdErr, 128), true));!!!
看
private static native void setIn0(InputStream in);
~~~~~~~
这是个native函数,是前面registerNatives()的时候注册了的.这个函数应该是把实际连接到输入输出设备的句柄传给虚拟机并赋值给in,out,err
至于:
>InputStream是个抽象的类,怎么能使用char=(char)System.in.read()读入一个字符
我想你还没有明白什么是面向对象.
看看下面代码,我用OutputStream(也是抽象类,跟InputStream对应的输出类)以方便演示:
import java.io.IOException;
import java.io.OutputStream;
public class HelloWorld{
public OutputStream out=null;
public void setOutputStream(OutputStream out){
this.out=out;
}
public static void main(String[] args) throws IOException{
HelloWorld h=new HelloWorld();
PrintStream myOut=System.out;//System.out是一个PrintStream
h.setOutputStream(myOut);
h.out.write("hello,world".getBytes());//一般没人这么写的
}
}
以上代码执行后会输出hello,world
h.out是OutputStream,也是个抽象类,为什么能write(o)呢?
因为PrintStream是OutputStream的子类,所以能被"当作"OutputStream传给h.setOutputStream(myOut);
h.out.write执行的时候实际上是调用这个传进来的PrintStream实例的write方法
同样System.in和out肯定也是在initializeSystemClass()的时候被赋予了一个实际的可用的子类
要能体会到面向对象的好处,就要逐渐适应"对接口编程"的思想,相同接口的对象可以根据需要方便的替换.
比如,我刚才传了一个PrintStream,因此HelloWorld输出到了屏幕上.我如果传给OutputStream的另一个子类FileOutputStream,就会输出到文件里
>还有为什么不是说字符流:writer和reader一般用于UniCode的读写吗?为什么键盘的输入用reader类呢?
不知道你在哪里看到说writer和reader一般用于UniCode的读写
java编程中的"类"是什么意思
这个问题最好不要深究,你大可认为java中的类就好像,我们坐的就叫椅子一样,没什么好研究的,在《JAVA编程思想》中作者都不作出解释,不过他引用了别人的话“类是具有相同特性和行为的对象集合”,说心里话,这对于刚学JAVA的人来说,谁能真正理解,所以你根本不需要去了解他是什么东东,只需要知道他就叫类就可以了,过多的研究既无什么意义反而会自己让自己苦恼,你真正要理解的应该是什么叫做面向对象编程!!而这个是需要大量实践+看书+视频,绝对不是通过其他人的回答就能明白的了。
PS:在外包企业的面试中,如果有面试官问你“知不知道什么叫类”,你一定要说“不知道!!”。
类也可以说成为类型,作用当然是封装数据在里面,你所说的有很多种类,其实就是类型不一样,各个类处理的事情不同,刚开始也没必要理解他,只需要怎么使用他就行了。
通常我们都会把字段,方法等数据放在类里面,这种是面想对象编程的概念
比如你想象一下,一个学生,要你写一个学生类怎么写?
首先学生有学号,姓名,性别等等
学生还有各种方法,指示他们能做什么
那么
class Student
{
private int number;
private String name;
private String sex;
public void showInfo()
{
//
}
}
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!