java中類似c(java和什麼類似)

本文目錄一覽:

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-hant/n/143857.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
EJHZ的頭像EJHZ
上一篇 2024-10-24 15:26
下一篇 2024-10-24 15:26

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論