1为什么学习java
(1)最早的一批面向对象的语言;
(2)Java是一门安全的,健壮的编程语言;
(3)java有自己的内存管理机制(GC自动帮助我们回收内存);
(4)java是一门编程语言,所以我们学习语言的时候,就是学习它的语法结构;
2配置环境变量
右击计算机进入高级系统设置在进入环境变量,如图:
![](https://img-blog.csdnimg.cn/66138a6c9b504d778f8471403ee60e1e.png)
![](https://img-blog.csdnimg.cn/167fb3be7c614f44828a2bfa9ec96df8.png)
3java的基础语法
(1)注释;因该确保注释先行的原则;
注释分为多行注释://,单行注释/* */,和文本注释:/** */;
(2)标识符
标识符的三个原则:
以字母,下划线,美元符号开头,后跟字母,下划线,美元符号,和数字;
不能是java中的关键字;
严格区分大小写;
两个标准:
见名之意;
驼峰原则
类:所以单词首字母大写;
变量:首字母小写,其余每个单词首字母大写;
常量:所有单词的首字母大写;
4关键字
java中已经规定用法的单词;
如:abstract,class,public等
5变量
在程序运行期间,值可以发生变化的容器;
变量就是一个容器,用来暂时存储数据;
6数据类型
java是一门强类型的语言,所以的变量和数据都具有类型;
主要分一下类型:
基本数据类型;整数型;浮点型,字符型,布尔型;
引用数据类型:类;接口;数组;
7类型转换
java中所有的数据类型是可以进行互相转换的;
基本数据类型之间的类型转换(布尔型)不参加类型转换;
引用数据类型之间的类型转换(重要);
基本数据类型和引用数据类型的转换;
(1)自动类型转换
小变大,自动转;
大类型=小类型;
(2)强制类型转换
大变小,需强转;强转有风险,转换需谨慎;
小类型=(小类型)大类型;’
8运算符
运算的符号就是运算符,常见的运算符:+,—,*、/等
(1)赋值运算符
int num = 20;
赋值运算符是整个java中优先级最低的,并且是唯一一个自右向左进行的运算的运算符
(2)算术运算符
+,-,*,\,%,++,--
注意:++i,--i:先自增,自减然后再运算。先保证i自增1,自减1,然后再计算表达式的值。表达式值等于num的值;
i++,i--:
先运算,再自增、自减, 先计算表达式的值,表达式值等于
num
的值,然后再
num
自增
1、自减1。
如果 ++ -- 是单独的一条语句时,此时前、后没有任何区别。
8扩展运算符
它是算数运算符+赋值运算符 | 位运算符+赋值运算符,如;i+=i;
9关系运算符
> ,< , <= ,>= ,== ,!=, instanceof
关系运算符最后的结果是一个boolean值
9逻辑运算符
逻辑运算符最后的结果是一个boolean值,并且左右两边的操作数也必须是boolean值
需要记忆的点
&
和
&&
两个操作数都为true,结果为true,其余都是false
|
和
||
两个操作数都是false, 结果是false,其余都是true
^
相同为false,不同为true;
!
取反
10条件运算符 、三目运算符
codition
?
expression1
:
expression2
先计算
codition
的结果,如果结果是
true
,则整个条件运算符的结果是
expression1
的
值,反之就是
expression2
的值。
11
位运算符
位运算符直接基于二进制进行运算的,一定程度而言它的运算效率高。
& : 同1为1 其他都为0
^ : 相同为0 不同为1
>> : 缩小倍数
<< : 扩大倍数
不要试图通过优先级控制自己的程序执行顺序。
有括号先算括号里面的
算数 > 关系 > 逻辑 > 条件 > 赋值|扩展
目数越多,优先级别越低
13流程控制
流程控制的分类:
顺序结构 (我们目前写的所有的代码都是顺序结构)
分支结构 选择结构 (执行过程中可能开辟其他的执行路径)
循环结构 (执行过程中的某些代码会往复执行)
jdk17之后对于switch的支持
switch (month) { // switch中的表达式的值类型只能是 char, byte, short, int jdk5之后支持enum jdk7之
后支持String
case 12, 1, 2 -> System.out.println("睡不醒的冬三月 [画外音] 你就像冬天里的一把火");
case 3, 4, 5 -> System.out.println("春困 [画外音] 春天在哪里呀~春天在哪里?");
case 6, 7, 8 -> System.out.println("夏打盹 [画外音] 夏天夏天悄悄过去 留下小秘密");
case 9, 10, 11 -> System.out.println("秋乏 [画外音] 就让秋风带走我的思念 带走我的爱");
default -> System.out.println("不好意思 你丫家里有" + month + "月份呀!**************");
}
14
一维数组
数组是相同类型数据的有序集合
。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合
而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引
(
下标
)
来访问它们。
这些按序排列的同类数据元素的集合称为数组
“
[]
”
。
特点:
定长
长度一旦确定不可以改变。
相同数据类型
其元素必须是 相同 类型
,
不允许出现混合类型。数组中的元素可以是任何数据类型,包括基本类型和引
用类型。
位置有序
元素所在的位置是有序的。
数组本身属于引用类型
数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身
就是对象
Java
中对象是在堆中的,因此数组无论保存基本类型还是其他对象类型,数组对象本身是在堆 中的。
数组中可以存储任意类型的数据
15数组定义
数据类型[] 数组名=new 数据类型[长度];
动态初始化
数组定义与为数组元素分配空间和赋值的操作分开进行
int[] data = new int[5];
静态初始化
在定义数组的同时就为数组元素分配空间并赋值
int[] arr=new int[]{1,3,4,6};
int[] arr2={1,2,3,4,5};
数组中的元素只声明不赋值存在默认值
,数组是引用类型,它的元素相当于类的成员变量,因此数组分
配空间后,每个元素也被按照成员变量的规则被隐式初始化。
一般规律为数值型数组默认值为
0
,引用型数组默认值为
null
:
or(元素类型 局部变量 : 数组){
局部变量-->为数组中的每一个元素值,从左向右以此获取
}
//2.遍历数组---增强for循环
for(int i : arr){
System.out.println(i); //i中存储数组的元素值,非索引
}
类之间大体分为
6
种关系
:
在设计模式中类与类之间的关系主要有
6
种:依赖、关联、聚合、组合、继承,实现, 它们之间的耦合
度依次增加。
(1)
继承关系
(Inheritance)
继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加
它自己的新功能的能力。在
Java
中继承关系通过关键字
extends
明确标识
(2)实现关系
实现指的是一个
class
类实现
interface
接口(可以是多个)的功能,实现是类与接口之间最常见的关系。
在
Java
中此类关系通过关键字
implements
明确标识。
(3)
依赖关系
(Dependency)
简单的理解,依赖就是一个类
A
使用到了另一个类
B
,而这种使用关系是具有偶然性的、临时性的、非 常弱的,但是类B
的变化会影响到类
A
。比如某人要过河,需要借用一条船,此时人与船之间的系就是 依赖。表现在代码层面,为类B
作为参数被类
A
在某个
method
方法中使用。
18
构造方法
(
构造器
constructor)
构造器也叫构造方法
(constructor)
,用于对象的初始化。构造器是一个创建对象时被自动调用的特殊方
法,目的是对象的初始化。构造器的名称应与类的名称一致。
Java
通过
new
关键字来调用构造器,从而
返回该类的实例,是一种特殊的方法。
构造器
4
个要点:
构造器的方法名必须和类名一致!
构造器虽然有返回值,但是不能定义返回类型
(
返回值的类型肯定是本类
)
,不能在构造器里调用
return
。
通过
new
关键字调用!!
如果我们没有定义构造器,则系统会自动定义一个无参的构造方法。如果已定义则编译器不会添加
无参数构造方法!
与普通方法一样,构造方法也可以重载
修饰符
final abstract static
不能用来修饰构造器
一个类中可以存在多个构造器
1.
方法重载
:
两同三不同 同一个类方法名相同,形参类型 个数 顺序不同
2.
构造器重载
:
只看形参即可 形参类型 个数 顺序不同。调用时按
“
就近最优原则
class Dog{
String color;
String name;
//空构造
Dog(){}
public Dog(String name,String color){
this.name=name;
this.color=color;
}
public static void main(String[ ] args) {
Dog d1 = new Dog();
Dog d2 = new Dog("二狗子", "白色");
Dog d3 = new Dog("三狗子", "土色");
}
}
20static
关键字
凡是静态的都是属于类的,与对象无关的,先于对象存在的。可用于修饰属性、方法、块。
在类中,用
static
声明的成员变量为静态成员变量
,
或者叫做: 类属性,类变量
.
它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化,
对于该类的所有对象来说,
static
成员变量只有一份。被该类的所有对象共享!!
可以使用
”
对象
.
类属性
”
来调用。不过,一般都是用
“
类名
.
类属性
”
static
变量置于方法区中!
用
static
声明的方法为静态方法
不需要对象,就可以调用
(
类名
.
方法名
)
在调用该方法时,不会将对象的引用传递给它,所以在
static
方法中不可直接访问非
static
的成员。
但是可以通过对象使用。
静态方法不能以任何方式引用
this
和
super
关键字