A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© NGQ 中级黑马   /  2017-4-3 11:24  /  1464 人查看  /  7 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文


       
1. 自己设计一个坐标类,能提供以下方法如求当前坐标和其他坐标之间的距离等方法,要求所有变量为私有变量,并提供两个构造函数。
public class XYdistance {
        private int x;
        private int y;
        XYdistance(){
                setX(0);
                setY(0);
        }
        public void setX(int x) {
                this.x = x;
        }

        public int getX() {
                return x;
        }

        public void setY(int y) {
                this.y = y;
        }

        public int getY() {
                return y;
        }
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                XYdistance m_1= new XYdistance();
                m_1.setX(10);
                m_1.setY(10);
                XYdistance m_2= new XYdistance();
                double distance=(m_1.getX()-m_2.getX())*(m_1.getX()-m_2.getX())+(m_1.getY()-m_2.getY())*(m_1.getY()-m_2.getY());
                double result=Math.sqrt(distance);
                System.out.println(result);
        }
}








编写使用静态变量统计一个类产生的实例对象的个数的程序?
public class Static {
        private static int number;
        public Static(){
                //number=number+1;
                ++number;
                //System.out.println(++number);

        }
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                new Static();
                //m_1.Static();
                System.out.println(Static.number);
        }

}


























创建string对象过程的内存分配:
常量池(Constant Pool):指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。JVM虚拟机为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个有序集和,包括直接常量(String,Integer和 Floating point常量)和对其他类型,字段和方法的符号引用。对于String常量,它的值是在常量池中的。而JVM中的常量池在内存当中是以表的形式存在的, 对于String类型,有一张固定长度的CONSTANT_String_info表用来存储文字字符串值,注意:该表只存储文字字符串值,不存储符号引用。   1、String s = "abc";   创建过程分析:在class文件被JVM装载到内存中,JVM会创建一块String Pool(String缓冲池)。当执行String s = “abc”;时,JVM首先在String Pool中查看是否存在字符串对象“abc”(如何查看呢?用equals()方法判断),如果已存在该对象,则不用创建新的字符串对象“abc”,而直接使用String Pool中已存在的对象“abc”,然后将引用s指向该对象;如果不存在该对象,则先在String Pool中创建一个新的字符串对象“abc”,然后将引用s指向String Pool中创建的新对象。   注意:使用“字符串常量”引号创建的字符串对象时,在编译期就已经确定将该对象存储到String Pool中了。因此,String s = “abc”只会在编译期,在String Pool中创建一个对象。   例如:
Java代码  
String s1 = "abc";   
String s2 = "abc";   
System.out.println(s1 == s2);//true  
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);//true
结果说明:JVM创建了两个引用str1和str2,但在String Pool中只创建了一个对象,而且两个引用都指向了同一个对象。   2、String s = new String("abc");   创建过程分析:当执行String s = new String(“abc”);时,JVM首先在String Pool中查看是否存在字符串对象“abc”,如果不存在该对象,则先在String Pool中创建一个新的字符串对象“abc”,然后执行new String(“abc”)构造方法,在Heap里又创建一个新的字符串对象“abc”(new出来的对象都放在Heap里面),并将引用s指向Heap中创建的新对象;如果已存在该对象,则不用创建新的字符串对象“abc”,而直接使用String Pool中已存在的对象“abc”, 然后执行new String(“abc”)构造方法,在Heap里又创建一个新的字符串对象“abc”,并将引用s指向Heap中创建的新对象。   注意:使用new String(“”)创建的字符串对象时,会在运行期创建新对象存储到Heap中。因此,new String(“abc”)创建字符串对象时,会创建2个对象,编译期在String Pool中创建一个,运行时Heap中创建一个。   这里使用了
Java代码  
public String(String original)  
public String(String original)
这个构造方法,作用:初始化一个新创建的String对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。   由于Sring类是不可变的,因而不必使用该构造方法,除非需要original的显式副本。   例如:
Java代码  
String s1 = new String("abc");   
String s2 = new String("abc");   
System.out.println(s1 == s2);//false  
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);//false
结果说明:只要是用new()来新建对象的,都会在堆(Heap)中创建,而且其字符串是单独存值的,即使与String Pool中的数据相同,也不会与String Pool中的数据共享。   例程1:
Java代码  
String s1 = "abcdef";   
String s2 = "abcdef";   
String s3 = "abc"+"def";//编译期自动优化为String s3 = "abcdef";   
System.out.println(s1 == s2);   
System.out.println(s1 == s3);   
System.out.println(s2 == s3);  
String s1 = "abcdef";
String s2 = "abcdef";
String s3 = "abc"+"def";//编译期自动优化为String s3 = "abcdef";
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s2 == s3);
运行结果:  true  true  true  结果说明:字符串常量生成的字符串对象在String Pool中只有一个拷贝,且它是在编译期就被确定了,所以“s1 == s2”;“abc”和“def”都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己也肯定是字符串常量(它在编译期就被解析为一个字符串对象了,即class文件中就已经存在“abcdef”),所以在字符串生成字符串对象时,s3也是String Pool中“abcdef”的一个引用。故JVM对于字符串常量的"+"号连接,在程序编译期,JVM就将常量字符串的"+"连接优化为连接后的值。   
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端

7 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
bucuo...........
回复 使用道具 举报
值得收藏
回复 使用道具 举报
加油
回复 使用道具 举报
楼主辛苦了!
回复 使用道具 举报
第一个程序怎么输入要计算距离的坐标啊,比如我要计算(6,8)与(10,10)之间的距离,这个(6,8)怎么输入呢怎么赋值给m_2
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马