本文目錄一覽:
- 1、JAVA中的類 相當於C語言里的 什麼?
- 2、JAVA中有沒有類似C語言中sizeof那樣的功能?
- 3、請問java語言中有沒有類似C語言里scanf的語句?
- 4、java中有類似於c中的結構體一樣的數據類型嗎
- 5、java中類似C中的scanf函數是什麼,怎麼用
- 6、java中類似於C語言的goto無條件轉向語句的語法是什麼?
JAVA中的類 相當於C語言里的 什麼?
C語言不是面向對象的,所以沒有類這個概念,要說最相近的概念,是結構體
C++才有面向對象,同樣也叫做類。
JAVA中有沒有類似C語言中sizeof那樣的功能?
Java沒有提供任何類似於C語言的sizeof()的操作器。但是java中可以模擬C語言中對sizeof的實現。
實現的想法是這樣的:java.lang.Runtime類中有一些簡單的能涉及到內存管理的函數:
使用這些簡單的內存訪問,可以得到內存的一些情況,通過建立一個大的某個類的數組,來查看內存用了多少,進而可以求得類的大小。
程序代碼示例:
public class Sizeof {
public static void main(String[] args) throws Exception {
// Warm up all classes/methods we will use
runGC();
usedMemory();
// Array to keep strong references to allocated objects
final int count = 100000;
Object[] objects = new Object[count];
long heap1 = 0;
// Allocate count+1 objects, discard the first one
for (int i = -1; i count; ++i) {
Object object = null;
/* Instantiate your data here and assign it to object*/
//object = new Object ();
//object = new Integer (i);
//object = new Long (i);
//object = new String ();
//object = new Byte( (byte) 0);
//object = new Float( 0.2f);
//object = new Double( 0);
//object = new HelloWorld();
if (i = 0)
objects[i] = object;
else {
object = null; // Discard the warm up object
runGC();
heap1 = usedMemory(); // Take a before heap snapshot
}
}
runGC();
long heap2 = usedMemory(); // Take an after heap snapshot:
final int size = (int) Math.round(((double) (heap2 – heap1)) / count);
System.out.println(“‘before’ heap: ” + heap1
+ “, ‘after’ heap: ” + heap2);
System.out
.println(“heap delta: ” + (heap2 – heap1) + “, {“
+ objects[0].getClass() + “} size = ” + size
+ ” bytes”);
for (int i = 0; i count; ++i)
objects[i] = null;
objects = null;
}
private static void runGC() throws Exception {
// It helps to call Runtime.gc()
// using several method calls:
for (int r = 0; r 4; ++r)
_runGC();
}
private static void _runGC() throws Exception {
long usedMem1 = usedMemory(), usedMem2 = Long.MAX_VALUE;
for (int i = 0; (usedMem1 usedMem2) (i 500); ++i) {
s_runtime.runFinalization();
s_runtime.gc();
Thread.yield();
usedMem2 = usedMem1;
usedMem1 = usedMemory();
}
}
private static long usedMemory() {
return s_runtime.totalMemory() – s_runtime.freeMemory();
}
private static final Runtime s_runtime = Runtime.getRuntime();
} // End of class
需要注意的是上面的一句:Object[] objects = new Object[count];
只是分配了數組空間,沒有分配對象的空間。數組中只有引用而已。
結論:下代碼測試基本對象時,得出的結果象下面:
Object類對象 : 8位元組
Integer類對象 : 16位元組
Long類對象 : 16位元組
Byte類對象 : 16位元組
此示例說明了java中基本類型封裝對象所佔內存的大小。
1.簡單的Object對象要佔用8個位元組的內存空間,因為每個實例都至少必須包含一些最基本操作,比如:wait()/notify(),equals(), hashCode()等。
2.使用Integer對象佔用了16個位元組,而int佔用4個位元組,說了封裝了之後內存消耗大了4倍。
3.Long看起來比Integer對象應該使用更多空間,結果Long所佔的空間也是16個位元組。
那麼就正好說明了JVM的對於基本類型封裝對象的內存分配的規則是如下:
a、Object所佔內存(8個位元組)+最大基本類型(long)所佔內存(8個位元組) = 16位元組。
b、JVM強制使用8個位元組作為邊界。
c、所以所有基本類型封裝對象所佔內存的大小都是16位元組。但是還是有區別,比如:Integer對象雖然佔用了16個位元組的內存,但是只是利用了Object所佔內存(8個位元組)+int所佔內存(4個位元組) = 12位元組。還有4個位元組根本沒有被使用。
請問java語言中有沒有類似C語言里scanf的語句?
當然有,
Scanner
in=new
Scanner(System.in);
while(in.hasNext())
{
String
str=in.nextLine();//這就可以得到一個字元串
}
具體去看看Scanner類就可以了
java中有類似於c中的結構體一樣的數據類型嗎
用class就可以了,其實C++里的struts已經是多餘的了,只不過是一個全public的class,基本是為了兼容C才保留的。
java中類似C中的scanf函數是什麼,怎麼用
使用 Scanner 類,Scanner 被稱為輸入流掃描器類,從控制台讀取數據的 構造方法 如下:
Scanner類在 java.util 包下,使用時要加
import java.util.Scanner;
Scanner input = new Scanner(System.in);
舉例:
Scanner s = new Scanner(System.in);
//在控制台輸入一個字元串,回車
String str = s.next();
s還有提供許多其它方法,可以參考jdk的api文檔系統學習
java中類似於C語言的goto無條件轉向語句的語法是什麼?
Java不存在goto語句,但是已經用」類名.方法「的形式進行方法調用。
解釋:goto語句作為java的保留欄位,但是沒有實際的應用的。goto語句實際上是C語言的範疇,用來定義指針跳轉用的,java中通過」類名.方法「的形式進行的方法調用,不在用goto語句進行實現,這個是java的一大改進。
JAVA中實現goto語句功能 :
使用方法如下:
1 label0:
2 for (int k = 0; k 10; k++) {
3 ……….
4 label1:
5 for (int j = 0; j 10; j++) {
6 …………….
7 break label0;
8 }
9 ………..
10 label2:
11 for (int kk = 0; kk 10; kk++) {
12 …………..
13 break label0;
14 }
15 }
16 System.out.println(“here”);
將需要跳轉的到的循環開始處使用lablename:的方式標註(lablename是自定義標籤名)
例如,第1行代碼所示.在循環體內,可以使用break lablename;或者continue lablename跳轉到該處第1行代碼的地方,第7行代碼執行後,將跳轉到第1行代碼處.
break 和continue的區別就是,break跳到lablename處後,接下來是執行該lablename所代表的循環之後的語句,例如第16行代碼;而 continue則是將循環記數加1或者減1繼續執行lablename所代表的循環,直到條件不滿足或遇到return語句為止.
這樣我們就可以在循環中任何位置跳轉到父循環外去,無論嵌套多深.
注意:
1. lablename標籤名和所代表的標籤之前不能有任何其他的語句,例如第1行和第2行之間不能有其他的任何語句出現,否則編譯不通過;
2.該跳轉只能跳轉到祖先級循環,同級循環之間不能跳轉,例如第13行不能跳轉到第4行
3.雖然該跳轉在一定程度上方便了編程,不過最好盡量避免,因為它和goto一樣在一定程度上破壞了結構化編程的特點。
更詳細的例子可參考如下鏈接:
原創文章,作者:EJHZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/143857.html