美文网首页
1、java简介

1、java简介

作者: bigpeng个人博客 | 来源:发表于2018-12-24 14:08 被阅读6次

1、java发展历史

java最早的发展可以追溯到1991年,Sun公司成立了一个称为Green的项目组,致力于解决数字家电之间的通讯与协作(智能家电)。James Gosling 作为项目负责人。相对于PC机而言,数字家电设配平台差异非常的大,他们必须屏蔽掉各个平台的差异,于是Gosling开发了一种全新的语言,叫Oak。但是行业不景气啊,语言是开发出来啦,但是硬件厂商对Oak语言还不是很信任啊。都不敢冒险生产该类硬件设备。因此Oak语言就被搁置下来啦。
但是啊,是金子他总是要发光的啊。时间来到了1995年,陈奕迅偷他朋友背包的年份。互联网发展迅速,当时是只能展示静态页面,比较死板,业界都纷纷投入人力来研究动态的页面效果。最好呢,还可以跨各种平台。这是候sun公司拍脑袋一想,哎呀我擦,这不就是我们的橡树吗。于是将橡树包装个响亮的名字,重新推出。这就是我们熟知的java啦。java推出之后迅速占领了市场,许多其他的公司都放弃了自己研发项目,开始使用java。其中就包括java现在的所有者,思诚的合作伙伴,oracle。
2009年oracle 收购sun。

2、java的发行版本

java 从1996年发布jdk1.0版本开始到现在发展了22年,现在最新的版本时jdk11,Java
语言无可质疑的成为拥有程序员最多、使用最广泛的语言。在程序排行榜上一直是数一数二的。

java的三个平台技术标准:
javase:java平台标准版,是java平台的基础,javase包含了java应用所需要的基础环境和核心库类。
javaee: java平台企业版,javaee在javase的基础之上,用来开发企业级的应用。这个是java应用最广泛的领域。
javame:java平台微型版,机顶盒,移动电话等,这种现在应用很少,逐渐被安卓替代。

jdk: java 开发工具包
jre:java 运行时环境
jvm :java虚拟机
java api :java 系统核心类库

学习路线:javese --> javaee.

为什么java会这么火?这个因为java的很多特性

3、java 语言特点

  • 面向对象:面向对象,更符合人类的思维方式,适合开发大型项目。
  • 跨平台:java程序只需要编写一次,编译之后便可以在各个平台上运行。
  • 安全:垃圾自动回收,放弃了指针操作,避免了很多因指针操作错误导致的安全问题。
  • 多线程:同时处理多个任务的能力。
  • 高并发处理能力强

4、java 行业,通过java我们能做什么?

从95年发展至今,java已经成为了全球最受欢迎的开发语言。应用几乎涉及到了你所能想到的各行各业。金融,电商,电信。
通过java我们能做什么?
网站:淘宝,京东
管理软件:用友,金蝶
安卓
游戏:我的世界

4、jdk安装及环境变量配置

下载地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/index.html

JAVA_HOME:D:\Program Files\Java\jdk1.8.0_121
path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

5、ideal开发工具安装

6、第一个java程序

/**
 * 描述:
 * 第一个java程序
 * 认识java程序的组成,及java程序的运行方式。
 * 掌握项目,类,main方法,输出控制台,控制台查看
 * 了解java程序的编译过程。
 * 了解java注释
 * @author xupeng
 * @create 2018-12-18 22:03
 */
public class FirstClass {

    public static void main(String[] args) throws IOException {
        System.out.println("大家好,我是欧阳锋,人送外号西毒,我在娱乐圈有很多徒弟。");
    }

}

概念:
项目:整个java代码的集合。
包:java代码文件存放的目录结构。
类:java代码文件
方法:java中一组为了实现特定功能的代码块的集合。

8、常用的java命令

  • javac [选项] 源文件 这个命令用来编译我们写的java源代码
# -encoding 为指定文件的编码格式
javac -encoding utf-8 FirstClass.java

  • java class文件 执行class文件中的main方法
java day01.FirstClass
  • jar 用来打jar包,将class文件打成一个jar包。jar包可以直接运行,或者供别人调用。
#            jar包名            打入的类
 jar -cvf FirstClass.jar FirstClass.class
  • javadoc :用来生成帮助文档
 javadoc -encoding utf-8 -d E:\upload -docencoding utf-8  Fir
stClass.java
  • javap 这个命令是反编译器,显示编译类中可以访问的方法和数据。
javap FirstClass.class
# -c 为反汇编
 javap -c FirstClass.class

7、java中的注释

  • 单行注释: //
  • 多行注释: /**/
  • 文档注释:

8、java中的数据类型

java中数据类型分为基本数据类型和引用数据类型两种。

9、基本数据类型

java中有八种基本数据类型分别为:

四种整形数据类型

  • byte 占8位,1个字节 取值范围 -2^7 -- 2^7-1
    -128 ~ 127
  • short 占16位 2字节 取值范围 -2^15 -- 2^15-1
    -32768 ~ 32767
  • int 32位 4 字节 取值范围 -2^31 -- 2^31-1
    -2147483648 ~ 2147483647 21亿
  • long 64位 8字节 取值范围 -2^63 - 2^63-1
    -9223372036854774808 ~ 9223372036854774807

浮点类型

  • float 单精度 32 位 4个字节
    1.4E-45~3.4028235E38
  • double 双精度 64位 8个字节
    4.9E-324~1.7976931348623157E308
    字符
    char 使用unicode-16编码 占用2个字节
    英文单词 askii
    中文 unicode码

布尔类型

  • boolean 占一个字节 取值 true false

13、基本数据类型的转换

  • 自动转换,小的数据类型转换成大的数据类型(由低到高)
    byte->char->short->int->long
  • 强制转换,大的数据类型转换成小的数据类型 (由高到低),会丢失精度
  • java整数 默认是 int 类型,小数 默认是 double 类型
/**
 * 描述:
 * java中基本数据类型
 * 目标:
 * 1、了解java八大基本数据类型
 * 2、了解变量的定义,作用域
 * 3、了解java标识符命名规范
 *
 * @author xupeng
 * @create 2018-12-18 23:37
 */
public class BasicDataType {


    public static void main(String[] args) {
        //定义变量
        byte b=2;
        //错误示例
//        byte 2s=10;
//        short s=500;
        //超出范围编译会报错,
//        short s=50000;
        int i=357;
        long l=3888989;
        //超出int范围会报错
//        long l2=999999999999999999;
        //添加L之后不报错
        long l3=999999999999999999L;
        float f=12.5f;
        double d=12.5;

        //类型转换 -->小的转大的会自动转换,大的转小的需要强制类型转换

        //小转大 ok
        l=i;
        //大转小,编译不通过,要强制类型转换,并且会丢失精度
        i= (int) l;

       
    }

}

10、java 变量

1)变量即给对象取一个名字,方便我们对对象进行操作。
2)变量必须有明确的类型。并且给变量赋值的时候类型要匹配,不能指鹿为马。
3)变量必须声明,并初始化以后才能使用。
4)同一个作用域内变量不能重复定义。
5)变量命名可以由字母,数字,下划线(_),美元符($)组成。但是不能以数字开头。

10、标识符

在java中用于给类、变量、方法命名的名称,称为标识符

类名:首字母大写,驼峰命名,尽量使用名词
变量名:首字母小写,驼峰命名,尽量使用名词
方法名:首字母小写,驼峰命名,尽量使用动词

标识符的规则
1、标识符由字母、数字、下划线、美元符号组成,长度不受限制
2、首字母不能是数字
3、不能是java的关键字
4、不能是null false true,尽管不是关键字
50关键字:


java50个关键字.png

11、变量的作用域

每个变量都有自己的一个作用域,只有在作用域内才有用,就跟我们很多东西有有效期一样,身份证,驾照的作用域也不一样。同样变量也有他的一个作用域。

变量的作用域是从声明的地方开始,到块结束为止。

11、二进制,十进制,八进制,十六进制

十进制是我们最常用的进制方式,从幼儿园就接触了哈,他是逢十进一。十是他们的基数。
而我们计算机里面呢,最终使用的都是二进制的内容。二进制缝2进1,基数是2。
例如 135 是十进制的
1 * 10^2 + 3 * 10^1 + 5 * 10^0=135
二进制数
10000111 为二进制

十进制转二进制采用"除2倒取余"的方式。
十进制转八进制采用“除八倒取余”的方式。
二进制转八进制采用“取三合一法”
二级制转十六进制采用“取四合一法”

12、二进制的原码,反码,补码

原码:第一位放符号位,0表述正数,1表示负数。
存在问题:计算机运算特别麻烦,比如+1和-1相加,应该等于0,但是计算机计算为0001+1001=1010(-2) 。同时还存在+0,-0这样的情况。
反码:为了解决正负相加为0的问题,人们在原码的问题上提出了反码的概念。
反码即符号位不变,负数的其他位置取反。
正数的反码与原码相同。
这样就解决了正负相加为0的问题。

依然存在的问题:存在正负两个0的情况。

在原来反码的基础上+1,便生成了补码。这样便解决了正负0的问题。

正数的原码,反码,补码是一致的。

14、运算符

运算符优先级java.png

口诀:
单目乘除为关系,逻辑三目后赋值。

单目:单目运算符!(逻辑非运算符)~(按位取反运算符) ++ -- +(正) –(负数) 等
乘除:算数单目运算符* / % + -
为:位移单目运算符<< >>
关系:关系单目运算符> < >= <= == !=
逻辑:逻辑单目运算符&& || & | ^
三目:三目运算符A > B ? X : Y
后:无意义,仅仅为了凑字数
赋值:赋值 = += -= *= /= %=

15、算数运算

/**
 * 描述:
 * 1、java中整数默认是int类型,小数默认是double类型。
 * 2、自动类型转换,小的可以转换成大的,大的不能转换成小的。
 * 3、大的转小的必须强制类型转换,精度会丢失
 * 4、是否存在1+1<2这种情况?
 * @author xupeng
 * @create 2018-12-19 0:17
 */
public class DefaultTypeAndTypeCast {

    public static void main(String[] args) {
        // java整数 默认是 int 类型,小数 默认是 double 类型

        byte x = 2 ;       // ok
        byte y = 3 ;      // ok
        /**
         * 因为 a 和 b 都是 变量。编译器虽然可以确定 a 和 b 两个变量的值,都是byte的取值范围,
         * 但是由于他们是变量,变量相加的值,编译器在编译器期间是无从得知的,
         * 也就是说,到底会不会超过byte的取值范围,编译器是不确定的 ;因此,报错 ;
         */
//        byte z = x + y ;     // error

        /**
         * 3 + 5 OK 的原因是:编译器是认识常量值的,知道 3 + 5 = 8 ;还没有超过byte的取值范围 ;
         * 同样的道理,编译器发现了 125 + 5 = 130 ;超过了byte的取值范围了,因此,报错 ;
         */
        byte x1 = 3 + 5 ;      // ok
//        byte y1 = 125 + 5 ;    // error

        byte x2 = (byte) (127 + 5);   // ok
        System.out.println(x2);   // output : -124

        //  此处可以放到运算符处讲解
        byte x3 = 8 ;
//        x3 = x3 + 10 ;       //error
        // += 操作符,会默认帮我们进行强转 ;
        x3 += 10 ;          // ok


        //同理
        float f=1.0f;
//        float f2=f+1.0;
    }


/**
 * 描述:
 * 算数运算符
 * 1、浮点类型数学运算的精度问题,不准确,得用BigDecimal
 * 2、整形相除会得到整形,默认向下取整
 *  * / %  ++,--
 * @author xupeng
 * @create 2018-12-19 21:18
 */
public class Math {

    public static void main(String[] args) {

        System.out.println(0.05+0.01);
        System.out.println(1.0-0.42);
        System.out.println(4.015*100);
        System.out.println(123.3/100);
        //解决方式
        BigDecimal b1=new BigDecimal("0.05");
        BigDecimal b2=new BigDecimal("0.01");
        double v = b1.add(b2).doubleValue();
        System.out.println("BigDecimal计算结果:0.05+0.01="+v);


        //默认为向下取整
        System.out.println(5/2);

        //向上取整咋整?
        System.out.println(java.lang.Math.ceil(5.0/2));

        //计算个位十位百位

        int num=520;
        //个位
        int unit=num%10;
        //十位
        int tens=num/10%10;
        //百位
        int hundred=num/100;

        System.out.println("百位:"+hundred+",十位"+tens+",个位:"+unit);

        //
        int i=0;
        //后++,先运算,语句完后再++
        int i2=i++;
        System.out.println("i++后i="+i);
        //先++  先自增在运算
        int i3=++i;
        System.out.println("i2="+i2+",i3="+i3);

        //一个奇怪的问题

        int j=0;
        j=j++;
        System.out.println("j="+j);


    }

16、位运算

位运算都是对补码进行操作

左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ )
1)<<左移位是二进制补码向左移动,移动多少位在低位补多少个0;
2)>>右移位是二进制的补码向右移位,向右移动多少位,则在左边添加多少个符号位(如果负数则1正数则0)。
3)>>> 为无符号右移 。补码右移,高位补0;
4)& 位与:两个都是1则为1,否则为0;
5)| 位或:两个有一个为1则为1,否则为0;
6)~ 位非:补码取反,包括符号位。
7)^ 异或:两个数相同位如果相同则为0,不同则为1;


/**
 * 描述:
 * 位运算
 * 1)<<左移位是二进制补码向左移动,移动多少位在低位补多少个0; 左移一位相当于乘以2
   2)>>右移位是二进制的补码向右移位,向右移动多少位,则在左边添加多少个符号位(如果负数则1正数则0)。
     右移一位相当于除以2。
   3)>>> 为无符号右移 。补码右移,高位补0;
   4)& 位与:两个都是1则为1,否则为0;
   5)| 位或:两个有一个为1则为1,否则为0;
   6)~ 位非:补码取反,包括符号位。
   7)^ 异或:两个数相同位如果相同则为0,不同则为1;
      按位异或可以不使用临时变量完成两个值的交换,也可以使某个整型数的特定位的值翻转。
 *
 * @author xupeng
 * @create 2018-12-19 22:29
 */
public class ShiftOperator {

    public static void main(String[] args) {
        // 1、左移( << )
        // 0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位补0://
        // 0000 0000 0000 0000 0000 0000 0001 0100 换算成10进制为20
        System.out.println(5 << 2);// 运行结果是20

        // 2、右移( >> ) 高位补符号位
        // 0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位补0:
        // 0000 0000 0000 0000 0000 0000 0000 0001
        System.out.println(5 >> 2);// 运行结果是1

        // 3、无符号右移( >>> ) 高位补0
        // 例如 -5换算成二进制后为:0101 取反加1为1011
        // 1111 1111 1111 1111 1111 1111 1111 1011
        // 我们分别对5进行右移3位、 -5进行右移3位和无符号右移3位:
        System.out.println(5 >> 3);// 结果是0
        System.out.println(-5 >> 3);// 结果是-1
        System.out.println(-5 >>> 3);// 结果是536870911

        // 4、位与( & )
        // 位与:第一个操作数的的第n位于第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0
        System.out.println(5 & 3);// 结果为1
        System.out.println(4 & 1);// 结果为0

        // 5、位或( | )
        // 第一个操作数的的第n位于第二个操作数的第n位 只要有一个是1,那么结果的第n为也为1,否则为0
        System.out.println(5 | 3);// 结果为7

        // 6、位异或( ^ )
        // 第一个操作数的的第n位于第二个操作数的第n位 相反,那么结果的第n为也为1,否则为0
        System.out.println(5 ^ 3);//结果为6

        // 7、位非( ~ )
        // 操作数的第n位为1,那么结果的第n位为0,反之。
        System.out.println(~5);// 结果为-6

        //实际应用
        //1、两个变量值的交换
        int x=11;
        int y=20;
        x=x^y;
        y=y^x;
        x=x^y;
        System.out.println("x="+x+",y="+y);
        //2.判断为奇数还是偶数 &1 结果为1则为奇数,为0则为偶数
        System.out.println((11&1)); //偶数

        //3. 计算8/2 高效的方式
        System.out.println("8/2="+(8>>1));
    }

17、逻辑运算

/**
 * 描述:
 * 逻辑运算和比较运算符
 *   &  |  &&  ||
    区别 && || 会造成短路。而& |不会。且& | 可以做位运算。
 * @author xupeng
 * @create 2018-12-19 23:10
 */
public class LogicOperation {

    /**
     * 程序员的逻辑:老婆说你下班回家买两个西瓜回来,如果看到有柚子就买一个。
     * 结果:买了一个柚子。
     */

    public static void main(String[] args) {
        int sex='女';
        int height=170;
        if(sex=='女' & height>=170){
            System.out.println("喂,秋香姐吗");
        }else{
            System.out.println("我如花啊");
        }

        //短路效果

        System.out.println(sex=='女'&&height>170);
        System.out.println(sex=='男'&&height++>170);
        System.out.println(height);
         //三目运算
        System.out.println(sex=='女'&&height>170?"喂,秋香姐吗?":"我如花啊");

    }

}

相关文章

  • Java 学习基础篇 ---- Java集合

    一、Java 集合简介 (一) Java集合简介 1、Java 集合定义:(1)一个 Java 对象可以在内部持有...

  • 1、java简介

    1、java发展历史 java最早的发展可以追溯到1991年,Sun公司成立了一个称为Green的项目组,致力于解...

  • 1-1 Java简介

    主要内容: Java平台应用 1995年诞生于“sun”公司,2009年4月被“ORACLE”公司收购。 最基础是...

  • Java学习(1)——简介

    什么是Java语言 编译型+解释型语言。通过解释方式来执行的语言。跨平台。相比C++简洁得多,提高了可靠性,除去了...

  • Java NIO(1) 简介

    1.Java NIO 简介 Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API...

  • Javaassist简介(转载)

    1、简介 Javassist (JAVA programming ASSISTant) 是在 Java 中编辑字节...

  • Javaassist简介

    1、简介 Javassist (JAVA programming ASSISTant) 是在 Java 中编辑字节...

  • 黑马程序员-java介绍及开发环境搭建

    -------android培训java培训期待与您交流!---------- 1.JAVA简介 欢迎进入JAVA...

  • jolokia配合gradle使用

    jolokia简介 1 JMXJMX(Java Management Extension),java中标准的扩展管...

  • Java

    目录 1 简介[https://www.oracle.com/java/technologies/java-tun...

网友评论

      本文标题:1、java简介

      本文链接:https://www.haomeiwen.com/subject/akhuhqtx.html