java编程思想读后感——10

//java编程思想
//一、作用域
//c、c++,java中变量的作用域与花括号的位置有关
{
 int a=12;
 //a有效
 {
  int k=90;
  //a与k有效
 }
 //k无效,a有效
}
//此代码在c与c++中是有效的,而在java中会报错
{
 int x=12;
 {
  int x=90;
 }
}
//编译器将会报告变量x已经定义过,所以,在c与c++中将作用域较大的变量“隐藏”起来的做法
//在java中是不允许的,因为java设计者认为会造成程序的混乱
//java对象没有与基本类型一样的生命周期,在作用域之外,虽然java对象的引用失去了意义,但对象本省
//仍然占有内存空间
{
 String s=new String("hello");
}
//二、java中打印出当前日期
import java.util.Date;

public class dateshow{
 public static void main(String[] args)
 {
  System.out.println("now is ");
  System.out.println(new Date());
  //创建date对象,打印出获取的当前时间信息
 }
}
//三、java中获取运行系统中所有属性,并显示
public class show{
 public static void main(String[] args){
  System.getProperties().list(System.out);
  //显示从运行程序的系统中获取所有“属性”
  //可以提供环境信息
  //list方法将结果发送给它的参数System.out,从而得到显示
  //也可以发送到其他地方
  System.out.println(System.getProperty("user。name"));
  //查询系统中的属性:用户名
  System.out.println(
  System.getProperty("java.library.path"));
  //查询系统中的java目录路径
 }
}
//四、嵌入html
/**
*insert a list for it
*

    *
  1. one

  2. *
  3. two

  4. *
  5. three

  6. *
  7. four

  8. *

*/
//注意,在文档注释中,位于每一行开头的*与空格都会被javadoc丢掉
//javadoc会对内容进行重新格式化,与其标准的文档外观一致
//并且,不要再嵌入式html中使用标题标签,如



//因为javadoc会加入自己的标题,如果自行加入可能会发生冲突
//五、简化打印语句
//可以将打印日期的代码改写如下:
import java.util.*;
import static net.mindview.util.Print.*;
//简化打印语句


public class show{
 public static void main(String[] args)
 {
  print("now is ");
  print(new Date());
  //无需使用system.out
 }
}
//六、运算优先级
public class prior{
 public static void main(String[] args)
 {
  int x=1,y=2,z=3;
  int a=x+y-2/2+z;
  //2/2优先运算
  int b=x+(y-2)/(2+z);
  //括号内的优先运算
  System.out.println("a="+a+"b="+b);
  //最后一个变量只需前面添加一个“+”
 }
}
//使用括号,使a与b的结果不同,括号内的优先结合
//没有括号时,加减的优先级低于乘除的优先级
//System.out.println()语句中的“+”,意味着字符串链接
//并且还要执行字符串转换
//即如果编译器观察到“+”后面的元素为非String类型,则将其转换为String类型
//七、赋值
import static net.mindview.util.Print.*;

class rank
{
 int a;
}
public class test
{
 public static void main(String[] args)
 {
  rank r1=new rank();
  rank t2=new rank();
  r1.a=1;
  r2.a=2;
  print("1:r1: "+r1.a+"r2: "+r2.a);
  r1=r2;
  //此时两个rank引用指向同一个对象
  print("2:r1: "+r1.a+"r2: "+r2.a);
  r1.a=27;
  //当改变一个引用指向对象的数据时
  //由于两个引用指向的是同一个对象
  print("3:r1: "+r1.a+"r2: "+r2.a);
  //所以再次输出时两个数字相同都为27
 }
}
//注:没有引用指向的对象将被“垃圾回收器”自动清理
//八、别名现象
import static net.mindview.util.Print.*;

class ch
{
 char c;
}
public class PassObject
{
 static void f(ch chh)
 {
  chh.c='z';
 }
 public static void main(String[] args)
 {
  ch cc=new ch();
  cc.c='a';
  print("1: cc.c:"+cc.c);
  f(cc);
  print("2: cc.c:"+cc.c);
 }
}
//f函数看起来是复制其参数ch chh的一个副本
//并且改变它的值,但实际上,由于复制的是一个引用
//所以实际上改变的是引用指向的对象的值
//也就是cc指向的对象的值发生了改变
//九、自增自减符
import static net.mindview.util.Print.*;

public class as
{
 public static void main(String[] args)
 {
  int i=1;
  print("i: "+i);
  print("++i: "+ ++i);
  //输出结果是2,先做加1运算再输出
  print("i++: "+ i++);
  //输出结果仍然是2,此时先输出再做++
  print("i: "+i);
  //此时显示上次++完毕的结果,为3
  print("--i: "+ --i);
  //同理,此时的输出结果为2
  print("i--: "+ i--);
  //此时的输出结果仍然为2
  print("i: "+i);
  //此时输出第二次--后的结果1
 }
}
//总结:++/--在前,先做运算再执行操作
//++/--在后,先进行操作,再做运算
//十、比较
public class equal
{
 public static void main(String[] args)
 {
  Integer n1=new Integer(2);
  Integer n2=new Integer(2);
  System.out.println(n1==n2);
  //输出false
  System.out.println(n1!=n2);
  //输出true
 }
}
//两条输出语句打印出逻辑运算后的布尔值结果
//==/!=符号比较的是二者的引用是否相同
//而不是二者指向对象中的值是否相同
//故输出的结果显示false后市true
//比较两对象实际内容是否相同使用equals()方法
//将上述例子的最后两句改为:
System.out.println(n1.equals(n2));
//此时输出结果为true

class va{
 int a;
}
public class equal{
 public static void main(String[] args){
  va v1=new va();
  va v2=new va();
  v1.a=v2.a=2;
  System.out.println(v1.equals(v2));
 }
}
//此时的输出结果为false
//因为equals的默认行为是比较引用
//所以要在自己的类中覆盖equals方法,改为比较值
//而Integer中已经重写了equals方法
//故上一个例子中输出结果为true

你可能感兴趣的:(java)