Fork me on GitThub

Java总结

Java基础

  • JVM :java虚拟机
  • JDK :java开发工具包,包含JRE
  • JRE :java运行环境

java的体系结构

  • JavaSE :标准版
    定义了Java的基本语法

  • JavaME :移动版
    以前诺基亚用
    现在GPS和机顶盒用这个

  • JavaEE : 企业版
    可以分为:

  1. B/S :基于浏览器和服务器的架构模式
  2. C/S : 基于客户和服务器的架构模式

javaEE还可以用于JavaWeb开发——>全栈工程师

每一次修改代码,都必须重新编译。


Java代码规范

  1. 文件名与类名必须一致;
  2. 类名的首字母大写;
  3. main函数是程序入口,四个元素必不可少:
    public、static 、void 、 String [] args;
  4. 一行只写一条语句;
  5. 代码缩进;
  6. 常量的变量名全部大写
  • 内存地址是16进制数据;

  • 变量名一定要符合规则:
    驼峰式命名法:第一个单词全部小写,其他单词的首字母大写

  • java的八种基本数据类型:

  1. byte : 1个字节,8位;
  2. short : 2个字节, 16位;
  3. int : 4个字节,32位;
  4. long : 8个字节,64位;
  5. float : 4个字节,32位;
  6. double : 8个字节,64位;
  7. char : 2个字节,16位;
  8. boolean :1/8个字节,1位。

int可以赋值给float,反之不亦然;
强制类型转换会砍值;

Scanner

  1. import java.util.Scanner;
  2. Scanner scanner = new Scanner(System.in);
  3. scanner.nextInt();
  • 只有== 和!= 可以施法于任何数据类型,其他关系运算符只能用于数值类型;
  • 短路与和短路或比单纯的与和或效率更高;
  • String类型的值判断是否相等不能用==,要用equals方法进行判断;
  • switch支持的数据类型:int、short、byte、char、枚举类型、String类型;

数组

  • 数组长度一旦确定,就不能修改;
  • null只能赋给引用类型;

数组工具类

java.util.Arrays
提供了操作数组的方法,例如排序,查询等。

boolean Arrays.equals(array1, array2);
比较两个数组是否相等

Arrays.sort(array);
变成升序排序。没有返回值。

String str = Arrays.toString(array);

Arrays.fill(array, val);
将数组里面的值全部变成val。

Arrays.copyOf(array, length);
扩展伸缩数组,返回一个新的数组。

int Arrays.binarySearch(array, val);
返回查询值在数组里面的最后一个匹配值的下标。
返回负数就证明找不到。

Java高级

程序在运行期:

  1. 将编写好的类加载到JVM中,有了模板;
  2. 根据需求,通过模板(类)来创建对应的对象,完成业务需求。

类与对象的区别:

  1. 类是静态的,写完之后就存在于硬盘中。
  2. 对象是动态的,随着程序的运行而创建,同时随着程序的关闭而销毁。
  3. JVM中类只有一份,对象可以无数份也可以没有。

垃圾回收机制GC:

是一个独立的巡查线程,GC是一个定时任务,隔一段时间执行一次。

为什么null不能赋值给基本数据类型?

因为null是地址,而基本数据类型在栈中只能存数值不能存地址。

每个类默认有无参构造函数,当你自己定义一个有参构造函数后,无参构造函数就消失了!

eclipse可以自动生成toString()啊,构造函数什么的,在source选项里面!

传参

  • 基本数据类型传递的是变量的值;
  • 引用类型传地址;

this

只能写方法体里面。
通常情况下,在类的方法中的具体代码,this可加可不加。
当方法中的参数和属性名一致时,通过参数名无法区分参数和属性时,需要通过this来修饰属性。

this(参数) 调用有参构造;
this() 调用无参构造;
它们只能在构造函数内调用。
并且this()必须写在方法体内第一行!

方法重载

  1. 必须在同一个类中;
  2. 方法名相同;
  3. 参数列表不同;
  4. 与返回值无关;
  5. 与访问权限修饰符无关。

动态参数

如何让参数个数不固定?
在参数列表中数据类型后面加上三个点。
动态参数实质上是一个数组,根据外部传入的参数个数来动态生成一个数组,记录所有的参数。

成员变量和局部变量

成员变量:定义在类中,方法体外的变量,属性
局部变量:定义在类中同时也存在于方法体中的变量

面向对象的四大特征

封装、继承、多态、抽象

封装

定义

将类的某些信息隐藏在类的内部,不允许外部程序直接访问这些信息,外部只能通过该类提供的特定方法来实现对隐藏信息的操作和访问。

如何实现

  1. private
  2. setter和getter
  3. setter里面放一点控制语句

有工具可以自动生成setter和getter

static静态修饰符

可以修饰:

  1. 成员变量:将之变成静态变量,使之可以通过类来访问;
  2. 成员方法:同上;
  3. 代码块:写在类中,方法之外,并且用花括号包裹起来的一段代码就叫做代码块。当程序访问该类时,自动执行代码块中的语句。
    静态代码块:当Java虚拟机(JVM)加载该类时,执行该代码,并且只执行一次。如果有多个静态代码块,那么按顺序执行。

在静态方法中比如main,不能访问该类的非静态属性,可以访问该类的实例化对象的非静态属性。

main中不能访问该类的非静态方法,可以访问对象的非静态方法。

静态方法如main里面不能用this!

类的构造方法用于创建类的实例对象,类的静态代码块用于初始化类,给类的静态变量赋值

posted @ 2018-09-03 09:47  林檎endymion  阅读(194)  评论(0编辑  收藏  举报