Java : Basic

15 篇文章 0 订阅

Java基本介绍

The Java™ Programming Language is a general-purpose, concurrent, strongly typed, class-based object-oriented language. It is normally compiled to the bytecode instruction set and binary format defined in the Java Virtual Machine Specification.

面向对象向编程的三大特性:

  • 封装
  • 继承
  • 多态

JVM:Javac之后的字节码是一样的,但不同平台下JVM不同,通过各平台的JVM解释之后就可以在相应平台运行,造就了java的跨平台特性,“一次编译,到处运行”。
Java不仅仅是一门编程语言,还有背后博大的开源生态,而且Java本身也在不断进步,尤其在Java 1.5后增加了许多的新特性
Oracle官网显眼位置的Java往往都是最新的,想下载特定历史版本,参考:
https://jingyan.baidu.com/article/9989c746064d46f648ecfe9a.html

学习Java**多看源码!多看源码!多看源码!**结合API doc,学习源码的编程风格和设计思想、算法应用!其他框架亦如是!

Java基本概念

标识符

26个英文大小写,数字0~9,符号_及$组成;不能用数字开头,不能与关键字重复。
转义字符:
\n 换行(LF)
\f 换页(FF)
\r 回车(CR)
\t 制表符
\
\’
\”

注释

“//”、“/* */”同C语言中类似;
“/** */” javadoc注释;
作用:注解说明&&调试程序;

常量

关键字:final,如Math类中对常量的定义:

public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;

Java中定义常量的几种方式
小数:单精度、双精度;
布尔型(boolean):true or false;
字符常量:单引号’’;
字符串常量:双引号” ”;
Null型:null

(变量)数据类型

概念:内存中的一个存储区域;有名称(变量名)和类型(数据类型);数据可以在类型允许范围内变化。
Java为强类型(Strongly typed)的语言:
① 变量必须声明后使用;
② 变量赋值必须与类型匹配。

  • 基本类型(primitive)
    8种,包括整型(byte/short/int/long)、字符型(char)、浮点型(float/double)、布尔型(boolean)。

    Java基本数据类型

    • 整型默认值为0,boolean默认为false
    • 关于Java中boolean类型的处理:
      《Java虚拟机规范》一书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。由此可见, 《Java虚拟机规范》中给出了4个字节,和boolean数组1个字节的定义,具体还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的。这其实是运算效率和存储空间之间的博弈。
    • 注意不像C/C++,java中没有无符号数,Java中表示的都是有符号数。
    • 注意整型表示范围: Integer.MAX_VALUE = 2147483647,再大就溢出了,可以用long型,若long型仍然溢出,可以考虑用数组模拟数的运算,这在大数乘法中有应用。
    • 八种基本类型都有对应的包装类型,Java中基本类型与对应的包装类型之间可以自动打包(auto-boxing)拆包(unboxing)。关于包装类型,详情可参见:
      http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html
    • 自动类型转换:占内存小的自动转换为占内存大的类型;自动类型提升;
      强制类型转换:高位的几个字节丢弃;
  • 引用类型(reference)
    引用一个对象的变量; 类(class)、接口(interface)。 若不赋初值,默认为null。
    实际上引用类型变量即为一个指针,只是java中不再使用这个说法;可以形象理解为引用类型的变量存储一个对象的遥控器;
    注意: 重点关注Java中的String类
    众所周知Java只支持单继承,但要想实现多继承也有方法参考: Java实现多继承的方式

  • Enum类型
    jdk1.5引入了枚举类型,
进制
  • 二进制
    二进制的理解可以类比十进制,思路都是一样的。
    Program:Java中任意进制之间的转换。
    注意:正数的二进制符号位为0,负数符号位为1。
    正数的二进制表示:原码、反码、补码都是一样的;
    负数的二进制表示:对应的正数二进制(原码)各位取反(反码)再加一(补码);
    参考: http://blog.csdn.net/qq1012421396/article/details/62058673
  • 八进制:用0开头;三个二进制;
  • 十进制
  • 十六进制:0x开头;四个二进制;
运算符
  • 比较运算符
  • 逻辑运算符:连接两个boolean类型表达式
    与&,或|,非!,&&(前后两个操作数都是true才返回true),异或^
  • 算术运算符
  • 赋值运算符
  • 取模运算符注意取模与取余的区别
  • 位运算符

    • & 按位与: 6&3 = 110 & 011 =2
    • | 按位或; 6|3 = 110 & 011=7
    • ~ 按位非: ~6 = ~110=1
      负数的“非”运算过程:负数原码—除符号位外取反—>反码—加1—>补码—取反—>正数;
    • ^ 按位异或: 异或同一个数两次,结果还是这个数; 3^6=110 ^ 011=
    • << 左移运算符:左移n位即为乘以2的n次方;
      左移时左边n位丢掉,右边补0就可以了;
    • >> 右移运算符:右移n位即为除以2的n次方;
      右移时注意: 若为正数,右边n位丢掉,左边补0就可以了;若为负数,右边n为丢掉,左边补要补1。
    • >>>无符号右移:忽略符号位,高位出现的空位用0补

    tips:“==”与“equal”
    “==”比较两个primitive类型变量是否相等,或者引用类型变量是否指向堆中的同一个对象(两个对象的内存地址),也就是说“==”只是用来比较两个变量的字符组合,只要一样即判为相等;
    “equals()”方法在Object类中是比较两个对象的地址是否相等;但在Integer以及String等类中已经将eaqual()方法重写,为比较两个数大小是否相等(内容是否相同);
    与eaquls()方法密切相关的还有hashcode()方法,参见:浅谈Java中的hashcode方法
    Object的equals()方法容易抛出空指针异常,推荐使用java.util.Objects#equals(JDK7引入的工具类)。

一些关键字的理解

transient:
final:
this:
super:
类修饰符:private、默认、protected、public访问权限依次升高。一般private和public没问题,friendly和protected可能会有人搞混,其实只要记住默认(friendly)同一个包内是可以访问的,不管是不是子类,而protected主要是为了保护不同包中子类的访问权限。


这里写图片描述

参考资料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值