java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java基础知识

新手了解java基础知识(一)

作者:保护眼睛

这篇文章主要介绍了Java基础知识,本文介绍了Java语言相关的基础知识、历史介绍、主要应用方向等内容,需要的朋友可以参考下,希望对你有所帮助

1.java基础

1.1Java历史

Java:由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。Java语言是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由当时任职太阳微系统的詹姆斯·高斯林(James Gosling)等人于1990年代初开发,它最初被命名为Oak。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

在1999年3月和7月,分别有JDK 1.2.1和JDK 1.2.2两个小版本发布。

自从JDK 1.3开始,Sun维持了一个习惯:大约每隔两年发布一个JDK的主版本,以动物命名,期间发布的各个修正版本则以昆虫作为工程名称。

JDK 1.4有两个后续修正版:

JDK 1.6发布以后,由于代码复杂性的增加、JDK开源、开发JavaFX、经济危机及Sun收购案等原因,Sun在JDK发展以外的事情上耗费了很多资源,JDK的更新没有再维持两年发布一个主版本的发展速度。JDK 1.6到目前为止一共发布了37个Update版本,最新的版本为Java SE 6 Update 37,于2012年10月16日发布。

从JDK 1.7最开始的功能规划来看,它本应是一个包含许多重要改进的JDK版本,其中的Lambda项目(Lambda表达式、函数式编程)、Jigsaw项目(虚拟机模块化支持)、动态语言支持、GarbageFirst收集器和Coin项目(语言细节进化)等子项目对于Java业界都会产生深远的影响。在JDK 1.7开发期间,Sun公司由于相继在技术竞争和商业竞争中都陷入泥潭,公司的股票市值跌至仅有高峰时期的3%,已无力推动JDK 1.7的研发工作按正常计划进行。为了尽快结束JDK 1.7长期“跳票”的问题,Oracle公司收购Sun公司后不久便宣布将实行“B计划”,大幅裁剪了JDK 1.7预定目标,以便保证JDK 1.7的正式版能够于2011年7月28日准时发布。“B计划”把不能按时完成的Lambda项目、Jigsaw项目和Coin项目的部分改进延迟到JDK 1.8之中。最终,JDK 1.7的主要改进包括:提供新的G1收集器(G1在发布时依然处于Experimental状态,直至2012年4月的Update 4中才正式“转正”)、加强对非Java语言的调用支持(JSR-292,这项特性到目前为止依然没有完全实现定型)、升级类加载架构等。

到目前为止,JDK 1.7已经发布了9个Update版本,最新的Java SE 7 Update 9于2012年10月16日发布。从Java SE 7 Update 4起,Oracle开始支持Mac OS X操作系统,并在Update 6中达到完全支持的程度,同时,在Update 6中还对ARM指令集架构提供了支持。至此,官方提供的JDK可以运行于Windows(不含Windows 9x)、Linux、Solaris和Mac OS平台上,支持ARM、x86、x64和Sparc指令集架构类型。

1.2Java特点

1.2.1 简单性

Java语法是C++语法的一个“纯净版本”。这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等等。不仅如此,Java开发环境远远超出大多数其他编程语言的开发环境。

1.2.2 面向对象

什么是面向对象? 这里我们用木匠打一个比方,一个“面向对象”的木匠始终关注的是所制作的椅子,第二位才是所使用的工具;而一个“非面向对象的”木匠首先考虑的是所使用的工具。

在Java的世界里,一切皆对象。

Java的面向对象特性与C++旗鼓相当,与C++的主要不同点在于多重继承。在Java中,取而代之的是更简单的接口概念。而且与C++相比,Java提供了更丰富的运行时自省功能。

1.2.3 分布式(微服务)

比特科技Java有丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议。Java应用程序能够通过URL打开和访问网络上的对象,其便捷程度就好像访问本地文件一样。

1.2.4 健壮性

Java与C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性(对于曾经花费几个小时来检查由于指针bug而引起内存冲突的人来说,一定很喜欢Java的这一特性)。不仅如此,Java编译器能够检测许多在其他语言中仅在运行时才能够检测出来的问题。

1.2.5 安全性

Java适用于网络/分布式环境。为了达到这个目标,在安全性方面投入了大量的精力。使用Java可以构建防病毒、防篡改的系统

从一开始,Java就设计成能够防范常见的各种攻击:

1.2.6 体系结构中立

编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,这些编译后的代码就可以在许多处理器上运行。Java编译器通过生成与特定计算机体系结构无关的字节码指令来实现这一特性。精心设计的字节码不仅可以很容易的在任何机器上解释执行,而且还可以动态地翻译成本地机器代码

1.2.7 可移植性

与C/C++不同,Java规范中没有“依赖具体实现的地方”。基本数据类型的大小以及有关运算都做了明确的说明。例如,Java中的int永远是32位的整数,而在C/C++中,int可能是16位整数、32位整数,也可能是编译器提供商指定的其他大小。在Java中,数据类型具有固定的大小,这消除了代码移植时令人头疼的主要问题。

1.2.8 高性能

尽管对解释后的字节码性能已经比较满意,但在有些场合下可能需要更加高效的性能。字节码可以(在运行时刻)动态的翻译成对应运行这个应用的特定cpu的机器码。

1.2.9多线程

Java在当时很超前。它是第一个支持并发程序设计的主流语言。多线程可以带来更好的交互响应和实时行为。并发程序设计绝非易事,但是Java在这方面表现出色,可以很好的管理这个工作。

1.2.10 动态性

Java与C/C++相比更加具有动态性。它能够适应不断发展的环境。库中可以自由的添加新方法和实例变量,而对客户端没有任何影响。在Java中找出运行时类型信息十分简单(反射的特性,后续会学到)

1.3Java基本数据类型

内置数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

byte:

byte 数据类型是8位、有符号的,以二进制补码表示的整数;

最小值是 -128(-2^7);

最大值是 127(2^7-1);

默认值是 0;

byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;

例子:byte a = 100,byte b = -50。

short:

short 数据类型是 16 位、有符号的以二进制补码表示的整数

最小值是 -32768(-2^15);

最大值是 32767(2^15 - 1);

Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;

默认值是 0;例子:short s = 1000,short r = -20000。

int:

int 数据类型是32位、有符号的以二进制补码表示的整数;

最小值是 -2,147,483,648(-2^31);

最大值是 2,147,483,647(2^31 - 1);

一般地整型变量默认为 int 类型;

默认值是 0 ;

例子:int a = 100000, int b = -200000。

long:

long 数据类型是 64 位、有符号的以二进制补码表示的整数;

最小值是 -9,223,372,036,854,775,808(-2^63);

最大值是 9,223,372,036,854,775,807(2^63 -1);

这种类型主要使用在需要比较大整数的系统上;

默认值是 0L;

例子: long a = 100000L,Long b = -200000L。

"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。

float:

float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;

float 在储存大型浮点数组的时候可节省内存空间;

默认值是 0.0f;

浮点数不能用来表示精确的值,如货币;

例子:float f1 = 234.5f。

double:

double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;

浮点数的默认类型为double类型;

double类型同样不能表示精确的值,如货币;

默认值是 0.0d;

例子:double d1 = 123.4。

boolean:

boolean数据类型表示一位的信息;

只有两个取值:true 和 false;

这种类型只作为一种标志来记录 true/false 情况;

默认值是 false;

例子:boolean one = true。

char:

char类型是一个单一的 16 位 Unicode 字符;

最小值是 \u0000(即为 0);

最大值是 \uffff(即为 65535);

char 数据类型可以储存任何字符;

例子:char letter = ‘A';。

1.4例子

public class TestDemo {
public static void main(String[] args) {
            boolean flg = true;
            boolean flg2 = false;
            //没有0是假   非0是真
        /*int i = (int)flg;
        flg = (boolean) 10;*/
            //不要尝试布尔类型和其他数据类型进行转换
        }
        public static void main8(String[] args) {
            short sh = 10;//2  15
            System.out.println(sh);
        }
        public static void main7(String[] args) {
            byte b = 127;//1   -128 -  127
            int d = 2147483647;
            byte c = 10;
            byte e = 20;
            byte f = (byte)(c+e);// (byte) 强制类型转换
            //整型提升
            int i = 10;
            i = c;
            long l = 20;
            long i2 = i+l;//整型提升
        }
        //unicode  统一码
        public static void main6(String[] args) {
            String ch = "abc";
            char ch2 = 'a';//2
            System.out.println(ch2);
            char ch3 = '高';
            System.out.println(ch3);
            char ch4 = 97;
            System.out.println(ch4);
//        char ch5 = -9;  不能表示负数
//        System.out.println(ch5);
        }
        public static void main5(String[] args) {
            float f = 12.5f;//4
            System.out.println(f);
        }
        public static void main4(String[] args) {
       /* double d = 12.5;//8  CTR+SHIFT+/
        System.out.println(d);
        System.out.println(Double.MAX_VALUE);
        System.out.println(Double.MIN_VALUE);
        */
            //小数没有精确的   int a = 10;
            double a = 1.1;
            double b = 1.1;
            System.out.println(a*b);
            int c = 1;
            int d = 2;
            System.out.println(c/d);
        }
        public static void main3(String[] args) {
            long b = 10L;//8  可移植性
            System.out.println(Long.MAX_VALUE);
            System.out.println(Long.MIN_VALUE);
            System.out.println(b);
        }
        /**
         *
         * @param args
         */
        public static void main2(String[] args) {
            int a = 10;//局部变量
            //在Java当中  局部变量定义了之后一定要赋值
            //System.out.println(a);
        }
        public static void main1(String[] args) {
            //整型
            int a = 10;//4个字节
            System.out.println(Integer.MAX_VALUE);
            System.out.println(Integer.MIN_VALUE);
            int b = Integer.MAX_VALUE;
            System.out.println(b+1);
            int c = Integer.MIN_VALUE;
            System.out.println(c-1);
            System.out.println("hello");
        }

}

1.5基本数据类型的包装类

基本数据类型 包装类 所占字节
byte Byte 1
short Short 2
int Integer 4
long Long 8
char Character 2
float Float 4
double Double 8
boolean 只有true和false两个值

1.6强制类型转换

1.条件是转换的数据类型必须是兼容的。

2.格式:(type)value type是要强制类型转换后的数据类型 实例

public class QiangZhiZhuanHuan{
    public static void main(String[] args){
        int i1 = 123;
        byte b = (byte)i1;//强制类型转换为byte
        System.out.println("int强制类型转换为byte后的值等于"+b);
    }
}

int强制类型转换为byte后的值等于123

1.7隐含强制类型转换

1.整数的默认类型是 int。

2.浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f。

1.8自动类型转换

必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。

public class ZiDongLeiZhuan{
        public static void main(String[] args){
            char c1='a';//定义一个char类型
            int i1 = c1;//char自动类型转换为int
            System.out.println("char自动类型转换为int后的值等于"+i1);
            char c2 = 'A';//定义一个char类型
            int i2 = c2+1;//char 类型和 int 类型计算
            System.out.println("char类型和int计算后的值等于"+i2);
        }
}
运行结果为:
char自动类型转换为int后的值等于97
char类型和int计算后的值等于66

总结

本篇文章就到这里了,希望对你有所帮助,也希望你能够多多关注脚本之家的更多内容!

您可能感兴趣的文章:
阅读全文