java基础知识:
JVM:Java Virtual Machine,java虚拟机,实现java的跨平台性。注:java语言跨平台。
JDK:Java Development Kit,java开发工具。
JRE:Java Runtime Environment,java运行环境。
环境变量和系统变量的配置:
path:帮助系统操作java用javac将源码编译成.class文件, 在调用java 命令让程序执行。
classpath:告诉java虚拟机所有的可执行文件.class都在哪。
双百分号(%JAVA_HOME%):表示引用JAVA_HOME这个路径。
标示符命名规则:
由数字(0-9),大小写英文字母,以及_和$组成。不能以数字开头。不能使用java里的关键字来自定义命名。
内存结构:
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:数组和对象,通过new建立的实例都存放在堆内存中。
方法区:静态成员、构造函数、常量池、线程池
本地方法区:系统占用
基本数据类型:
byte,short,long,int,boolean,char,float,double。
包装类型:
Byte,Short,Long,Integer,Boolean,Character,Float,Double。
引用数据类型:
String。
包装类型可以赋值为null,基本数据类型不能赋值为null。
类型的转换为:
精度从高到低 double float long int short(char) byte
低转高,自动转换;高转低,强行转换。
例子:
int b = 2;
byte a = 6;
byte c =(byte)(b+a);
比较运算符有:
!=,>,>= ,< ,<= ,== .
比较运算符只有两种结果:
true或者false,返回的永远是boolean类型
位运算符有
:&,|,^,<< ,>>,位运算是二进制的操作。
&:相同位数全部为1 则为1,否则为0
|:相同位数一个为1,则为1
^:相同为数一个为1一个为0,则为1,否则为0
<<:左移几位就是该数乘以2的几次方 , >>:右移几位就是该数除以2的几次方取整数
逻辑运算符有:
& && (与) | ||(或) ^(异或) !(非)
与的条件是:全部满足则满足。
或的条件是:一个满足则满足。
异或的条件是:一个满足一个不满足为真,否则为假。
非的条件是:取反
&和&& (与)的区别:
&:无论左边的表达式是否为真,右边的表达式都参与运算。
&&:如果左边的表达式为真,则右边的表达式参与运算;
如果左边的表达式为假,则右边的表达式不参与运算。
|和||(或)的区别:
|:无论左边的表达式是否为真,右边的表达式都参与运算。
||:如果左边的表达式为真,则右边的表达式不参与运算;
如果右边的表达式为假,则右边的表达式参与运算。
三目运算符:
a>b?a: 成立时返回的内容:不成立是返回的内容。
算数运算符:
+,-,*,%(除),/(取余),++,–。
赋值运算符:
++和–。
++:在原来的基础上加一,在赋值给原来的变量。
++在前,先自增后运算;++在后,先运算在自增。
–:在原来的基础上减一,在赋值给原来的变量。
–在前,先自减后运算;–在后,先运算在自减。
变量:分为成员变量和局部变量。
变量的作用:用来存储数据。
成员变量:定义在方法的外面类的里面。使用:实例化名.变量名。
局部变量:定义在方法里面。使用:直接使用。
循环分为:if循环;for循环;while循环;do…while循环
if循环分为:单分支,双分支和多分支。
单分支:if(条件表达式){表达式满足所执行的语句}。
双分支:if(条件表达式){表达式满足所执行的语句}else{条件不满足所执行的语句}
多分支:if(条件表达式){表达式满足所执行的语句}else if(条件表达式){表达式满足所执行的语句}else{条件不满足所执行的语句}
for循环:
for(初始表达式;循环表达式;循环操作后的执行语句){执行体}
for的执行流程:初始化表达式-循环表达式-循环体-循环操作后的表达式-循环表达式-循环体-循环操作后的表达式…直到循环表达式不满足for循环节结束了
初始表达式:最新执行并且只会执行一次。
for嵌套循环:外循环执行一次,内循环执行一圈。
for的死循环永远满足循环表达式。
while循环:
while(条件表达式){条件表达式满足就重复执行的代码块}
while嵌套循环:外循环控制行 内循环控制列
条件结构语句:
switch表达式的值只能为 byte,shor,char,int,String,枚举(String类型在JDK1.7以后才可以使用)
case的值只能为常量,且在同一个switch语句中,case的值必须唯一
default表示默认,如果case没有与之匹配的值,则执行default语句
数组:
对数组的操作就是对角标的操作,数组的角标起始值为0。
定义数组的三种方式:
一丶类型[] 数组名=new 类型[]{具体的参数1,具体的参数2…};
二丶类型[] 数组名=new 类型[数组的长度];
三丶类型[] 数组名= {具体的参数1,具体的参数2…};
int[] arr = new int[]{23,21};
**数组的赋值:**
arr1[0] = 90;
**根据角标获取对应的元素:**
System.out.println(arr[0]);
System.out.println(arr[1]);
**ArrayIndexOutOfBoundsException : 下标越界**
System.out.println(arr[2]);
**获取数组的长度:length属性**
System.out.println(arr.length);
**Random:表示随机数。
Scanner(System.in):表示控制台输出。**
**遍历数组的两种方法:**
for循环和foreach循环
**for循环:**
for (int i = 0; i < arr3.length; i++) {
System.out.println(arr3[i])
};
**foreach循环:**
for (int i : arr) {
System.out.println(i)
};
二维数组:
方法1:先new对象,然后再初始化每个元素 int[][] a = new int[3][5]。
方法2:直接赋初值来创建对象 int[][] b = {{1,1,1,1,1}, {2,2,2,2,2}, {3,3,3,3,3} }。
方法3:new完对象直接初始化 int[][] a = new int[][] {{1,1,1,1,1}, {2,2,2,2,2},
冒泡排序和选择排序:
冒泡排序的核心:两两相比,默认为按自然顺序排序,从左往右移动,直到最右边为最大开始第二轮移动。
int [] arr = {123,45,25,87,47};
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-i-1; j++) {
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr [j+1] = temp;
}
}
}
for (int i : arr) {
System.out.println(i);
}
}
选择排序:
选择排序的核心:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。
int [] arr = {123,45,25,87,47};
for (int i = 0; i < arr.length-1; i++) {
for (int j = i; j < arr.length-1; j++) {
if(arr[i]>arr[j+1]){
int temp = arr[i];
arr [i] = arr[j+1];
arr [j+1] = temp;
}
}
}
for (int i : arr) {
System.out.println(i);
}
函数:
修饰符 返回的类型 函数名(类型 形式参数,…){ }
定义:函数就是定义在类中的具有特定功能的一段独立小程序。
就近原则:
1.在方法的里面不能再次定义方法
2.静态的成员方法可以直接调用
3.非静态的成员方法实例化名.方法名();
4.方法里面可以再次调用方法
5.静态方法里面调用的方法必须为静态的
6.静态方法里面调用的成员变量必须为静态的
7.当成员变量和局部变量同名:调用成员变量this.成员变量
封装:
封装一个类。
传递:
分为基本数据类型的传递和引用传递;
注意:形式化参数在没有返回值的时候,参数传递是无效的。
重写和重载
重载:发生在一个类里面,指的是方法名相同,但参数不同的多个方法,与返回值无关
重写:发生在子类与父类之间,子类重写父类的方法,要求方法名相同,参数相同,
返回值相同,修饰符不能更严格
代码块:
分为静态代码块和构造代码块。
静态代码块:static{}静态代码块在加载的时候就被执行,并且只会执行一次,
优先于构造函数执行
构造代码块:格式:{}
面试题:静态代码块和构造代码块还有构造函数的执行先后顺序?
静态代码块->构造代码块->构造函数
注意:静态代码块和构造代码块只会执行一次,构造函数实例化一次就执行一次
子类和父类:
继承的关键字:extends
super:代指父类
子类继承父类:子类就拥有了父类的允许被继承的属性和方法
必须要调用父类的构造器;如果没有显示的调用,则默认调用父类的无参构造器,
此时父类没有无参构造器,则系统报错
访问控制修饰符:public : 公开的 -》能够在项目的任何位置使用
protected : 受保护的 -》能够在同包,子类,自己内部
default : 默认的 -》 能够在同包,自己内部
private : 私有的 -》 只能自己内部访问
多态:父类的引用指向了子类的对象
存在多态的3个必要条件:1.继承关系 2.子类必须重写父类的方法 3.父类的引用指向子类的对象。
接口:是一种更高级的抽象体现
抽象层级:接口->抽象->普通类
面向接口编程:
定义一个接口:interface class
实现接口:implements 接口名,一个类可以实现多个接口
接口里定义普通的变量,不可以 只能定义常量
默认添加public static final
接口里面不可以定义构造方法。接口里不可以定义普通的变量,只能定义常量。
注:接口不能实现接口 但是可以继承接口
内部类: 成员内部类 、 局部内部类、 匿名内部类
内部类里面可以定义普通的方法
内部类里面可以定义静态的方法,但是内部类的类名必须为静态的
非静态的方法调用:外部类.内部类 实例化名 = new 外部内().new 内部类();
静态方法的调用: 外部内.内部类 实例化名 = new 外部内.内部类();
来源:CSDN
作者:丶枕边人
链接:https://blog.csdn.net/nan961136007/article/details/87863601