java编程思想第四版第三章要点总结
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
- fasfasdf
- fasdfads
java编程思想第四版第三章要点总结的更多相关文章
- java编程思想第四版第三章要点习题
使用"简短的" 和正常的 打印语句来编写一个程序 package net.mindview.util; public class Print { /** * 不带有回车 * @pa ...
- java编程思想第四版第十一章习题
第一题 package net.mindview.holding.test1; import java.util.ArrayList; import java.util.List; /** * 沙鼠 ...
- Java编程思想第四版*第七章*个人练习
欢迎加群:239063848 成团的笔记:该组仅用于技术共享和交流,问题和答案公布 潘基聊天.禁止广告.禁止招聘-- 练习1:(2)创建一个简单的类.第二个类中,将一个引用定义为第一个类的对象.运用惰 ...
- java编程思想第四版第六章习题
(略) (略) 创建两个包:debug和debugoff,他们都包含一个相同的类,该类有一个debug()方法,第一个版本显示发送给控制台的String参数,而第二版本什么也不做,使用静态import ...
- java编程思想第四版第十三章字符串 总结
1. String和StringBulider的使用 通过书中介绍, 我们得知如下结论: 当使用+连接符将字符串进行拼接的时候, 编译器会进行自动优化为使用StringBuilder连接字符串. 当在 ...
- java编程思想第四版第十三章字符串 习题
fas 第二题 package net.mindview.strings; import java.util.ArrayList; import java.util.List; /** * 无限循环 ...
- java编程思想第四版第七章总结
1. 实现类的复用通常有两种方式 组合:在新的类中产生现有类的对象 继承:按照现有类的类型来创造新类 2. 一个特殊的方法toString() 在非基本类型的对象中, 都有toString()方法 当 ...
- java编程思想第四版第六章总结
1. 代码重构 为什么f要代码重构 第一次代码不一定是完美的, 总会发现更优雅的写法. 代码重构需要考虑的问题 类库的修改不会破坏客户端程序员的代码. 源程序方便扩展和优化 2. 包 创建一个独一无二 ...
- java编程思想第四版第五章习题
创建一个类, 它包含一个未初始化的String引用.验证该引用被Java初始化成了null package net.mindview.initialization; public class Test ...
随机推荐
- 基于常规DNS隧道进行的tcp端口转发dns2tcp的使用
0x01 安装Dns2TCP dns2tcp 是一个利用DNS隧道转发TCP连接的工具,使用C语言开发. sudo apt-get install dns2tcp 0x02配置dns2tcp 配置DN ...
- 机器学习:eclipse中调用weka的Classifier分类器代码Demo
weka中实现了很多机器学习算法,不管实验室研究或者公司研发,都会或多或少的要使用weka,我的理解是weka是在本地的SparkML,SparkML是分布式的大数据处理机器学习算法,数据量不是很大的 ...
- hadoop-3.1.2启动httpfs
最近有一个需求,要求使用httpfs读取数据,一开始看到httpfs这个词,第一感觉是不是多了个f,是不是https,后来百度一下,其实不然. httpfs其实是使用http协议访问hdfs文件系统: ...
- 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. ...
- Intellij IDEA 常用的插件 建议全装
介绍几个常用的插件 Alibaba Java Coding Guidelines https://plugins.jetbrains.com/plugin/10046-alibaba-java-cod ...
- IDEA+docker,进行远程漏洞调试(weblogic)
用于学习java漏洞debug. 以weblogic为例. cve-2017-10271 weblogic:10.3.6 环境搭建 拿docker为例 https://github.com/vulhu ...
- Linux下终端字体颜色设置方法
颜色=\033[代码;前景;背景m 如:\033[1;32;40m表示高亮显示字体为绿色,背景色为黑色 颜色=\[\033[代码;前景;背景m\] echo -e "this is a \0 ...
- 在Eclipse中开发MapReduce程序
一.Eclipse的安装与设置 1.在Eclipse官网上下载eclipse-jee-oxygen-3a-linux-gtk-x86_64.tar.gz文件并将其拷贝到/home/jun/Resour ...
- unity 导出模型
不论unity是否运行,到处其中的模型方法: 1.如下图建立相关文件目录,并建立如下脚本 2.脚本代码 using UnityEngine; using UnityEditor; using Syst ...
- django-表单之手动渲染(五)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...