Java 编程基础

Wesley13
• 阅读 610

Java 历史

     1995年5月23日,Java语言诞生
**1996年1月,第一个JDK(JDK1.0)诞生
**1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术
1996年9月,约8.3万个网页应用了JAVA技术来制作
1997年2月18日,JDK1.1发布
1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录
1997年9月,JavaDeveloperConnection社区成员超过十万
1998年2月,JDK1.1被下载超过2,000,000次
1998年12月8日,JAVA2企业平台---J2EE发布
**1999年6月,SUN公司发布Java的三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME)
****2000年5月8日,JDK1.3发布
****2000年5月29日,JDK1.4发布
**2001年6月5日,NOKIA宣布,到2003年将出售1亿部支持Java的手机
2001年9月24日,J2EE1.3发布
2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升
**2004年9月30日18:00PM,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5更名为Java SE 5.0
**2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名,以取消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME
*2006年12月,SUN公司发布JRE6.0
2009年04月20日,甲骨文74亿美元
收购Sun,取得java的版权。
2010年9月,JDK7.0已经发布,增加了
*简单闭包功能

2011年7月,甲骨文公司发布java7的正式版。

Java 编程基础

操作系统按如下顺序寻找JRE环境:

Java 编程基础

Java 编程基础

Java 编程基础

命令:

1)编译

javac Hello.java

2)运行

java Hello.class

标识符

可以由中文字符、英文字符、下划线,$,和数字构成,

但不能以数字打头.

Java大小写敏感.

避开Java的关键字(例如 abstract,case,for等).

标识符没有长度限制.

标识符命名习惯:

类名:每个单词首字母大写,其他小写;

接口名:与类名一致;

方法名:第一个单词首字母小写,其他单词首字母大写;

变量名:与方法一致;

常量名:全部大写,单词间以"_"连接;

包名:全部小写

Java常用关键字

Java 编程基础

**关键字 strictfp  (**strict float point)

strictfp 关键字可修饰类、接口或方法。
使浮点计算严格执行IEEE-754规范。

关键字 transient  (短暂的)

当持久化对象时,可能有一些成员变量,我们不想用serialization机制来保存它。

这时可以在这些域前加上关键字transient。

public class Test implements Serializable{    private static final long serialVersionUID = 5614914871710914541L;    private String a;    private transient int b;    public String getA() {        return a;    }    public void setA(String a) {        this.a = a;    }    public int getB() {        return b;    }    public void setB(int b) {        this.b = b;    }    public String toString(){        return String.format("a:%s,b:%d", this.a,this.b);    }    public  static  void main(String[] args)throws IOException, ClassNotFoundException{        ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("test"));        Test test=new Test();        test.setA("测试");        test.setB(30);        System.out.println(test);//a:测试,b:30        out.writeObject(test);        out.close();        //        ObjectInputStream in=new ObjectInputStream(new FileInputStream("test"));        Object obj=in.readObject();        if(obj instanceof Test){            test=(Test)obj;            System.out.println(test);//a:测试,b:0        }        in.close();    }}

访问修饰符

private,default,protected,public

对类,类的属性以及类的方法进行访问权限的控制

Java 编程基础

访问控制的限制程度由高到低:

private->default->protected->public

this关键字

this(当前类的实例)关键字经常出现在方法中,

用途:

1.返回调用当前方法的对象的引用

Java 编程基础

2.在构造方法中调用当前类中的其他构造方法

Java 编程基础

3.当方法参数名成员变量名相同时,进行区分

Java 编程基础

super关键字

super(父类的实例):

1.调用父类的构造方法

Java 编程基础

2.调用父类中的方法或属性

Java 编程基础

static关键字

在static修饰的方法中,不能调用没有static修饰的方法和属性,也不能使用this和super关键字

一个对象修改静态属性值后,会影响其他对象

public class A(){

    public static int p=0;

}

A.p

或者

A a=new A();

a.p;

都可以.

static修饰自由块

static{

...

}

静态自由块,通常用于初始化静态变量.

静态自由块与类相关,只要类被加载,即时没有创建对象,也将被执行.

并且,无论创建几个对象,仅执行一次.

final关键字

final修饰类,表示该类不能再被继承;

public final class Person{

}

修饰成员变量,表示该变量是一个常量;

final int FEMALE=0;

final int MALE=1;

修饰方法,表示该方法不能在子类中重写.

public final void m1(){

}

instanceof关键字

instanceof是运算符,二元.

o instanceof A:对象o是A的实例,或A的子类的实例返回true,否则返回false.

通常这么写:

if(o instanceof A){

  A a=(A)o;//类型转换

}

数据类型

简单数据类型和引用数据类型

Java 编程基础

Java 编程基础

简单类型变量直接存储变量的值;而引用类型变量存储的是对象的地址.

浮点数经度问题

Java 编程基础

float和double只能用来做科学计算或是工程计算,

商业计算中,用java.math.BigDecimal

基本类型和封装类型

Java 编程基础

int a=Integer.valueOf("123");

//

Integer i=new Integer(123);

System.out.println(i.toString);

int a=i.intValue();

Integer.MAX_VALUE<Float.MAX_VALUE

float f=3.4 错

float f=3.4f 对

Java 编程基础

Java 编程基础

字面值,整数默认为int,小数默认为double

int i=3;

long l=3L;//或3l

double d=3.14;

float f=3.14f;//或3.14F

局部变量和成员变量

局部变量必须先初始化(如果后面的代码有访问到它),而成员变量有默认初始值,

Java 编程基础

Java 编程基础

Java 编程基础

传参:简单类型-值传递,引用类型-引用传递

运算符:

通常都是用短路与短路或

if(表达式1&&表达式2){

}

if(表达式1||表达式2){

}

Java 编程基础  

Java 编程基础

Java中不存在“运算符重载”

&逻辑与,&&短路与

Java 编程基础

如果f1()&f2()&f3()

Java 编程基础

如果f1()&&f2()&&f3()

Java 编程基础

&&效率高.

||与|类似.

x++和++x

int a=10;

int b=10;

int j=10+(a++);//j=20

int z=10+(++b);//z=21

x?y:z

Java 编程基础

反汇编可知:if...else...比三目运算符效率更高一些.

public  static  void main(String[] args){        boolean flag=true;        long beginTime=System.nanoTime();        int a=flag?3:4;        System.out.println("使用三目运算符?:,耗时"+(System.nanoTime()-beginTime)+"纳秒");        //使用三目运算符?:,耗时72356纳秒        beginTime=System.nanoTime();        if(flag){            a=3;        }else{            a=4;        }        System.out.println("使用if..else...,耗时"+(System.nanoTime()-beginTime)+"纳秒");        //使用if..else...,耗时10057纳秒    }

short s=0;
s=s+1;(错,表达式s+1的计算结果是int,int赋给short变量,错误,需进行强制类型转换)
s+=1;(对,Java对**+=运算符,会自动进行类型转换**,相当于s=(short)(s+1))

+=,-=,/=,*=与+=类似

字符串的+操作,底层实现是靠StringBuilder类的实例方法append

Java 编程基础

String的valueOf静态方法

Java 编程基础

==和equals()是不同的

Java 编程基础

比较两个字符串是否相等,建议用equals()方法

String s="abc" //采用的是字符串缓冲池机制,效率高

String s=new String("abc")//会新建一个对象

Java 编程基础

int[]a和int a[]都是可以的.

建议用int[]a

Java 编程基础

Java 编程基础 Java 编程基础

public class Test {    public void fun(int[]a){            }    public  static  void main(String[] args){        Test test=new Test();        test.fun({1,2,3});//错误        test.fun(new int[]{1,2,3});//正确    }}

Java 编程基础

for :不能赋值

public static void print(int[]arr){        String str="";        for(int a:arr){            str+=a+" ";        }        System.out.println(str);    }    public  static  void main(String[] args){        int[]arr={1,2,3,4};        print(arr);//1 2 3 4         for(int a:arr){            a=0;        }        print(arr);//1 2 3 4     }

数组的复制

System类的静态方法

static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

Java 编程基础

数组的排序

public static void java.util.Arrays.sort(int[]a),经过调优的快速排序算法,升序.

public static void java.util.Arrays.sort(byte[]a)

public static void java.util.Arrays.sort(char[]a)

public static void java.util.Arrays.sort(short[]a)

public static void java.util.Arrays.sort(long[]a)

public static void java.util.Arrays.sort(float[]a)

public static void java.util.Arrays.sort(double[]a)

public static void java.util.Arrays.sort(Object[] a)

根据元素的 自然顺序对指定对象数组按升序进行排序。数组中的所有元素都必须 实现 **Comparable** 接口。此外,数组中的所有元素都必须是 _可相互比较的_(也就是说,对于数组中的任何 e1 和 e2 元素而言, e1.compareTo(e2) 不得抛出 ClassCastException)。

保证此排序是_稳定的_:不会因调用 sort 方法而对相等的元素进行重新排序。

该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n*log(n) 性能。

compareTo
int compareTo(T o)

比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

public class Student implements Comparable<Student> {    private String name;    private int age;    public Student(){        this.name="";        this.age=0;    }    public Student(String name,int age){        this.name=name;        this.age=age;    }    public String toString(){        return String.format("name:%s,age:%d", this.name,this.age);    }    public int compareTo(Student student) {        // 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。        if(this.age<student.age){            return -1;        }else if(this.age==student.age){            return 0;        }else{            return 1;        }    };}



public static void main(String[] args) {        Student[] arr = { new Student("s1", 50), new Student("s2", 30),                new Student("s3", 30), new Student("s4", 10) };        Arrays.sort(arr);        for (Student s : arr) {            System.out.println(s);        }        /*         * name:s4,age:10          * name:s2,age:30          * name:s3,age:30          * name:s1,age:50         */    }

数组索引从0开始

Java 编程基础

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这