扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
其实首先你可以先使用监控内存工具,来监控下,如果内存消耗不是很大,其实就不用那么麻烦了。如果实在要加个内存监控程序,可以使用Runtime中的MaxMemory、TotalMemory、FreeMemory来实现。注意这些都是JVM的内存,请不要和系统的内存混淆。另外如果要实时监控,必须还得弄个线程类。大致思路是这样,至于内存溢出,你可以设定一个内存阈值,比如说15%的剩余内存设置,就报内存即将溢出的错误。
成都创新互联专注于海湖新企业网站建设,成都响应式网站建设,电子商务商城网站建设。海湖新网站建设公司,为海湖新等地区提供建站服务。全流程定制网站,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
以下实例演示了使用 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());
}
}
以上代码运行输出结果为(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包中可以找到。下面我们看一下每个元注解的作用和相应分参数的使用说明。
@Target:
@Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
取值(ElementType)有:
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
使用实例:
@Target(ElementType.TYPE)
public @interface Table {
/**
* 数据表名称注解,默认值为类名称
* @return
*/
public String tableName() default "className";
}
@Target(ElementType.FIELD)
public @interface NoDBColumn {
}
注解Table 可以用于注解类、接口(包括注解类型) 或enum声明,而注解NoDBColumn仅可用于注解类的成员变量。
@Retention:
@Retention定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时将被读取(请注意并不影响class的执行,因为Annotation与class在使用上是被分离的)。使用这个meta-Annotation可以对 Annotation的“生命周期”限制。
作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
取值(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的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。
当@Inherited annotation类型标注的annotation的Retention是RetentionPolicy.RUNTIME,则反射API增强了这种继承性。如果我们使用java.lang.reflect去查询一个@Inherited annotation类型的annotation时,反射代码检查将展开工作:检查class和其父类,直到发现指定的annotation类型被发现,或者到达类继承结构的顶层。
我是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); //将输入的字符串装入数组
}
}
}
class FuZhi{
char[] letter=new char[52]; //将52个字母(含大小写)装入数组
FuZhi(){
char p;
int i=0,j=26;
for(p='A';p='Z';p++){
letter[i]=p; //这句刚才写掉了,加上去后程序就完整了
i++; //将A-Z装入数组
}
for(p='a';p='z';p++){
letter[j]=p; //将a-z装入数组,并且从数组的第26个开始装入(letter[0]-letter[25]已被装入了字母)
j++;
}
}
}
class display{
public static void main(String[] args){
char temp;
int t;
int[] n= new int [52]; //用于统计每个字符出现的次数
Check2 k =new Check2();
FuZhi m=new FuZhi();
for(int j=0;j52;j++){
t=0; //令t为0,,并且使上一个字母统计完成后
//将其再次初始化(如A统计完成后,当程序统计B出现的次数时,使B的初始次数为0)
for(int i=0;ik.t;i++){
if(m.letter[j]==k.chs[i]){ //比较字符是否相同,如相同,使t自加一
t++;
n[j]=t; //数组n来统计每个字母出现的次数,即其中的每一个元素代表一个字母在程序中出现的次数
}
}
}
System.out.println("总共输入了"+k.t+"个字符:\n"+"其中");
for(int i=0;i52;i++){
System.out.println("字母"+m.letter[i]+"出现的次数为:"+n[i]+"次");
}
}
}
写掉了一句“letter[i]=p;”,现在已经补上了,程序可以运行了,你试一下吧!!!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流