java類的欄位
① java中的屬性和欄位的區別
1、Java中的屬性和欄位有什麼區別?
答:Java中的屬性,通常可以理解為get和set方法。而欄位,通常叫做「類成員」。
這兩個概念是完全不同的。
屬性只局限於類中方法的聲明,並不與類中其他成員相關。例如:
void setA(String s){}
String getA(){}
當一個類中擁有這樣一對方法時,我們可以說,這個類中擁有一個可讀寫的a屬性(注意是小寫a)。如果去掉了set的方法,則是可讀屬性,反之亦然。
類成員(欄位),通常是在類中定義的類成員變數,例如:
public class A{
private String s = "123";
}
我們可以說A類中有一個成員變數叫做s。
② 什麼是java的欄位和JavaBeans
java的欄位就是java的屬性,也叫變數;
JavaBeans就是類似:
public class Student{
private String name;
private int age;
public void setName(String newName){
name = newName;
}
public void setAge(int newAge){
age= newAge;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
}
是一個純粹的javabeans,有屬性還有訪問器,也就是相對應的set***/get***方法
③ java中類的欄位為什麼都要設為私有的
欄位設為私有,是滿足面向對象中封裝性,
一個類不建議允許直接獲取到另一個類的欄位,
同時也不建議直接把自身欄位暴露給另一個類,
本質上其實是為了隱藏具體實現,
同時,用get或者set方法來獲取或者設置的話,可以在該方法中添加一些簡單的驗證邏輯,
比方說有個學生類,其中有個年齡欄位,如果直接做成public的話,那麼這個年齡欄位可以設置為負值,
但是你做成了set方法的時候,你調用set設置年齡,那麼你可以在set方法中去對為負數的年齡進行驗證處理
Java面向對象類和類之間的關系教程:
④ JAVA里的欄位是什麼意思
sm yisd什麼欄位?
⑤ JAVA中 類、對象、成員與欄位的區別
類就是某一類事物的抽象描述
對象是 類的具體實例
成員是類中的 組成部分
欄位和成員類似
比如:
家 //這就是一個類,在這個家中你也不知道具體有哪些事物
父親 //這是一個類的成員,當類沒有實例化時,你也不知道具體是誰
地址 //這是一個欄位 當類沒有實例化對象時,你也不知道其具體值是啥
小明家 //這就是一個對象,你知道這個家裡有哪些人哪些物
小明的父親 //當類被實例化成對象時,其成員也就確定下來了。
北京新村2號 //這個地址也就確定下來了
⑥ java實體類如何加入虛擬欄位
java實體類加入虛擬欄位的步驟如下:
1、一旦變數被transient修飾,變數將不再是對象持久化的一部分,該變數內容在序列化後無法獲得訪問。
2、transient關鍵字只能修飾變數,而不能修飾方法和類。注意,本地變數是不能被transient關鍵字修飾的。變數如果是用戶自定義類變數,則該類需要實現Serializable介面。
3、被transient關鍵字修飾的變數不再能被序列化,一個靜態變數不管是否被transient修飾,均不能被序列化。
⑦ 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 ring 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類里的欄位默認的訪問修飾符是default,對需要保護的成員變數需要用private關鍵字修飾。
二、類的構造方法格式:
public 類名(參數列表)
{函數體}
三、API(Application Program Interface,應用程序編程介面)
1.使用方法:
(1)導包
import 包路徑.類名稱;
如果需要使用的目標類,和當前類位於同一個包下,則可以省略導包語句不寫。
java.lang包下的內容不用導包,其他的包都需要import語句。
(2)創建
類名稱 對象名 = new 類名稱();
(3)使用
對象名.成員方法名();
(1)Scanner類:用於鍵盤輸入數據到程序中。
Scanner sc = new Scanner(System.in);
獲取鍵盤輸入的一個int數字,int sum = sc.nextInt();
獲取鍵盤輸入的一個字元串,String str = sc.next();
下例中的運行結果綠色的行是客戶端輸入並按回車鍵,而黑色字體是程序輸出的。
⑨ JAVA里的「欄位」是什麼
在api文檔中可見「欄位摘要」,其中的「欄位」可以理解為類中的成員變數或成員常量。
⑩ java中欄位是什麼怎麼定義欄位欄位是變數嗎和變數 方法 屬性有什麼區別欄位有返回值嗎。。。
欄位就是成員變數,注意是成員變數,不是局部變數。欄位也就是屬性了,一個類的屬性。
只是叫法不同,java的API中一般叫成員變數就欄位,有時也叫域。而我們一般的編程的時候,就欄位叫成員變數
補------------
out就是一個欄位,也就是是System類的一個成員變數。只不過個這成員變數是一個對象,也就是out是一個 PrintStream類的對象。這就是在一個類里執有其它類的對象的用法