1. 静态导入

    • 使用import static方式导入一个类的所有方法. 例如: import static net.mindview.util.Print.*;

      首先定义了一个Print类,里面有静态方法print

package net.mindview.util;

public class Print {
public static void print(Object s){
System.out.println(s);
}
}

       使用的时候 在类前使用import static导入即可. 需要手动导入

package net.mindview.operators;

import java.util.Date;
import static net.mindview.util.Print.*;
public class HelloData { public static void main(String[] args) {
print("hello, it is");
print(new Date()); }
}

2. java操作符

  • 几乎所有的操作符都只能操作"基本类型"

3. 赋值

    • 基本类型存储了实际的数值, 且并非指向一个对象的引用, 所以再赋值的时候, 直接将一个地方的内容复制到了另一个地方,这就是所谓的基本类型是值传递,而对象,String等是地址传递
    • 对象赋值; 将一个对象赋值给另一个对象, 实际上是将"引用"从一个地方复制到另一个地方.这意味着加入c=d,那么c和di都指向了原来d指向的那个对象.
package net.mindview.operators;

class Tank{
int level;
} public class Assignment {
public static void main(String[] args) {
Tank t1 = new Tank();
Tank t2 = new Tank();
t1.level = ;
t2.level = ;
System.out.println("t1.level:" + t1.level + ", t2.level:" + t2.level);
t2 = t1;
System.out.println("t1.level:" + t1.level + ", t2.level:" + t2.level);
t1.level = ;
System.out.println("t1.level:" + t1.level + ", t2.level:" + t2.level);
} }

  这种特殊的现象叫做"别名现象", 是java操作对象的一种基本方式。在这个例子中,如果想辨别名问题应该怎么办呢? 应该这样写:

    t1.level = t2.level;

  下面这句话不太理解:

  这样便可以保持两个对象彼此独立, 而不是将t1和t2绑定到同一个对象上。 但你很快就会意识到, 直接操作对象的域容易导致混乱,并且, 并且违背了良好面向对象程序设计的原则。这可不是一个小问题, 所以从现在开始大家就应该注意, 为对象赋值可能会产生意想不到的结果。

  我的问题: 什么结果呢? 假设成员变量不是基本类型, 而是引用类型。 如果给引用类型赋值, 指向的又是一个地址, 这样一个地方改了, 那么使用这个引用地址的地方都会受到影响, 我是这么理解的。 不知道对不对

  方法调用中的别名现象。也就是参数是一个引用类型, 传递的是引用地址. 一旦在方法内部修改了引用地址的成员变量, 那么所有指向这个引用地址的地方都会被修改.

package net.mindview.operators;

class Letter{
char c;
} public class PassObject {
static void f(Letter y){
y.c = 'z';
}
public static void main(String[] args) {
Letter x = new Letter();
x.c = 'a';
System.out.println("1: x.c="+x.c);
//传递的时x所指向的引用
f(x);
System.out.println("1: x.c="+x.c);
}
}

4. 自动递增和递减

  • ++i:先运算, 在生成值
  • i++: 先生成值, 在运算.

  记忆方法, 运算都是+1, 如果先生成值, 那么就是没+1之前就生成了, 后生成值, 就是运算后生成的,所以+1了.

package net.mindview.operators;
import static net.mindview.util.Print.*;
public class AutoInc { public static void main(String[] args) {
int i = ;
println("i:"+i);
println("++i:"+ ++i);//先执行运算, 在生成值
println("i:"+i);
println("i++:"+ i++);//先生成值, 在运算
println("i:"+i);
} }

输出结果:

i:
++i:
i:
i++:
i:

5. 对象的等价性

  

package net.mindview.operators;

public class EqualsMethod {

    public static void main(String[] args) {
Integer n1 = new Integer();
Integer n2 = new Integer();
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
}
/*
  output:
    false
    true
*/
    • 这个例子说明了 : == 和 !=比较的是对象的引用
    • 如果想比较两个对象的实际内容是否相同, 必须使用equals()方法。 注意这个规则不适合基本类型,基本类型直接使用==和!=即可。
    • java类库都重写了equals()方法,以便用来比较对象的内容,而不是对象的引用.

6.截尾和舍入

  • 29.7转换为int, 结果是30还是29? float转int, 大位数转小位数, 会截去,所以结果是29.
  • 如果想要四舍五入,则使用java.lang.Math包中的round方法.
  • 通常,表达式中出现的最大的数据类型决定了表达式最终的数据类型. float与double相乘,结果是double类型, int和long相加,结果是long类型.

fasdfasdf

  1. fasfasdf
  2. fasdfads

最新文章

  1. LCM在Kernel中的代码分析
  2. loadrunner中切割字符串
  3. sql server命令行
  4. SQL Serve允许远程连接的解决方法
  5. MVC之重定向
  6. 基于CPS变换的尾递归转换算法
  7. 浅谈MySQL中的查询优化
  8. epel扩展库的安装
  9. 团队作业4——第一次项目冲刺(Alpha版本)2017.11.16
  10. IIFE的形式、原理和常见写法
  11. ionic安装教程
  12. springboot中访问jsp文件方式
  13. 在linux服务器下JMeter如何执行jmx性能脚本
  14. java集合(一)
  15. GIEC2019第六届全球互联网经济大会北京站震撼来袭!
  16. NAVICAT 12.0.24 连接 MYSQL8.0.12 的方法
  17. 修復 “Failed to bring up eth0″ in Ubuntu virtualbox
  18. 如何在 CentOS 7 上安装 Docker
  19. jQueryEasyUI的使用
  20. Struts 2 Tutorial

热门文章

  1. 洛谷P2051 [AHOI2009] 中国象棋(状压dp)
  2. Linux::mysql-connector-c++
  3. php后端开发要学什么
  4. VMware安装和linux(centos7)系统安装
  5. Spring 框架基础(04):AOP切面编程概念,几种实现方式演示
  6. JavaScript中valueOf、toString的隐式调用
  7. 百万年薪python之路 -- 列表练习
  8. solr学习篇(二) solr 分词器篇
  9. windows下Eclipse远程连接linux hadoop远程调试 经验(一)
  10. django-模型之从数据库获取数据(二)