JAVA
开发环境:
- JDK---Java开发环境
- JDK中包含JRE JRE---Java的运行环境
- JRE中包含JVM虚拟机 JVM存在于JRE中bin目录内
JVM虚拟机两大特性:
- GC垃圾回收机制
- 通过new开辟的空间,不需要free释放,自动的被JVM虚拟机释放了 人为不可干涉
- 跨平台 => 半编译半解释实现的
第一个Java代码:
- 1.任何的代码都应该写在类中
- 2.通过关键字class来定义一个类
- 3.一个java文件可以写多个类,但是应该有一个主类,通过public来定义一个主类,主类的名字需要和文件名相同
- 4.在Java中程序的入口也是Main方法
- 5.main方法有固定的格式,只有写成固定的格式才能被JVM虚拟机识别并运行:
public static void mian(String[] args)
public修饰主类可以被JVM访问到,主类中的main被public修饰可以被JVM访问到这个方法
static修饰:静态的成员会随着类的加载而加载,当运行主类时,static修饰的main会立马出现
编译解释运行Java代码:
编译:javac xxx.java
编译之后生成字节码文件,有几个类就生成几个字节码文件
解释执行:java xxx 解释执行Java代码
Java中特有的注释方法---文档化注释:
/**
* @author farsight
*/
文档化注释可以在dos命令行通过javadoc生成注释文档
eclipse的使用:
alt+/ 补齐
ctrl+/ 注释
ctrl+f11 运行
复制、剪切、粘贴
eclipse创建项目:
- 1.new JavaProject
- 2.new package 包名经常写公司的域名倒写 cn.com.farsight 在硬盘就行有cn目录,目录中又有com目录。。。。
- 3.new class
- 4.运行Java代码实质上就是在dos命令行执行了Javac 和 java 两个指令
Java的命名规则:
规则 | 实例 | |
---|---|---|
类名 | 双驼峰 | DayOne |
变量和方法名 | 单驼峰 | dayOne |
常量 | 全大写 | COUNT |
关键字保留字:
- goto、const
- true和false是boolean的两个值,并不是关键字
- Java中的关键字都是小写的
数据类型:
- Java中有byte数据类型 -- 1个字节大小
- java中的char两个字节 -- 因为Java中没有能够表示一个字节的数据类型了,所以造出一个byte数据类型
- 0b表示二进制,一堆的0/1看起来不便捷 --- “_”做分隔
- char类型表示65535个特殊符号,其中包含常用的汉字、日文等等 Java采用的编码格式:unicode编码
- boolean类型的表述范围是0/1 一位。boolean类型的值只能是true/false,不能用0/非0代替
类型转换:
- 浮点型字面值(如3.14)默认的是double数据类型,字面值3默认int数据类型
- 3.14f/F表示该字面值是float类型,或者,(float)3.14也可以转为float类型
- 表达式的数据类型,以最大的为准,10+3.14该表达式就是double数据类型 --- 自动升级
- 根据图,数据类型从左到右可以实现自动类型转换(可以不加强转),但是有虚线的类型之间转换可能导致精度丢失
变量作用范围:
- 方法内的是局部变量。局部变量在使用之前必须初始化,系统不会默认进行初始化
- 方法外的是全局变量,也称为成员变量。成员变量,声明时会自动进行初始化
语句:
- Java中for循环的第一条语句可以用来定义变量
- Java中有foreach语句,经常用来遍历容器中的 数据
数组:
- 声明的两种方式
- 初始化的两种方式:
- 静态初始化:开辟空间时直接初始化
- int[] array = {1,2,3,4,5};是下面的一种省略
- int[] array = new int[]{1,2,3,4,5};
- 动态初始化:先开劈空间,然后自己实现初始化
- int[] array = new int[5];
- array[0] = 1;
- array[3] = 4;
- 静态初始化:开辟空间时直接初始化
- 数组变量array引用了一块内存空间,这块空间才是真正的数组的内容 --- 引用数据类型
引用数据类型:
- String类型,可以表示字符串
类:
- 类是一种描述,描述什么样的事物才属于这个类 抽象的范围
对象:
- 是属于某个类,一个具体的,实实在在存在的实物 具体,独一无二的实物
面向对象的编程语言:
- 针对一件事情,需要哪些对象,协助完成
- 方法相当于谓语,调用方法时,该方法都是依赖主语的(任何动作/谓语的发生都依赖主语调动)
面向对象解决需求:
- 1.抽取名词/对象
- 2.描述对象所属的类
- 3.创建对象
- 4.对象协作完成需求
封装:
- 一个类中的成员,可以被外部的类直接用对象访问,这样不安全
- 为了提高代码的安全性 --- 封装
- 概念:对内隐藏细节,对外提供方法
- 对内隐藏细节:private修饰,外部的类就不能直接访问这些成员了
- private:该修饰符修饰的成员只能在当前类中有效 public:共有的,任何类都可以访问到 默认修饰符:同一个包中有效
对外提供接口(方法):通过public修饰的方法,外部的类通过访问该方法实现对私有成员变量的设置年龄和获取年龄
构造器:
- 对象一产生就应该带着自己的属性,并不应该后期添加设置
- 解密:new 类名();该处的类名()就是 构造器,我们可以借助于构造器实现对象初始化
- Student xm = new Student(参数1,参数2,参数3);匹配到对应的构造器,借助于对应构造器实现对成员变量的初始化
- 当类中不写构造器时,系统会默认添加一个无参的构造器;当写了有参数的构造器时,系统不会默认添加无参的构造器了
- 构造器和普通的方法很相似:(构造器就是特殊的方法)
- 方法体、有方法名、有参数、可以被public、private、默认修饰符修饰
- 构造器和方法的不同:
- 1.方法名必须和类名相同
- 2.不写返回值类型
- 3.作用:专门用来创建对象初始化使用
重载:
- 构造器可以写多个(多个名字相同的构造方法),参数不同,调用时根据参数进行匹配
- 普通的方法也可以写多个方法名相同,参数不同的方法,调用这些方法时,就是根据参数不同进行匹配 --- 重载
this关键字---构造器之间调用:
- 方法之间可以相互调用,那构造器之间可以相互调用吗?
- 构造器之间调用,不能通过 构造器名(参数) 来调用,应该通过this(参数)来匹配调用
- 调用其他构造器时,必须放在第一行
this关键字---区分成员变量和局部变量重名的现象:
- this.变量 => 该变量是全局变量
- 直接打印变量 => 就近原则
this的含义:
- this指代当前对象
static关键字语法规定:
- static修饰的方法(静态方法)内只能访问static修饰的成员
static修饰成员的加载时间:
- 随着类的加载而加载
- 当静态成员方法加载时,非静态成员变量和方法还没有加载(找不着),所以静态方法内部不能调用非静态成员
-
Test tt = new Test();
JVM执行到Test时:加载Test类,并将该类中的静态成员一同加载
JVM执行到new Test()时:将Test中非静态的成员加载到堆中的对象中