thinkinginjava学习笔记02_对象
对象
1. 对象通过一个引用来操作,但是java中的对象是按值传递的,基本上可以在操作中认为对象本身,在内部结构中仍然要记得是对象实体的引用;如:String s = "abcd" ;这个语句中,s并不是String对象:"abcd"本身,而是表示一个String对象的引用,这里即对象s的引用,但是当你使用s的时候,传递的是"abcd"这个对象,也就是引用的值;注意只能使用双引号;
2. 使用new创建新的对象(除了上面提到字符串可以使用一串带引号的文本直接创建之外),如:new String("abcd") ; 并且使用一个表示该对象类型的引用来给这个对象做命名(否则该对象将没有持久性,因为引用计数为0的对象会被垃圾回收机制回收),如:String s = new String("abcd") ;
当一个对象被创建时,对象引用存储于堆栈(stack)中,而对象的实体存储在堆(heap)中,在堆中的内容具有灵活的生命周期和存储分配,但是需要额外的存储分配和清理时间;
3. 除了对象引用,java中的基本类型也存放在栈(stack)中,基本类型创建时,直接创建变量本体,而非引用创建,变量存在于栈中,使用效率比较高;如:int a = 123; 创建一个整形变量123,a的内容即123;每个基本类型也有对应的包装器类型,使用new来创建包装器类型的变量时,和对象的创建一样,如:int a = new Integer(123);此时,a是整形变量123的引用,123存放在堆中,而a作为123的引用存放在栈中;
特殊的,String并不是基本类型,由于string的长度是可变的,而所有java中的基本类型,长度都是固定的,并不会随着硬件和操作系统而改变;
java中支持两个高精度运算的包装器类型:BigInteger和BigDecimal,这两个类型使用时没有长度限制,使用时自动扩展,相应的,运算速度会比较慢(ACM的同学用的高精度计算大概就是其实现原理了);BigDecimal类使用的是十进制浮点数,不存在精度的问题;
java中的基本类型有:
整形:byte/short/int/long; 长度分别为:1/2/4/8字节;
整形默认类型是int,使用long类型时,需要在末尾添加L;
浮点型:float/double;长度分别为:4/8字节;
浮点型默认为double,使用float类型时,需要在末尾添加F;
逻辑性:boolean;长度为:1/8字节,即一个位;
字符型:char;长度为:2个字节
对应的包装器类型名字均为首字母大写的同名单词;
4. 对象的作用域由花括号:{}来界定,java中不支持使用一个较大作用域将变量隐藏的做法;
5. 使用class关键字创建类:class ATypeName { /*pass*/ };
定义了类之后即可在类中设定两种类型的元素:字段(数据)、方法;字段可以是一个基本类型(不必要初始化,java会确保有一个默认值,即将所在内存清0),也可以是一个具体对象的引用(必须是具体的对象引用);每个对象都有用来存储字段的空间,普通的字段不能在对象间共享。通过点号来访问对象中的成员;
在局部变量中(并非是类的一个字段),java不会初始化基本类型;使用未初始化的变量在java中是一个错误;
一般命名中,类的每个单词首字母都是大写;
6. 方法
java中没有单独的函数,方法只能作为类的一部分创建,并且只能通过对象访问(除了静态方法等);方法定义时,使用以下形式:
ReturnType methodName(/* Argument list */){
/*Method body*/
}
调用一个方法时,需要传递需要的参数,参数列表中指定了参数需要什么类型的对象,必须指定每个所传递对象的类型以及名字,方法调用时,传递的是对象的引用,并且引用的类型必须正确;可以使用一个对象存储返回值,该对象的类型必须和返回值类型兼容(不一定一样);
方法一般命名时,第一个单词首字母小写;
猜测:java中的方法应该存在于类空间中,即所有的对象共享相同的方法实体;
7. 静态数据和方法
通过static关键字申明一个静态数据或者方法,不仅实例化后的对象可以访问,也可以使用类名直接访问;不论是静态数据和方法,所有对象都共享同样的实体,当一个对象对静态数据做出改变,其他对象访问该静态数据也发生变化;
8. java程序的构成
每个java程序必须存在一个类和文件名相同,并且该类中存在一个main()方法:
public static main(String[] args){
}
java使用先编译后解释的方式来实现跨平台;java程序首先使用javac将其编译成字节码(.class),然后使用java命令解释该字节码;
通过javac命令将程序编译成字节码,再通过java命令运行;在这之前,首先需要配置环境变量(以osx为例):
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$PWD:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
9. 注释和解释文档
java中可以使用c语言风格注释;
java有一套文档维护工具:javadoc;javadoc可以查找程序中的特殊注释标签,不仅可以解析由这些标签标记的信息,还可以将注释的类名或方法名抽取出来。除了注释的内容,java还使用了以@开头的文档标签,javadoc识别这些注释和标签,并且自动生成程序文档;
javadoc共有三种文档:类、域、方法;所有的文档都在相应内容的定义之前,如类注释正好在类定义之前;javadoc只会为public和protected进行文档注释,而忽略private;
javadoc生成一系列html文件,其中打开以ClassName.html命名的网页即可看到生成的文档;
感觉比较重要的标签:@param;@return;@throws;
thinkinginjava学习笔记02_对象的更多相关文章
- Python学习笔记_Python对象
Python学习笔记_Python对象 Python对象 标准类型 其它内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比較 对象身份比較 布尔类型 ...
- JavaScript:学习笔记(8)——对象扩展运算符
JavaScript:学习笔记(8)——扩展运算符 对象的扩展运算符 扩展运算符是三个点(...).用于取出参数对象的所有可遍历属性,然后拷贝到当前对象之中. 如上图所示,新建了一个对象a,然后通过扩 ...
- 【cocos2d-x 3.x 学习笔记】对象内存管理
内存管理 内存管理一直是一个不易处理的问题.开发人员必须考虑分配回收的方式和时机,针对堆和栈做不同的优化处理,等等.内存管理的核心是动态分配的对象必须保证在使用完成后有效地释放内存,即管理对象的生命周 ...
- es6学习笔记-proxy对象
前提摘要 尤大大的vue3.0即将到来,虽然学不动了,但是还要学的啊,据说vue3.0是基于proxy来进行对值进行拦截并操作,所以es6的proxy也是要学习一下的. 一 什么是proxy Prox ...
- Python核心编程--学习笔记--4--Python对象
现在开始学习Python语言的核心部分.首先了解什么是Python对象,然后讨论最常用的内建类型,接下来讨论标准类型运算符和内建函数,之后给出对标准类型的不同分类方式,最后提一提Python目前还不支 ...
- thinkinginjava学习笔记07_多态
在上一节的学习中,强调继承一般在需要向上转型时才有必要上场,否则都应该谨慎使用: 向上转型和绑定 向上转型是指子类向基类转型,由于子类拥有基类中的所有接口,所以向上转型的过程是安全无损的,所有对基类进 ...
- thinkinginjava学习笔记06_复用类
MarsEdit粘代码好麻烦,所有代码交给github:https://github.com/lozybean/MyJavaLearning 复用一个类常用的两种方式:组合.继承: 组合 将对象引用置 ...
- thinkinginjava学习笔记04_初始化与清理
java沿用了c++的构造器,使用一个和类名完全一样的方法作为类的构造器,可以有多个构造器来通过不同的参数进行构造,称为重载:不仅是构造器可以重载,其他方法也一样通过不同的形参以及不同的返回值来实现重 ...
- thinkinginjava学习笔记01_导论
初学java,希望旅途愉快 :) 类型决定对象的接口,(有人认为类是类型的特定实现),接口确定对象所能发出的请求(消息),满足请求的代码和隐藏的数据一起构成实现: 对象设计时,应该很好地完成一项任务 ...
随机推荐
- CI框架使用PHPmailer发送邮件找回密码
之前用PHP+Mysql+jQuery结合ThinkPHP做了一个用户验证邮箱找回密码功能<ThinkPHP之PHP+Mysql+jQuery发送邮箱找回密码>,现在分享一下用CI框架结合 ...
- mac ox下android 通过battery-historian进行电量分析
简单介绍下如何用battery-historian进行电量分析,因为battery-hostorian是基于go语言的框架,所以需要安装go 1.安装go 2.配置go环境变量到.bash_profi ...
- mac mono Fiddler.exe启动失败
mono version 5.4 fiddler version 4.6 启动fiddler:mono Fiddler.exe 启动报错 WARNING: The Carbon driver has ...
- PHP中的会话控制
了解HTTP(超文本传输协议)可以知道,它采用请求与响应的模式,最大的特点就是无连接无状态. 无连接:每次连接仅处理一个客户端的请求,得到服务器响应后,连接就结束了 无状态:每个请求都是独立的,服务器 ...
- 独立安装WAMP
安装apache 获得apache安装软件: 建议去官网下载: www.apache.org 双击执行: 进入欢迎界面 点击"next"进入到协议界面 接收协议点击"ne ...
- iWeb峰会(HTML5峰会)2015年7月19日上海站会后感想
上周日专门从南京跑到上海參加了iWeb峰会(HTML5峰会),感觉这一天去的挺值的.几个演讲都挺精彩,干货不少啊. 总体感觉随着2014年HTML5标准的终于定稿,最近HTML5 ...
- ITM事件直接接收并解析
之前在实施一个监控项目时.客户由于买了IBM的小机.当前就赠送了TIVOLI的系统监控软件一套,客户也在他们的生产环境中部署了ITM的监控.由于没有购买IBM的netcool,无法集中管理告警事件,请 ...
- ajax接收json
l 什么是json? l Json和xml比较 l Ajax如何使用JSON l Ajax接收json响应案例 什么是json? JSON (JavaScript Object Notation) 是 ...
- AJAX跨域问题解决---后台解决
对于ajax请求数据,经常出现一个坑,防不胜防.今天突然找到一个很好的解决办法,直接在后台设置资源共享就可以了. 代码为:response.raw().setHeader("Access-C ...
- 为WebClient增加Cookie的支持
我们经常会在应用程序中使用到WebClient模拟访问网站资源并且进行处理,如果多次访问之间我们希望为他们保存Cookie,换句话说,第一个请求产生的Cookie能自动带到第二个请求的话,可以通过自定 ...