其實首先你可以先使用監(jiān)控內(nèi)存工具,來監(jiān)控下,如果內(nèi)存消耗不是很大,其實就不用那么麻煩了。如果實在要加個內(nèi)存監(jiān)控程序,可以使用Runtime中的MaxMemory、TotalMemory、FreeMemory來實現(xiàn)。注意這些都是JVM的內(nèi)存,請不要和系統(tǒng)的內(nèi)存混淆。另外如果要實時監(jiān)控,必須還得弄個線程類。大致思路是這樣,至于內(nèi)存溢出,你可以設定一個內(nèi)存閾值,比如說15%的剩余內(nèi)存設置,就報內(nèi)存即將溢出的錯誤。
成都創(chuàng)新互聯(lián)專注于海湖新企業(yè)網(wǎng)站建設,成都響應式網(wǎng)站建設,電子商務商城網(wǎng)站建設。海湖新網(wǎng)站建設公司,為海湖新等地區(qū)提供建站服務。全流程定制網(wǎng)站,專業(yè)設計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務
以下實例演示了使用 File 類的 file.isHidden() 方法來判斷文件是否隱藏:
Main.java 文件
import java.io.File;
public class Main {
public static void main(String[] args) {
File file = new File("C:/Demo.txt");
System.out.println(file.isHidden());
}
}
以上代碼運行輸出結(jié)果為(Demo.txt為隱藏文件):
True
深入理解Java:注解(Annotation)自定義注解入門
要深入學習注解,我們就必須能定義自己的注解,并使用注解,在定義自己的注解之前,我們就必須要了解Java為我們提供的元注解和相關定義注解的語法。
元注解:
元注解的作用就是負責注解其他注解。Java5.0定義了4個標準的meta-annotation類型,它們被用來提供對其它 annotation類型作說明。Java5.0定義的元注解:
1.@Target,
2.@Retention,
3.@Documented,
4.@Inherited
這些類型和它們所支持的類在java.lang.annotation包中可以找到。下面我們看一下每個元注解的作用和相應分參數(shù)的使用說明。
@Target:
@Target說明了Annotation所修飾的對象范圍:Annotation可被用于 packages、types(類、接口、枚舉、Annotation類型)、類型成員(方法、構造方法、成員變量、枚舉值)、方法參數(shù)和本地變量(如循環(huán)變量、catch參數(shù))。在Annotation類型的聲明中使用了target可更加明晰其修飾的目標。
作用:用于描述注解的使用范圍(即:被描述的注解可以用在什么地方)
取值(ElementType)有:
1.CONSTRUCTOR:用于描述構造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部變量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述參數(shù)
7.TYPE:用于描述類、接口(包括注解類型) 或enum聲明
使用實例:
@Target(ElementType.TYPE)
public @interface Table {
/**
* 數(shù)據(jù)表名稱注解,默認值為類名稱
* @return
*/
public String tableName() default "className";
}
@Target(ElementType.FIELD)
public @interface NoDBColumn {
}
注解Table 可以用于注解類、接口(包括注解類型) 或enum聲明,而注解NoDBColumn僅可用于注解類的成員變量。
@Retention:
@Retention定義了該Annotation被保留的時間長短:某些Annotation僅出現(xiàn)在源代碼中,而被編譯器丟棄;而另一些卻被編譯在class文件中;編譯在class文件中的Annotation可能會被虛擬機忽略,而另一些在class被裝載時將被讀?。ㄕ堊⒁獠⒉挥绊慶lass的執(zhí)行,因為Annotation與class在使用上是被分離的)。使用這個meta-Annotation可以對 Annotation的“生命周期”限制。
作用:表示需要在什么級別保存該注釋信息,用于描述注解的生命周期(即:被描述的注解在什么范圍內(nèi)有效)
取值(RetentionPoicy)有:
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在運行時有效(即運行時保留)
Retention meta-annotation類型有唯一的value作為成員,它的取值來自java.lang.annotation.RetentionPolicy的枚舉類型值。具體實例如下:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
public String name() default "fieldName";
public String setFuncName() default "setField";
public String getFuncName() default "getField";
public boolean defaultDBValue() default false;
}
Column注解的的RetentionPolicy的屬性值是RUTIME,這樣注解處理器可以通過反射,獲取到該注解的屬性值,從而去做一些運行時的邏輯處理
@Documented:
@Documented用于描述其它類型的annotation應該被作為被標注的程序成員的公共API,因此可以被例如javadoc此類的工具文檔化。Documented是一個標記注解,沒有成員。
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Column {
public String name() default "fieldName";
public String setFuncName() default "setField";
public String getFuncName() default "getField";
public boolean defaultDBValue() default false;
}
@Inherited:
@Inherited 元注解是一個標記注解,@Inherited闡述了某個被標注的類型是被繼承的。如果一個使用了@Inherited修飾的annotation類型被用于一個class,則這個annotation將被用于該class的子類。
注意:@Inherited annotation類型是被標注過的class的子類所繼承。類并不從它所實現(xiàn)的接口繼承annotation,方法并不從它所重載的方法繼承annotation。
當@Inherited annotation類型標注的annotation的Retention是RetentionPolicy.RUNTIME,則反射API增強了這種繼承性。如果我們使用java.lang.reflect去查詢一個@Inherited annotation類型的annotation時,反射代碼檢查將展開工作:檢查class和其父類,直到發(fā)現(xiàn)指定的annotation類型被發(fā)現(xiàn),或者到達類繼承結(jié)構的頂層。
我是Java初學者,我看了你的問題后想了很久終于把它做出來了,你看看吧,方法不是很好,但能滿足你的要求:
import java.util.Scanner;
public class Check2{
int t;
char[] chs = new char[500]; //輸入的句子不能超過500個字符
Check2() {
String str;
Scanner sc = new Scanner(System.in);
System.out.println("請輸入字符串(輸入的字符串不能超過500個字符):");
str = sc.nextLine();
t=str.length();
for (int i = 0; i t; i ++) {
chs[i] = str.charAt(i); //將輸入的字符串裝入數(shù)組
}
}
}
class FuZhi{
char[] letter=new char[52]; //將52個字母(含大小寫)裝入數(shù)組
FuZhi(){
char p;
int i=0,j=26;
for(p='A';p='Z';p++){
letter[i]=p; //這句剛才寫掉了,加上去后程序就完整了
i++; //將A-Z裝入數(shù)組
}
for(p='a';p='z';p++){
letter[j]=p; //將a-z裝入數(shù)組,并且從數(shù)組的第26個開始裝入(letter[0]-letter[25]已被裝入了字母)
j++;
}
}
}
class display{
public static void main(String[] args){
char temp;
int t;
int[] n= new int [52]; //用于統(tǒng)計每個字符出現(xiàn)的次數(shù)
Check2 k =new Check2();
FuZhi m=new FuZhi();
for(int j=0;j52;j++){
t=0; //令t為0,,并且使上一個字母統(tǒng)計完成后
//將其再次初始化(如A統(tǒng)計完成后,當程序統(tǒng)計B出現(xiàn)的次數(shù)時,使B的初始次數(shù)為0)
for(int i=0;ik.t;i++){
if(m.letter[j]==k.chs[i]){ //比較字符是否相同,如相同,使t自加一
t++;
n[j]=t; //數(shù)組n來統(tǒng)計每個字母出現(xiàn)的次數(shù),即其中的每一個元素代表一個字母在程序中出現(xiàn)的次數(shù)
}
}
}
System.out.println("總共輸入了"+k.t+"個字符:\n"+"其中");
for(int i=0;i52;i++){
System.out.println("字母"+m.letter[i]+"出現(xiàn)的次數(shù)為:"+n[i]+"次");
}
}
}
寫掉了一句“l(fā)etter[i]=p;”,現(xiàn)在已經(jīng)補上了,程序可以運行了,你試一下吧?。?!