1java基础
1.java特性 详细解读
(1)Easy:Java的语法比C++的相对简单,另一个方面就是Java能使软件在很小的机器上运行,基础解释其和类库的支持的大小约为40kb,增加基本的标准库和线程支持的内存需要增加125kb.
小巧:由于Java的设计是要在小的计算机上运行,作为一种编程语言来说其系统是相对较小的。它能有效地在4MB以上RAM的PC机上运行。Java翻译器只占用几百KB。这种翻译器对Java的平台无关性和可移植性是可靠的。由于Java很小,它对内存很小的计算机,如基于Java的PC机,以及电视机、烤箱、电话机及家用计算机等,是很理想的。
(2)分布式:Java带有很强大的TCP/IP协议族的例程库,Java应用程序能够通过URL来穿过网络来访问远程对象,由于servlet机制的出现,使Java编程非常的高效,现在许多的大的web server都支持servlet.
(3)OO:面向对象设计是把重点放在对象及对象的接口上的一个编程技术.其面向对象和C++有很多不同,在与多重继承的处理及Java的原类模型.
(4)健壮特性:Java采取了一个安全指针模型,能减小重写内存和数据崩溃的可能型。Java编译器能够检测许多在其他语言中仅在运行时才能够检测出来的问题。异常处理机制:java把c++里面很多警告变成错误 ,这样设计的原则是为了让劣质代码不能写出来。异常的3个种类 ,检查异常,运行时异常,错误。对于可能出现异常的代码,有两种处理办法:第一、在方法中用try...catch语句捕获并处理异常,catach语句可以有多个,用来匹配多个异常。第二、对于处理不了的异常或者要转型的异常,在方法的声明处通过throws语句抛出异常。
(5)安全:Java用来设计网路和分布系统,这带来了新的安全问题,Java可以用来构建防病毒和防攻击的System.事实证明Java在防毒这一方面做的比较好.Java没有指针。
(6)中立体系结构:Java编译其生成体系结构中立的目标文件格式可以在很多处理器上执行,编译器产生的指令字节码(Javabytecode)实现此特性,此字节码可以在任何机器上解释执行.
跨平台性:跨平台的原理是:Java代码通过编译变成一个叫字节码的文件,它的格式是.class,可以被虚拟机JVM运行,可以看作现实中的翻译官,把字节码翻译给其他平台,实现代码在其他平台的运行,在不同的平台有不同的JVM。JVM可以理解成一个可运行Java字节码的虚拟计算机系统,它有一个解释器组件,可以实现Java字节码和计算机操作系统之间的通信。
编译和解释性:Java编译程序生成字节码文件,而不是通常的机器码(即二进制)。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地“搬运”程序到不同的平台和环境中。在一个解释性的环境中,程序开发的标准"链接"阶段大大消失了。如果说Java还有一个链接阶段,它只是把新类装进环境的过程,它是增量式的、轻量级的过程。因此,Java支持快速原型和容易试验,它将导致快速程序开发。这是一个与传统的、耗时的"编译、链接和测试"形成鲜明对比的精巧的开发过程。
(7)可移植性:Java中对基本数据结构类型的大小和算法都有严格的规定所以可移植性很好.
(8)多线程:Java处理多线程的过程很简单,Java把多线程实现交给底下操作系统或线程程序完成.所以多线程是Java作为服务器端开发语言的流行原因之一
(9)Applet和servlet:能够在网页上执行的程序叫Applet,需要支持Java的浏览器很多,而applet支持动态的网页,这是很多其他语言所不能做到的。
(10)GC垃圾回收:[Java GC]Java垃圾回收_HaveFerrair的博客-CSDN博客 GC又叫垃圾回收器,不再使用的内存空间应当进行回收,在C/C++等语言中,由程序员负责回收无用内存,Java语言消除了程序员回收无用内存空间的责任。JVM提供了一个系统线程,用于跟踪存储空间的分配情况,检查并释放那些可以被释放的存储空间。垃圾回收器在Java程序运行过程中自动启用,程序员无法精确控制和干预。
(11)快速:Java比典型的脚本语言大为有效,但它比C慢20倍。这对大多数应用是可接受的。不久的将来,代码生成器就可供利用了,这将使Java程序几近于用C或C++编写的程序那么快。
高性能:Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了"及时"编译程序,它能在运行时把Java字节码翻译成特定CPU(中央处理器)的机器代码,也就是实现全编译了,Java字节码格式设计时考虑到这些"及时"编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。
类库丰富:Java提供了很多丰富的内置类库,通过这些类库,可以简化开发者的程序设计工作,简化操作,同时缩短了项目开发时间
(12)可拓展性:继承、多态、动态绑定。
2.dos命令入门
dir 显示当前目录文件
md 创建目录
rd 删除目录
cd 切换目录 可以是绝对目录或者相对目录
cd .. 切换到上一级目录
cd \ 切换到根目录
cls 清屏
del 删除文件
exit 退出dos界面
ipconfig 显示ip相关配置
3.Java注释
单行注释 //
多行注释 /* */
doc注释 /** */
4.阿里巴巴开发手册命名练习
练习稍后再做。
1. 【强制】 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例: _name / __name / $Object / name_ / name$ / Object$
2. 【强制】 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式 也要避免采用。 正例: alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。 反例: DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3
3. 【强制】类名(以及接口名)使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:DO / BO / DTO / VO / AO 正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion 反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion
4. 【强制】方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。 正例: localValue / getHttpMessage() / inputUserId
5. 【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。 正例: MAX_STOCK_COUNT 反例: MAX_COUNT
6. 【强制】抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类命名以它要测试的类的名称开始,以 Test 结尾。
7. 【强制】中括号是数组类型的一部分,数组定义如下:String[] args; 反例:使用 String args[]的方式来定义。
8. 【强制】POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。 反例:定义为基本数据类型 Boolean isDeleted;的属性,它的方法也是 isDeleted(),RPC框架在反向解析的时候,“以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。
9. 【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用 单数形式,但是类名如果有复数含义,类名可以使用复数形式。 正例: 应用工具类包名为 com.alibaba.open.util、类名为 MessageUtils(此规则参考 spring 的框架结构)
10. 【强制】杜绝完全不规范的缩写,避免望文不知义。 反例: AbstractClass“缩写”命名成 AbsClass;condition“缩写”命名成 condi,此类 随意缩写严重降低了代码的可阅读性。
11. 【推荐】如果使用到了设计模式,建议在类名中体现出具体模式。 说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计思想。 正例:public class OrderFactory; public class LoginProxy; public class ResourceObserver;
12. 【推荐】接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁性,并加上有效的 Javadoc 注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。 正例:接口方法签名:void f(); 接口基础常量表示:String COMPANY = "alibaba"; 反例:接口方法定义:public abstract void f(); 说明:JDK8 中接口允许有默认实现,那么这个 default 方法,是对所有实现类都有价值的默 认实现。
13. 接口和实现类的命名有两套规则: 1)【强制】对于 Service 和 DAO 类,基于 SOA 的理念,暴露出来的服务一定是接口,内部的实现类用 Impl 的后缀与接口区别。 正例:CacheServiceImpl 实现 CacheService 接口。 2)【推荐】如果是形容能力的接口名称,取对应的形容词做接口名(通常是–able 的形式)。 正例:AbstractTranslator 实现 Translatable。
14. 【参考】枚举类名建议带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。 说明:枚举其实就是特殊的常量类,且构造方法被默认强制是私有。 正例:枚举名字:DealStatusEnum,成员名称:SUCCESS / UNKOWN_REASON。
15. 【参考】各层命名规约: A) Service/DAO 层方法命名规约 1) 获取单个对象的方法用 get 做前缀。获取多个对象的方法用 list 做前缀。 3) 获取统计值的方法用 count 做前缀。 4) 插入的方法用 save(推荐)或 insert 做前缀。 5) 删除的方法用 remove(推荐)或 delete 做前缀。 6) 修改的方法用 update 做前缀。 B) 领域模型命名规约 1) 数据对象:xxxDO,xxx 即为数据表名。 2) 数据传输对象:xxxDTO,xxx 为业务领域相关的名称。 3) 展示对象:xxxVO,xxx 一般为网页名称。 4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。
5.C语言和Java数据类型对比
数据类型 | C语言大小(32位系统) | Java大小(可移植性,跨平台大小不变) |
byte | 1字节 | |
char | 1字节 | 2字节 |
short | 2字节 | 2字节 |
int | 4字节 | 4字节 |
float | 4字节 | 4字节 |
long | 4字节,longlong8字节 | 8字节 |
double | 8字节 | 8字节 |
bool | boolean,1位 |
6.练习
b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。 Java中的byte,short,char进行计算时都会提升为int类型。
java中byte类型为一个字节,表示的范围是[-128,127],此时越界。
强制转换为byte类型时,由于java采用补码方式存储数据,将32位的int转化成8位的byte省略前24位(0),130的最后8位是10000010,补码转换成原码需要首位不变,其他位翻转最后加1,即11111101+1,即11111110=-126
7.变量/常量
对于变量(声明在方法内的变量) 在第一次使用之前 必须进行初始化(赋值)
变量的初始化:在声明时初始化 在声明之后使用之前进行初始化
变量的本质:是内存中一块存储单元
常量:常量可以在声明的同时赋值 或者在声明之后赋值 但是无论何时赋值 都只能赋值一次,也是内存中一块区域
常量除过我们所说的使用final修饰的变量 字面常量 2,5,a ,b “aaa”
8.Java保留字:goto和const
保留字是指在其他语言中的关键字,目前java还没有将其作为关键字使用,但以后可能使用,避免造成错误。
9.Java命名规则
标识符可以用数字、字母、汉字、下划线、美元符号表示。数字不能作为开头。不能包含Java的保留字和关键字。命名的原则是见名知意。
最新文章
- Mac上自带的Apache介绍
- lnmp 设置ci pathinfo和去掉index.php
- APK签名是如何生成的
- fibonacci数列从a到b的个数
- Sandbox 文件存放规则
- jQuery用户从服务器端注册登录
- Lua快速入门
- MVC4 WebAPI(二)——Web API工作方式
- 关于WinCE流接口驱动支持10以上的端口号(COM10)
- DB2命令大全
- 尝鲜delphi开发android/ios_环境搭建
- OC中类别、扩展、协议与托付
- IntelliJ IDEA 13.1.4新建java web项目
- 20165223《网络对抗技术》Exp0 Kali的安装
- H5项目常见问题及注意事项,视频全屏,定位,屏幕旋转和触摸,偏页面重构向 来源joacycode的github
- LinkedList 实现 Queue
- months_between()用法
- 一个简单的二叉搜索树(C++实现)
- sendfile Linux函数
- postgresql----根据现有表创建新表
热门文章
- CVPR2020:点云弱监督三维语义分割的多路径区域挖掘
- leetcode:在 D 天内送达包裹的能力
- Centos7拓展磁盘(逻辑增加)
- JVM调优的反思与总结
- 【模板】关于vector的lower_bound和upper_bound以及vector基本用法 STL
- Linux命令大全之挂载命令
- Windows内核开发-Windows内部概述-2-
- 创建react项目并集成eslint/prettier/commit-lint
- Bean初始化操作initMethod、@PostConstruct和InitializingBean
- 循序渐进BootstrapVue,开发公司门户网站(5)--- 使用实际数据接口代替本地Mock数据