JAVA 入门

java程序中最基本的组成单位是类
类的定义格式:
public class 类名{

}
public class HelloWorld {
public static void main(String[] args){
main方法是程序的入口方法,代码的执行是从main方法开始的
System.out.println(“Hello World!”);
}
}

Random
作用:用与产生一个随机数
使用步骤:
1:导包
import java.util.Random;
2:创建对象
Random r=new Randon();
3:获取随机数
int number =r.nextInt(10);
获取数据的范围:(0,10)包括0,不包括10

快速生成语句
快速生成main()方法,psvm 回车
快速生成输出语句,sout回车

内容辅助键
Ctrl+Alt+space(内容提示,代码补全等)
快捷键
注释:
单行:选中代码,ctrs+/,再来一次,就是取消
多行。选中代码,ctrl+shift+/ 再来一次,就是取消

格式化
ctrl+Alt+l

java中的内存分配
栈内存:存储局部变量
定义在方法中的变量,例如:arr
使用完毕,立即消失
堆内存:存储new出来的内容(实体,对象)
数组在初始化时,会为存储空间添加默认值
整数:0
浮点数:0.0
布尔:false
字符:空字符
引用数据类型:null
每一个new出来的东西都有一个地址值
使用完毕,会在垃圾回收器空闲时被回收。

数组
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度
格式:数据类型[]变量名 =new数据类型[]{数据1,数据2,数据3,。。。}
简化格式:数据类型[]变量名={数据1、数2,数据3}

数组操作的两个常见的小问题
索引越界,访问了数组中不存在的索引对应的元素,造成索引越界问题。
空指针异常 把null赋值给数组

什么是方法

方法 是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集

注意:
方法必须先创建才可以使用,该过程成为方法定义.
方法创建后并不是直接运行的,需要手动使用后才执行,该过程成为方法调用。

带参数方法的定义和调用
形参和实参
形参:方法定义中的参数
等同于变量定义格式,例如: int number

实参:方法调用中的参数
等同于使用变量或常量,例如: 10 number

带返回值方法定义
方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错。
方法的返回值通常会使用变量接收,否则该返回值将无意义。

function(a:10,b:20);
常量

方法的注意事项
方法不能嵌套定义
void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据。

方法重载特点
重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式
重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判断两个方法是否相互构成重载。

在调用的时候,java虚拟机会通过参数的不同来区分同名的方法

方法的参数传递(引用类型)
对于基本类型的参数,形式参数的改变,不影响实际参数的值。
对于引用类型的参数,形式参数的改变,影响实际参数的值。

system.out.println();起到换行的作用
system.out.print();输出内容不换行

Debug操作流程
Debug调试,又被称为断点调试,断点其实是一个标记,告诉我们从哪里开始查看


类是对现实生活中一类具有共同属性和行为的事物的抽象。
类的特点:
类是对象的数据类型
类是具有相同属性和行为的一组对象的集合

对象
对象是能够看得到摸的看着的真实存在的实体
对象的属性 对象具有的各种特征,每个对象的每个属性都拥有特定的值
对象的行为 对象能够执行的操作

类是对象的抽象
对象是类的实体

类的重要性 是java程序的基本组成单位
类是对现实生活中一类具有共同属性和行为的事物的抽象,确定对象将会拥有的属性和行为
类的组成
属性:在类中通过成员变量来体现(类中方法外的变量)
行为:在类中通过成员方法来体现(和前面的方法想比去掉static关键字即可)

成员变量和局部变量
成员变量:类中方法外的变量
局部变量:方法中的变量

成员变量和局部变量的区别
区别 成员变量 局部变量
类中位置不同 类中方法外 方法内或者方法声明上
内存中位置不同 堆内存 栈内存
生命周期不同 随着对象的存在而存在,随着对象的消失而消失 随着方法的调用而存在,随着方法的调用完毕二消失
初始值不同 有默认的初始化值 没有默认的初始化值,必须先定义,赋值,才能使用。

this关键字
this修饰的变量用于指代成员变量
方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量

什么时候用this 解决局部变量隐藏成员变量

this代表所在类的对象引用

记住:方法被那个对象调用,this就代表那个对象

封装
面向对象的三大特征之一(封装、继承、多态)
是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的。

封装原则
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问成员变量private,提供对应的getXxx()/setXxx()方法

封装好处
通过方法来控制成员变量的操作,提高代码的安全性
把代码用方法进行封装,提高了代码复用性

构造函数

构造函数的注意事项
1、构造方法的创建
如果没有定义构造方法,系统将给出一个默认的无参数构造函数方法
如果定义了构造方法,系统将不再提供默认的构造方法

2、构造方法的重载
如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法

3、推荐的使用方式
无论是否使用,都手工书写无参数构造方法

标准类的制作
1、成员变量
使用private修饰
2、构造方法
提供一个无参数构造方法
提供一个带多个参数的构造方法
3、成员方法
提供每一个成员变量对应的setXxx()/getXxx()
提供一个显示对象信息的show()
4、创建对象并为其成员变量赋值的两种方式
无参构造方法创建对象后使用SetXxx()赋值
使用带参构造方法直接创建带有属性值的对象

String概述
String类在java.lang包下,所以使用的时候不需要导包
String类代表字符串,java程序中的所有字符串文字 都被实现为此类的实例
也就是说,java程序中所有的双引号字符串,都是string类的对象

字符串的特点
字符串不可变,他们的值在创建后不能被更改
虽然string的值不可变的,但是他们可以被共享
字符串效果上相当于字符数组char[],但是底层原理是字节数组btte[];
//String构造方法:
//public String();创建一个空白字符串对象,不含有任何内容
//public String(char[] chs);根据字符数组的内容,来创建字符串对象
//public String(byte[],bys);根据字节数组的内容 来创建字符串对象
//String s=“abc”; 直接赋值的方式创建字符串对象,内容就是abc
//推荐使用赋值的方式得到字符串对象

  //String对象的特点
    //1、通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同 栈和堆
    //2、以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序中出现几次,jvm都只会建立一个string对象,并在字符串池中维护

//字符串的比较
//使用==做比较
//基本类型:比较的是数据值是否相同
//引用类型:比较的是地址值是否相同
//字符串是对象,他比较内容是否相同,是通过一个方法来实现的,这个方法叫:equals()
//public boolean equals(Object,object):将次字符串与指定对象进行比较,由于我们比较的是字符串对象,所以参数直接传递一个字符串

*如果对字符串进行拼接操作,每次拼接,都会构建一个新的string对象,又浪费内存空间,而这种操作还不可避免,
那么有没有一种比较好的方式可以解决这个问题呢?可以通过java提供的StringBuilder类就来解决这个问题。

StringBuilder概述
//创建
StringBuilder sb=new StringBuilder();
//链式编程
sb.append(“hello”).append(“world”).append(“java”).append(100);
System.out.println(sb);

通toString()就可以实现把StringBuilder转换为String

通过构造方法就可以把String转换为StringBuilder

集合
集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以发生改变。

ArrayList
可调整大小的数组实现
是一种特殊的数据类型,泛型

怎么用?
在出现E的地方我们使用引用数据类型替换即可
举例:ArrayLsit,ArratList

ArrayList arr=new ArrayList();
arr.add(“一个字符list”);
arr.add(“dasd00”);//将指定的元素追加到此集合的末尾
arr.add(1,“替换了”);//在此集合中的指定位置插入指定的元素

索引最大是3 不能在4位置插入数据,否则会报错

//public boolean remove(object 0);删除指定元素,返回删除是否成功
//public E remove(int index) 删除指定索引处的元素,返回被删除的元素
//public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
//public E get(int index)返回指定索引处的元素
//public int size() 返回集合中的元素的个数

Alt+Insert 根据自己的需要进行选择

//Map集合概述
//Interface Map K:键的类型;v:值的类型
//将键映射到值的对象;不能包含重复的键;每个键可以映射到最多一个值

//set 集合特点
//不包含重复元素的集合
//没有带索引的方法,所以不能使用普通的For循环遍历
//HashSet:对集合的迭代顺序不做任何保证

集合类体系结构

Collection单列 map双列
list可重复 set不可重复 hashMap
ArrayList LinkedList HashSet TreeSet

//File:它是文件和目录路经名的抽象表示
//文件和目录是可以通过File封装成对象的
//对于File而言,其封装的并不是一个正真存在的文件,仅仅是一个路经而已,它是可以存在的,也可以是不存在的,将来是要通过具体的操作把这个路经的内容转换为具体存在的。
//File(String pathname) 通过将给定的路经名字符串转换为抽象路经名来创建新的File实例
//File(String parent,String child) 从父路经名字符串和子路径名字符串创建新的File实例
//File(File parent,String child) 从父抽象路径名和子路径名字符串创建新的File实例

多态:同一个对象,在不同时候表现出来的不同形态
举例:猫
我们可以说猫是猫:猫 cat=new 猫();
我们也可以说猫是动物:动物 animal=new 猫();
这里猫在不同的时刻表现出来了不同的形态,这就是多态
多态的前提和体现
有继承/实现关系
有方法重写
有父类引用指向子类对象

函数式接口:有且有一个抽象方法的接口
java中的函数式编程体现就是Lambda表达式,所以函数式接口就是可有适用于Lambda使用的接口
只有确保接口中有且仅有一个抽象方法,java中的Lambda才能顺利地进行推导
如何检测一个接口是不是函数式接口呢?
@Functionallnterface
放在接口定义的上方:如果接口是函数式接口,编译通过;如果不是,编译失败
注意:我们自己定义函数式接口的时候,@FunctionIInterface是可选的,就算不写,只要保证满足函数式接口定义的条件,也照样是函数式接口,但是建议加上注释

基本类型包装类概述
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据
常用的操作之一:用于基本数据类型与字符串之间的转换

类加载
当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载,类的连接,类的初始化这三个步骤来对类进行初始化。如果
不出现意外情况,jwm将会连续完成这个三个步骤,所以有时也把这三个步骤统称未类加载或者类初始化。

类的加载
就是指将class文件读入内存,并为之创建一个java.lang.Class对象。
任何类被使用时,系统都会为之建立一个java.lang.Class对象。

类的连接
验证阶段:用于检验被加载的类是否有正确的内部结构,并和其他类协调一致。
准备阶段:负责为类的类变量分配内存,并设置默认初始化值。
解析阶段:将类的二进制数据中的符号引用替换为直接引用。

类的初始化
在该阶段,主要就是对类变量进行初始化。

类的初始化步骤
假如类还未被加载和连接,则程序先加载并连接该类。
假如该类的直接父类还未被初始化,则先初始化其直接父类。
假如类中有初始化语句,则系统依次执行这些初始化语句。
注意:在执行第2个步骤的时候,系统对直接父类的初始化步骤也遵循初始化步骤1-3。

类的初始化时机
创建类的实例
调用类的类方法
访问类或者接口的类变量,或者为该类变量赋值
使用反射方式来强制创建谋个类或接口对应的java.lang.Class对象
初始化某个类的子类
直接使用java.exe命令来运行某个主类。

函数式编程思想概述
在数学中,函数就是输入量,输出量的一套计算方案,也就是“拿数据做操作”
面向对象思想强调“必须通过对象的形式来做事情”
函数式思想强调“必须通过对象的形式来做事情”
函数式思想则尽量忽略面向对象的复杂语法:“强调做什么,而不是一扇门形式去做”
而我们要学习的Lambda表达式就是函数式思想的体现

你可能感兴趣的:(java,jvm,开发语言)