1. 静态导入

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

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

  1. package net.mindview.util;
  2.  
  3. public class Print {
  4. public static void print(Object s){
  5. System.out.println(s);
  6. }
  7. }

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

  1. package net.mindview.operators;
  2.  
  3. import java.util.Date;
  4. import static net.mindview.util.Print.*;
  5. public class HelloData {
  6.  
  7. public static void main(String[] args) {
  8. print("hello, it is");
  9. print(new Date());
  10.  
  11. }
  12. }

2. java操作符

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

3. 赋值

    • 基本类型存储了实际的数值, 且并非指向一个对象的引用, 所以再赋值的时候, 直接将一个地方的内容复制到了另一个地方,这就是所谓的基本类型是值传递,而对象,String等是地址传递
    • 对象赋值; 将一个对象赋值给另一个对象, 实际上是将"引用"从一个地方复制到另一个地方.这意味着加入c=d,那么c和di都指向了原来d指向的那个对象.
  1. package net.mindview.operators;
  2.  
  3. class Tank{
  4. int level;
  5. }
  6.  
  7. public class Assignment {
  8. public static void main(String[] args) {
  9. Tank t1 = new Tank();
  10. Tank t2 = new Tank();
  11. t1.level = ;
  12. t2.level = ;
  13. System.out.println("t1.level:" + t1.level + ", t2.level:" + t2.level);
  14. t2 = t1;
  15. System.out.println("t1.level:" + t1.level + ", t2.level:" + t2.level);
  16. t1.level = ;
  17. System.out.println("t1.level:" + t1.level + ", t2.level:" + t2.level);
  18. }
  19.  
  20. }

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

    t1.level = t2.level;

  下面这句话不太理解:

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

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

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

  1. package net.mindview.operators;
  2.  
  3. class Letter{
  4. char c;
  5. }
  6.  
  7. public class PassObject {
  8. static void f(Letter y){
  9. y.c = 'z';
  10. }
  11. public static void main(String[] args) {
  12. Letter x = new Letter();
  13. x.c = 'a';
  14. System.out.println("1: x.c="+x.c);
  15. //传递的时x所指向的引用
  16. f(x);
  17. System.out.println("1: x.c="+x.c);
  18. }
  19. }

4. 自动递增和递减

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

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

  1. package net.mindview.operators;
  2. import static net.mindview.util.Print.*;
  3. public class AutoInc {
  4.  
  5. public static void main(String[] args) {
  6. int i = ;
  7. println("i:"+i);
  8. println("++i:"+ ++i);//先执行运算, 在生成值
  9. println("i:"+i);
  10. println("i++:"+ i++);//先生成值, 在运算
  11. println("i:"+i);
  12. }
  13.  
  14. }

输出结果:

  1. i:
  2. ++i:
  3. i:
  4. i++:
  5. i:

5. 对象的等价性

  

  1. package net.mindview.operators;
  2.  
  3. public class EqualsMethod {
  4.  
  5. public static void main(String[] args) {
  6. Integer n1 = new Integer();
  7. Integer n2 = new Integer();
  8. System.out.println(n1 == n2);
  9. System.out.println(n1 != n2);
  10. }
  11. }
    /*
      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

java编程思想第四版第三章要点总结的更多相关文章

  1. java编程思想第四版第三章要点习题

    使用"简短的" 和正常的 打印语句来编写一个程序 package net.mindview.util; public class Print { /** * 不带有回车 * @pa ...

  2. java编程思想第四版第十一章习题

    第一题 package net.mindview.holding.test1; import java.util.ArrayList; import java.util.List; /** * 沙鼠 ...

  3. Java编程思想第四版*第七章*个人练习

    欢迎加群:239063848 成团的笔记:该组仅用于技术共享和交流,问题和答案公布 潘基聊天.禁止广告.禁止招聘-- 练习1:(2)创建一个简单的类.第二个类中,将一个引用定义为第一个类的对象.运用惰 ...

  4. java编程思想第四版第六章习题

    (略) (略) 创建两个包:debug和debugoff,他们都包含一个相同的类,该类有一个debug()方法,第一个版本显示发送给控制台的String参数,而第二版本什么也不做,使用静态import ...

  5. java编程思想第四版第十三章字符串 总结

    1. String和StringBulider的使用 通过书中介绍, 我们得知如下结论: 当使用+连接符将字符串进行拼接的时候, 编译器会进行自动优化为使用StringBuilder连接字符串. 当在 ...

  6. java编程思想第四版第十三章字符串 习题

    fas 第二题 package net.mindview.strings; import java.util.ArrayList; import java.util.List; /** * 无限循环 ...

  7. java编程思想第四版第七章总结

    1. 实现类的复用通常有两种方式 组合:在新的类中产生现有类的对象 继承:按照现有类的类型来创造新类 2. 一个特殊的方法toString() 在非基本类型的对象中, 都有toString()方法 当 ...

  8. java编程思想第四版第六章总结

    1. 代码重构 为什么f要代码重构 第一次代码不一定是完美的, 总会发现更优雅的写法. 代码重构需要考虑的问题 类库的修改不会破坏客户端程序员的代码. 源程序方便扩展和优化 2. 包 创建一个独一无二 ...

  9. java编程思想第四版第五章习题

    创建一个类, 它包含一个未初始化的String引用.验证该引用被Java初始化成了null package net.mindview.initialization; public class Test ...

随机推荐

  1. 基于常规DNS隧道进行的tcp端口转发dns2tcp的使用

    0x01 安装Dns2TCP dns2tcp 是一个利用DNS隧道转发TCP连接的工具,使用C语言开发. sudo apt-get install dns2tcp 0x02配置dns2tcp 配置DN ...

  2. 机器学习:eclipse中调用weka的Classifier分类器代码Demo

    weka中实现了很多机器学习算法,不管实验室研究或者公司研发,都会或多或少的要使用weka,我的理解是weka是在本地的SparkML,SparkML是分布式的大数据处理机器学习算法,数据量不是很大的 ...

  3. hadoop-3.1.2启动httpfs

    最近有一个需求,要求使用httpfs读取数据,一开始看到httpfs这个词,第一感觉是不是多了个f,是不是https,后来百度一下,其实不然. httpfs其实是使用http协议访问hdfs文件系统: ...

  4. windows 系统对应的内核版本和自带 iis 版本

    Windows 10 10.0* Windows Server 2016 10.0* Windows 8.1 6.3* Windows Server 2012 R2 6.3* Windows 8 6. ...

  5. Intellij IDEA 常用的插件 建议全装

    介绍几个常用的插件 Alibaba Java Coding Guidelines https://plugins.jetbrains.com/plugin/10046-alibaba-java-cod ...

  6. IDEA+docker,进行远程漏洞调试(weblogic)

    用于学习java漏洞debug. 以weblogic为例. cve-2017-10271 weblogic:10.3.6 环境搭建 拿docker为例 https://github.com/vulhu ...

  7. Linux下终端字体颜色设置方法

    颜色=\033[代码;前景;背景m 如:\033[1;32;40m表示高亮显示字体为绿色,背景色为黑色 颜色=\[\033[代码;前景;背景m\] echo -e "this is a \0 ...

  8. 在Eclipse中开发MapReduce程序

    一.Eclipse的安装与设置 1.在Eclipse官网上下载eclipse-jee-oxygen-3a-linux-gtk-x86_64.tar.gz文件并将其拷贝到/home/jun/Resour ...

  9. unity 导出模型

    不论unity是否运行,到处其中的模型方法: 1.如下图建立相关文件目录,并建立如下脚本 2.脚本代码 using UnityEngine; using UnityEditor; using Syst ...

  10. django-表单之手动渲染(五)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...