黑马程序员-Java中Objcet类和其他常见类

                                 -----------android培训、java培训、java学习型技术博客、期待与您交流!------------

                                                Java中的Object类和其他常见类总结

一、Object类
  1、它是所有类默认的直接或者间接的父类, 不必显式的表示出来;
  2、该类中定义了所有类都具备的方法;

  3、Object中的equals()方法:因为Object类中是比较两个对象的内存地址值,意义不大;所以可以通过
     覆盖Object类的equals()方法,建立自己定义类特有比较内容;利用多态的机制实现比较。
     例子:ObjectDemo.java

class Demo //默认extends Object
{
	private int num;
	Demo(int num)
	{
		this.num = num;
	}
	
	public boolean equals(Object obj)
	{
		if(!(obj instanceof Demo))
			return false;
		Demo d = (Demo)obj;

		return this.num == d.num;
	}
	
	/*
	public boolean compare(Demo d)
	{
		return this.num==d.num;
	}
	*/
}

class Person //默认extends Object
{
}

public class ObjectDemo 
{
	public static void main(String[] args) 
	{
		Demo d1 = new Demo(4);
		Demo d2 = new Demo(7);
        System.out.println(d1.equals(d2));

		Person  p  =  new Person();
		 System.out.println(d1.equals(p));

	}
}


  4、Object中的getClass()方法:
     返回创建此类的类Class的对象
     例子:ObjectDemo1.java

class Demo {//默认extends Object
	private int num;
	Demo(int num)
	{
		this.num = num;
	}
	
	public boolean equals(Object obj)
	{
		if(!(obj instanceof Demo))
			return false;
		Demo d = (Demo)obj;

		return this.num == d.num;
	}
}

class Person {//默认extends Object
}

public class ObjectDemo1 {
	public static void main(String[] args) 
	{
		Demo d1 = new Demo(4);
        Class c = d1.getClass();
		System.out.println(c.getName());
	}
}

//结果:Demo

  5、Object中的toString()方法:返回对象的名称@ 哈希值字符串,意义不大,所以可以通过
     覆盖Object中的toString()方法,返回自己想要输出的内容。
     例子:ObjectDemo2.java

class Demo {//默认extends Object
	private int num;
	Demo(int num)
	{
		this.num = num;
	}
	
	public boolean equals(Object obj)
	{
		if(!(obj instanceof Demo))
			return false;
		Demo d = (Demo)obj;

		return this.num == d.num;
	}

	public String toString(){
		return "Demo:"+num;
	}
}

class Person {//默认extends Object
}

public class ObjectDemo2{
	public static void main(String[] args) 
	{
		Demo d1 = new Demo(4);
		System.out.println(d1.toString());

		Demo d2 = new Demo(7);
		System.out.println(d2.toString());
	}
}

//结果:

二、Class类
    1、Class 没有公共构造方法。
    2、Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
    3、Class对象被加载到方法区和栈区,用 Class 对象创建属于某个类的全部“常规”或“普通”对象。
    4、利用Class对象的forName(String className)方法和newInstance()f方法实现java中反射的机制。
    例子:ClassDemo.java

class  Person{
	public void showInfo(){
		System.out.println("information");
	}
}


public class ClassDemo {
	public static void main(String[] args) 
	{
		try{
			Class c = Class.forName("Person");	
			Person p = (Person)c.newInstance();
			p.showInfo();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			System.out.println("Class study!");
		}
	}
}

三、System类
    它包含了很多系统级的属性和控制方法,该类位于Java API的java.lang包中。
    1、特点:
     (1)由于System类的构造方法时private的,所以无法创建该类的对象,也就是无法实例化;
     (2)它内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用;
    2、成员变量
     (1)out:标准输出流,默认显式器上的控制台;
         例如:System.out.println("Test out");
         该行代码的作用是在控制台上长输出一行 Test out;
      (2)err:标准错误输出流,默认显式器上的控制台;
         例如:System.err.println("Test err");
         该行代码的作用是在控制台上长输出一行 Test err;
      (3)in:标准输入流,默认键盘。
         例如:System.in.read();
         该行代码的作用是从输入流中读取一行;
            此外,还可以使用System类中的成员方法setIn(InputStream)、setOut(PrintStream)和setErr(PrintStream),
        改变标准输入流等对应的设备,例如可以将标准输出流输出的信息输出到文件内部,从而形成日志文件等。
   
    3、成员方法
      (1)、arraycopy方法
                  public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
                  该方法的作用是数组拷贝,也就是将一个数组中的内容复制到另外一个数组中的指定位置,由于该方法是native方法,
           所以性能上比使用循环高效。
          例如:利用它可以实现删除数组中元素的功能,
                                   int[] old = {1,2,3,4,5};
                                   int[] new = new int[a.length-1];
                                  System.arraycopy(a,0,b,0,2);
                                  System.arraycopy(a,3,b,2,2);
                   该代码的作用是将数组old中,从下标为0开始,复制old[0]和old[1]到数组new从下标0开始的位置,总共复制2个;然后,
            数组old中,从下标为3开始,复制old[3]和old[4]到数组new从下标2开始的位置,总共复制2个,
            这样经过复制以后数组a中的值不发生变化,而数组b中的值将变成{1,2,4,5},就可以删除a[2]。
      (2)、currentTimeMillis方法
                public static long currentTimeMillis()
              该方法的作用是返回当前的计算机时间,当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
         是一个长整型的数字,该数字就是以差值表达的当前时间。
         例如:可以用它计算程序运行的时间
                           public static long runTime()
                          {
                                    long start = System. currentTimeMillis();
                                     for(int i = 0;i < 1000;i++){
                                                   System.out.print(i);
                                      }
                                      long end = System. currentTimeMillis();
                                     return end – start;
                           }
          使用这种方式可以测试不同算法的程序的执行效率高低,也可以用于后期线程控制时的精确延时实现。
      (3)exit方法
                 public static void exit(int status)
                  该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。一般在图形界面编程中实现程序的
          退出功能等。
      (4)gc方法
                 public static void gc()
                该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。
         一般很少使用。
      (6)getProperties()方法
             获取当前的系统属性。返回值为Properties类的对象,因为Properties是Hashtable的子类,那么可以
          通过map的方法取出该集合中的元素。
            例如:获取JVM启动时的所有系统属性
                      {
                              Properties prop = System.getProperties();
                              for(Object obj : prop.keySet())
                              {
                                              String value = (String)prop.get(obj);
                                              System.out.println(obj+"::"+value);
                               }
                        }
             将会输出所有与JVM相关的信息。
      
       (7)setPropery()方法
            public static String setProperty(String key,String value)
            设置指定键指示的系统属性。可以利用它在系统中自定义一些特有的数据。
           例如:
       System.setProperty("mykey","myvalue");

       (8)getProperty方法
                 public static String getProperty(String key)
            a、该方法的作用是获得系统中属性名为key的属性对应的值。例如java.version表示Java 运行时环境版本,os.version表示操作
             系统的版本,os.name表示操作系统的名称等;在Java API的System的getProperties()方法中有详细描述;
             例如:       
                              String osName = System.getProperty("os.name");
                             String javaVersion = System.getProperty("java.version");
                             System.out.println("当前操作系统是:" + osName);
                             System.out.println("当前JVM的版本是:" + javaVersion);
                  使用该方法可以获得很多系统级的参数以及对应的值。

              b、可以利用它在JVM启动时动态的加载一些属性信息,如
                              String v = System.getProperty("test");
                              System.out.println("v="+v);
                    命令行:java  -Dtest-haha  class文件名
                   结果:v=haha
                   可以在非安装版的tomcat服务器启动时手动添加一些系统信息。
 

import  java.util.*;

class SystemDemo 
{
	public static void main(String[] args) 
	{
		Properties pp = System.getProperties();

		//获取JVM的所有属性信息
		/*
		for(Object obj:pp.keySet()){
			String infoValue = (String)pp.get(obj);
			System.out.println(obj+"::"+infoValue);
		}
		*/

        //获取JVM的特定的属性信息
		String   osName =  System.getProperty("os.name");
		System.out.println("osName= "+osName);

		//设置自定义的一些系统属性信息
		System.setProperty("MyProperty","MyInfomation");
		String   myProperty =  System.getProperty("MyProperty");
		System.out.println("myProperty= "+myProperty);

		//当JVM启动时,动态加载一些信息
		//java   -Dtest=haha  xxx
		String   myInfo =  System.getProperty("myinfo");
		System.out.println("myInfo= "+myInfo);
	}
}


 

四、Runtime类
    1、特点
    (1)该类没有提供构造函数,所以不能建立它的对象;
    (2)它是一个与JVM运行时环境有关的Singleton(单例设计模式)类;
    2、getRuntime()方法
    (1)取得当前JVM的运行时环境,这也是在Java中唯一一个得到运行时环境的方法;
    (2)也就是只能通过Runtime.getRuntime()获得Runtime类的对象;
    3、exit()方法
        Runtime中的exit方法是退出当前JVM的方法;因为我看到System类中的exit实际上也是通过调用 Runtime.exit()来退出JVM的,
    Java对Runtime返回值的一般规则,0代表正常退出,非0代表异常中止,这只是Java的规则,在各个操作系统中总会发生一些小的混淆。
    4、exec() 方法
       在单独的进程中执行指定的字符串命令
                       public Process exec(String command) throws IOException
                       public Process exec(String command,String[] envp) throws IOException
           这个方法中 cmdArray 是一个执行的命令和参数的字符串数组,数组的第一个元素是要执行的命令往后依次都是命令的参数,
       envp 我个人感觉应该和 C 中的 execve 中的环境变量是一样的, envp 中使用的是 name=value 的方式。 
   

//RuntimeDemo.java
//it was used to test Runtime class.


class  RuntimeDemo{
	public static void main(String[] args) 
	{
		try{
			Runtime  rt  =  Runtime.getRuntime();
			//Process  pc = rt.exec("notepad  SystemDemo.java");
			
			String[]  envp = {"SystemDemo.java"};
			Process  pc = rt.exec("notepad",envp);
            
		}catch(Exception e){
			e.printStackTrace();
		}


	}
}


 

五、Date类
    类 Date 表示特定的瞬间,精确到毫秒。
    1、创建一个日期对象:使用系统的当前日期和时间创建一个日期对象并返回一个长整数;
    2、日期数据的定制格式:使用类java.text.SimpleDateFormat完成日期数据的格式定制;
    此外,还可以通过Date(long date)分配 Date 对象并初始化此对象,以表示自从标准基准时间以来的指定毫秒数。

   

//DateDemo.java

import  java.util.*;
import  java.text.*;

class  DateDemo
{
	public static void main(String[] args) 
	{
		Date  date  =  new Date();
		System.out.println(date.getTime());

		//将模式封装到SimpleDateformat对象中。
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日E hh:mm:ss");
		Date date1 = new Date();   
		//调用format方法让模式格式化指定Date对象
		String time = sdf.format(date1);
		System.out.println("time="+time);

		long  lt = System.currentTimeMillis();
		Date date2 = new Date(lt);
		System.out.println("lt= "+lt);

	}
}


 

六、Calendar类
    Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,
    并为操作日历字段(例如获得下星期的日期)提供了一些方法。
    1、Calendar类的字段,如YEAR、MONTH、DAY_OF_WEEK和DAY_OF_MONTH等;
    2、getInstance()方法:获取一个Calendar类的对象。
    3、get(int field)方法:返回给定日历字段的值。
  

import  java.text.*;
import  java.util.*;


class CalendarDemo1 {
	public static void main(String[] args) 
	{
		Calendar c  =  Calendar.getInstance();

		/*

        String[] months = {	"一月","二月","三月","四月"
							,"五月","六月","七月","八月"
							,"九月","十月","十一月","十二月"
						  };


		String[] weeks = {	"","星期日","星期一","星期二",
							"星期三","星期四","星期五","星期六",
						 };
		*/
		String[] months = new DateFormatSymbols().getShortMonths();
		String[] weeks = new DateFormatSymbols().getShortWeekdays();
        
		int  monthIndex = c.get(Calendar.MONTH);
		int  dayIndex = c.get(Calendar.DAY_OF_WEEK);

		System.out.println(c.get(Calendar.YEAR)+"年");
		System.out.println((c.get(Calendar.MONTH)+1)+"月");
        //System.out.println(months[monthIndex]);
		System.out.println(c.get(Calendar.DAY_OF_MONTH)+"日");
		//System.out.println("星期"+(c.get(Calendar.DAY_OF_WEEK)-1));
		System.out.println(weeks[dayIndex]);
	}
}


 
    4、set()重载方法:
       public void set(int field,int value)
       public final void set(int year,int month,int date)
       将给定的日历字段设置为给定值。
    5、add()方法
       public abstract void add(int field,int amount)
      根据日历的规则,为给定的日历字段添加或减去指定的时间量。
   

import  java.text.*;
import  java.util.*;


class CalendarDemo2 {
	public  static void  calendarPrintf(Calendar c){

		String[] months = new DateFormatSymbols().getShortMonths();
		String[] weeks = new DateFormatSymbols().getShortWeekdays();
        
		int  monthIndex = c.get(Calendar.MONTH);
		int  dayIndex = c.get(Calendar.DAY_OF_WEEK);

		System.out.println(c.get(Calendar.YEAR)+"年");
		System.out.println((c.get(Calendar.MONTH)+1)+"月");
        //System.out.println(months[monthIndex]);
		System.out.println(c.get(Calendar.DAY_OF_MONTH)+"日");
		//System.out.println("星期"+(c.get(Calendar.DAY_OF_WEEK)-1));
		System.out.println(weeks[dayIndex]);
	}

	public static void main(String[] args) 
	{
		Calendar c  =  Calendar.getInstance();
		//c.set(2018,2,23);
		calendarPrintf(c);

        System.out.println("---------------------");
		Calendar c1  =  Calendar.getInstance();
	    c1.add(Calendar.DAY_OF_MONTH,30);
		calendarPrintf(c1);
	}
}


 

七、Math类和Random类
    1、Math 类包含用于执行基本数学运算的方法,常用方法
       (1)ceil方法返回大于指定的数据(参数)的最小整数
            public static double ceil(double a);
       (2)floor方法返回小于指定的数据(参数)的最大整数
            public static double floor(double a);
       (3)round方法四舍五入
            public static long round(double a);
       (4)pow方法求值 a的b次方
            public static double pow(double a,double b);
 

class  MathDemo{
	public static void main(String[] args) 
	{
		//ceil返回大于指定数据的最小整数。
		double  d = Math.ceil(12.45);
		System.out.println(d);
		
		//floor返回小于指定数据的最大整数。
		double  d1 = Math.floor(12.45);
		System.out.println(d1);

        //四舍五入
		double  d2 = Math.round(12.45);
		double  d3 = Math.round(12.54);
		System.out.println("d2= "+d2+","+"d3= "+d3);

        //次方运算
	    double d4 = Math.pow(2,3);
		System.out.println("d4="+d4);
		
	}
}

 

     2、Math类的random方法
            返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
            返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。
               public static double random();

     3、Random类:此类的实例用于生成伪随机数流。
        nextInt方法返回一个伪随机数,它是取自此随机数生成器序列的、
 在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
      public int nextInt(int n); 
 
 

import  java.util.*;

class  RandomDemo{
	public static void main(String[] args) 
	{
        //利用Math类的random方法
		for(int i=0;i<10;i++){

			int  d  = (int)(Math.random()*10)+1;
			System.out.println(d);
		}

		System.out.println("--------------------------");

		//利用Random类的nextInt方法
		Random  rd = new Random();
		for(int i=0;i<10;i++){
			int  d1  = rd.nextInt(10);
			System.out.println(d1);
		}

		
	}
}
<pre class="java" name="code">/*
练习。给定一个小数。
保留该小数的后两位。

选作。可以考虑,保留时进行四舍五入。
*/

class  MathDemo1{
	public static void saveTwo(double d,int scale,boolean isRound){
        
		double base = Math.pow(10,scale);
		double num = isRound?Math.round(d*base)/base:((int)(d*base))/base;
		System.out.println("num="+num);
	} 
	
	public static void main(String[] args){

        //方法1
		double d  = 12.3456;
		double d1 = d*100;
		System.out.println("d1="+d1);
		d1 = d1+0.5;
		double d2 = (int)d1;
		System.out.println("d2="+d2);
		double d3 = d2/100;
		System.out.println("d3="+d3);

		System.out.println("---------------------------");

		//方法2
		saveTwo(12.3456,2,true);//12.34
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值