JAVA
public java 关键字,功能:访问修饰符之一。
class java关键字,功能:类,标识符,说明该文件是
Hello World 类名,请遵从命名规范 :
- 类名要见名知意,驼峰原则
- 首字母大写,其余单词首字母大写
- 单词间不要有空格
- 数字不能放开头
- #%等不能使用
- _ 可以使用,但是阿里编程规范禁止使用和 可以使用, 但是阿里编程规范禁止使用和 可以使用,但是阿里编程规范禁止使用和放在开头结尾一
- Java代码中区分大小写
- 命名不能使用java关键字
以下是国内规范约束 - 建议不要写拼音,更不能写中文
{} 类体,包含属性和方法,一定要注意{}是成对出现的
|public static void main(String[]args{…})|这个正题叫做方法
主方法是程序的入口
static 关键字,功能:静态修饰符
void 关键字,功能:返回值类型之一(空)
main 方法名.特殊的名字,我们不能随意使用.是java程序的主方法,是java程序的唯一入口
名字固定.只有main方法会执行
其他方法的方法名,要首字母小写,其他要求与类名一样
()参数列表:该方法执行时需要的数据
String 参数类型之一
String[ ]数组
args 参数名:首字母小写,其他与方法名类似
主方法的格式是固定的
/
常量
常量:在程序的运行期间,固定不变得量
常量的分类:
字符串常量:凡是用双引号引起来的部分,叫做字符串的常量"今天是我学习java的第二天"
整数常量
浮点数(小数)常量
字符常量
布尔(boolean)常量
空常量 null
变量
变量:即变化的量
关键字
JAVASE基础篇
转义字符
package com.hmk.basic;
public class HelloWorld {
public static void main(String[] args){
//转义字符
//1.输出"你好世界"
System.out.println("\"你好世界\"");
//2.输出\你好世界\
System.out.println("\\你好世界\\");
//3.换行符
System.out.println("你好\n世界");
//4.制表符
System.out.println("你好\t世界\t你好\tJAVA");
}
}
输出结果:
"你好世界"
\你好世界\
你好
世界
你好 世界 你好 JAVA
计算机中的存储单元
- 最小的信息单位bit(比特)
- 最小的储存单位Byte(字节)
- 两者之间的关系1Byte=8bit
- 汉字占用字节数两个字节
8 Byte = 1 B
1 KB (kilobyte千字节)=1024 B
1 MB (Megabyte 兆字节 简称“兆”)=1024 KB
1 GB (Gigabyte 吉字节 又称“千兆”)=1024 MB
1 TB(Trillionbyte 万亿字节 太字节)=1024 GB,其中1024=2^10 ( 2 的10次方)
1 PB(PetaByte 千万亿字节 拍字节)=1024 TB
1 EB(Exabyte 百亿亿字节 艾字节)=1024 PB
1 ZB (Zettabyte 十万亿亿字节 泽字节)= 1024 EB
基本数据类型
分类:
基本数据类型:整数,浮点,字符,布尔
引用数据类型 如 类,数组,接口等
数据类型 | 关键字 | 内存大小 | 取值范围 |
---|---|---|---|
字节型 | byte | 1个字节1B | -128~127 2^7-1 |
短整型 | short | 2个字节2B | -32768~32767 2^15-1 |
整型 | int | 4个字节4B | 21开头的十位数 2^31-1 |
长整型 | long | 8个字节8B | 92开头的十九位数 2^63-1 |
单精度浮点数 | float | 4个字节4B | -1.4013E-45~3.4028E+38 |
双精度浮点数 | double | 8个字节8B | 4.9E-324~1.7977E+308 |
字符型 | char | 2个字节2B | 0~65535 |
布尔类型 | boolean | 1个字节1B | ture,false |
备注JAVA中默认的基本数据类型中,整型为int,浮点型为double
引用数据类型
- 类
- 数组
- 接口
运算符
算数运算符
运算符 | 运算规则 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
+ | 加法 | 1+3 | 4 |
+ | 字符串连接 | “中”+“国” | “中国” |
- | 负号 | int a=3;-a | -3 |
- | 减 | 3-1 | 2 |
* | 乘 | 2*3 | 6 |
/ | 除 | 5/2 | 2 |
- 加法运算符在连接字符串时要注意,只有直接与字符串相加才会转成字符串
-除法"/"当两边为整数时,取整数部分,舍余数,当其中一遍为浮点型时,按正常规则相除
基本数据类型转换
- 自动转换 范围小的可以向范围大的进行转换byte < short < int <long <float <double
- 强制转换 范围大的向范围小的进行转换,需要强制类型转换 小范围数据类型 标识符 = (小范围数据类型) 变量名称;
ASCII
- (0-9)对应(48-57),(A-Z)对应(65-90),(a-z)对应(97-122)
- 所有的编码表都支持ASCII编码表
int和char类型转换
- char转换成int,字符型和数值型进行转换的时候都会查 询编码表,由于int4个字节,char2个字节,所以属于自动的 类型转换
- int转换成char,需要强制类型转换
- 如果char是汉字,转换成整数查询的就是Unicode编码表
- char类型的最大整数是65535,因为char没有负数
- char可以直接赋值为Unicode编码,格式为\uxxxx,十六 进制
赋值运算符
运算符 | 运算规则 | 范例 | 结果 |
---|---|---|---|
= | 赋值 | int a=2 | 2 |
+= | 加后赋值 | int a=2,a+=2 | 4 |
-= | 减后赋值 | int a=2,a-=2 | 0 |
*= | 乘后赋值 | int a=2;a*=2 | 4 |
/= | 整除后赋值 | int a=2,a/=2 | 1 |
%= | 取模后赋值 | int a=2,a%=2 | 0 |
比较运算符
运算符 | 运算规则 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 4==3 | False |
!= | 不等于 | 4!=3 | True |
< | 小于 | 4<3 | False |
> | 大于 | 4>3 | True |
<= | 小于等于 | 4<=3 | False |
>= | 大于等于 | 4>=3 | True |
逻辑运算符
运算符 | 运算规则 | 范例 | 结果 |
---|---|---|---|
! | 非 | Flase | |
&& | 短路与 | false&&true | Flase |
II | 短路或 | false II true | True |
- 逻辑运算符运算结果是布尔类型
- 布尔表达式:是指运算结果是布尔值的式子
- &与/和(and) 全真才真,一假就假
- |或,全假才假,一真就真
- ! 非/取反,非错即对
- && 短路与,因为&是一错就错,所以当&&前已经是false时,那么就可以确定整体表达式的结果false,后续的表达式不再执行
- ||短路或,与上类似,只要一个表达式的结果能确定整体表达式的结果,反面表达式就短路不执行
- boolean r1 = 1>0 && 2<0; //
- boolean r1 = 2>0 || 1>0;
-boolean r1 = 1>0 & 2<0;
-boolean r1 = 2<0 | 1>0;
System.out.println((1 < 0 || 1 / 1 == 1)&&(1 >0 || 1 / 0 == 1));
- 先判断两个小括号里true/fales
- 第一个小括号:1< 0为假 1 / 1 == 1为真 == > 第一个小括号结果为true
- 第二个小括号:1>0为true 因为短路或一真就真, 后面的就不做判断被短路 ==> true
- 小括号1:true 小括号2:true == > true
位运算符
运算符 | 运算规则 | 范例 | 结果 |
---|---|---|---|
!&与 | 1&0,0&0,1&! | 0,0,1 | |
I | 或 | 1I0,0I0,1I1 | 1,0,1 |
^ | 异或 | 1 ^ 0,0 ^ 0,1^1 | 1,0,0 |
- ^运算规律
- 10=1,00=0,任何数和0相异或得到的是这个数本身
- 01=1,11=0,任何数和1相异或得到的是这个数的相反
- 一个数自己和自己异或得到的是0
三目运算符
- 必须有结果,?后必须跟有东西
System.out.println( 1<5 ? “success” : “fa il” );
选择控制语句
- if控制语句
- 当括号内的内容是true的时候,执行{}中的内容
//并列if判断,无论上面的条件成立与否,下面的i f都会进行判断
if(a < b){
System.out.println("a小于b");
}if(a > b){
System.out.println("a大于b");
}
if(a == b){
System.out.println("a等于b");
}
if….else…控制语句
//上面条件成立下面就不在判断
if(a < b){
System.out.println("a小于b");
}else{
System.out.println("a不小于b");
}
if…else if…else控制语句
//上面条件成立下面就不在判断
if(a < b){
System.out.println("a小于b");
}else if(a > b) {
System.out.println("a大于b");
}else {
System.out.println("a等于b");
}
多条件判断
if(1<a&&a<5){
System.out.println("并且是&&,两个条件都 为真");
}if(a==1 || a==3){
System.out.println("或者是||,两个条件至 少有一个为真");
}if(a!=3 || a!= 4){
System.out.println("或者是||,两个条件至 少有一个为真,!=表示不等于");
}
switch case语句
- switch后边的表达式只能是整型字符型(byte, short,int,char),枚举类型,其中jdk7之后支持 字符串型.
switch (n) {
case n: //case后的值得数据类型要与switch的值数据类型一致
//case值后 是冒号!
//语句1
break; //如果没有break,会击穿下面的case,直接执行其中的语句
case n+1:
//语句2
break;
default:
//break;
}
Scanner类
- 属于引用类型,创建的时候需要固定格式 数据类型 变量 名 = new 数据类型();
- 需要导入所在的包,导包格式: import java.util.Scanner;
- 创建对象 Scanner sc = new Scanner(System.in);
- 获取输入的整数 int a = sc.nextInt();
- 获取输入的字符串 String str = sc.nextLine();
- 注意sc.nextInt()和sc.nextLine()会中断程序
Random类
- 需要导入所在的包,导包格式: import java.util.Random; 创建对象 Random ran = new Random();
- 获取随机整数范围是[0,50): int a = ran.nextInt(50);
- 获取随机小数范围是[0,1): double b = ran.nextDouble();
- 如何获取一个[a,b]的随机数 int a = rand.nextInt(b - a + 1) + a;
循环语句
循环四要素
- 循环初始值
- 循环控制条件
- 循环体
- 循环迭代
int i = 1;
while (i < 6){
System.out.println("你好");
i++;
}
while循环
- 语法
while(布尔表达式){
循环体;
循环迭代;(++ / --)–>控制循环次数
} - 执行流程
- 先判断while后的表达式
- 如果是ture,就行{}内的语句
- 执行完{}内的语句,再次判断while后的表达式
- 当while后的结果是false就不再执行{}内的内容,
- 继续执行后续
//输出1-100中的奇数偶数
int i = 1;
int j = 1;
int k = 2;
while(i < 51){
System.out.println(j+"+");
System.out.println();
System.out.print(k+"");
j = j + 2;
k = k + 2;
i++;
}
- while:先判断,后执行
- do while循环 --》直到型
- 语法:先执行后判断
- do{
-
循环体;
-
迭代
- }while(布尔表达式);
- 先执行do中的循环内容
- 判断while后的表达式
- 表达式为true,再执行do中内容
- 在判断
- 直到判断为false时,跳过循环,执行后续
- do while至少会执行一次
for(int i=0;i<=10;i++){
System.out.print(i+" ")
}
1.先执行初始值1处,切只执行一次
2.开始2处判断,如果为true,就向下执行循环体
3.执行完成,执行迭代
4.继续判断,如果判断为false,就跳出for结构,执行后续
for循环
for(初始值;控制条件,迭代){
循环体;
}
变量名:在同一作用域内不能重复
变量在这一敢为内有效
同一作用域;在同一个最近的{}内
//输出1-10
for(int i = 1; i <= 10;i++){
System.out.print(i+" ")
}
System.out.println("\n");
}
Scanner
Scanner 属于引用类型,创建的时候需要固定格式
数据类型 变量名 = new 数据类型();
Random
//产生随机数
数据类型 变量名 = new 数据类型();
public static void main(String[] args) {
String[] nameArr = {"张新宇","杨星宇","黄梦柯","龙朝涛","李秋霜"};
for (int i = 10; i > 0; i--) {
try {
Thread.sleep(1000);//
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.println(i);
}
System.out.println("就是你 --> "+nameArr[new Random().nextInt(5)]);//[0,5)
}
数组
package com.hmk.basic;
public class ArrayDemo {
public static void main(String[] args) {
//定义一个数组
int[] arr = {37, 11, 33, 44, 55};
//定义一个最大值max,把索引的第一个值赋给max
int max = arr[0];
//遍历索引值0之后的每一个元素
for (int i = 1; i <= arr.length - 1; i++) {
//当有元素大于max,把该元素的值重新赋值给max
if (arr[i] > max) {
max = arr[i];
}
}
//数组遍历结束,最大值变量保存的就是数组当中最大值
// System.out.println("数组的最大值是:"+ max);
// 排序从小到大-->从大到小
// 外层循环控制趟数
for (int j = 0; j < arr.length - 1; j++) {
for (int i = 0; i < arr.length - 1 - j; i++)
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
System.out.println("排序后:");
for(int i=0;i<=arr.length-1;i++){
System.out.println(arr[i]+"");
}
}
}
面向对象的三大特点
三大特点:封装、继承、多态
封装
原则:将属性【隐藏起来】起来,如果想要访问类中的某个属性,提供【公共的访问方法】对其访问。
封装的步骤:
- private 关键字来修饰成员变量
- 对需要访问的成员变量,提供getXxx()方法和seXXX()方法
注:get是取值 set是赋值
封装时的权限控制符区别如下
封装的操作
private的含义
- private是一个权限修饰符,代表最小的访问修饰符
- 可以修饰成员变量(全局属性),也可以修饰成员方法
- 被private修饰的成员变量和成员方法,只能在本类中去访问
private 使用格式
private 数据类型 变量名;
封装的好处
- 良好的封装能够减少代码之间的耦合性
- 类内部的结构可以进行随意更改
- 可以对成员变量(全局属性)进行更精准的控制
- 隐藏信息,实现细节
封装优化1_this关键字
我们发现seXxx()方法当中形参名字不符合我们标识符的命名规范–见名知意,如果修改成和成员变量相同的名字,会触发java 程序当中的就近原则,会把方法内额变量统统的变为形参变量,导致赋值失败,我们就可以采用【this】关键字来解决,变量重命名的问题。
this的含义
this代表的是所在类的当前对象的引用(地址值),即对象对自己引用
备注:意思是方法被那个对象调用,方法中的this指代的就是代表的是哪个对象,即谁调用,this就是谁。
this的使用格式
This.成员变量名
使用t his关键字修饰方法中的成员变量,解决成员被隐藏的问题:
public class Man {
//1.使用private关键字修饰成员变量
private String name;
private int age;
//2.提供相应的getXxx()方法和seXxx()方法
//可以访问类中成员变量
//getXxx() 获取类中成员变量信息
public String getName(){
return name;
}
//setXxx()设置类中成员变量
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
//seXxx()设置成员中变量
public void setAge(int age){
this.age=age;
}
封装优化2_构造方法
当一个对象被创建的时候,构造方法用来初始化对象,给对象的成员变量赋初值
备注:无论你是否在封装类里 定义构造方法,当类被定义出来的时候,系统会自动的分配一个构造方法-无参构造方法,一旦在类中显示的定义构造方法,java会自动提供默认无参构造就会被自动销毁(被回收)
构造方法的定义格式
修饰符 构造方法名(参数列表){
//方法内容
}
//构造方法没有返回值,构造方法名和类名要保持完全一致
注意事项:
- 构造方法的方法名必须要与类名完全保持一致
- 构造方法不用声明返回值类型,连void也不需要
- 构造方法中不能用return返回一个具体的值
- 如果定义类时没有显式的定义构造方法,系统会给一个默认的无参构造方法
- 一旦定义了一个构造方法,那么编译期会回收提供的隐式构造方法
- 构造方法可以重载:方法名相同,参数列表不同
继承:
多态:
类
具有相同的特点(属性)和行为(方法)的集合的总称
对象
是某一类事物具体的体现(实例),将类的抽象【概念具体化
属性
是一类事物的特点或特征
方法
是一类事物可以进行的行为或动作(方法的命名遵循驼峰方法,首字母小写,其余单词首字母大写)
[访问修饰符] 返回值类型 方法名(参数){…【方法内执行的语句】}
返回值类型:该方法执行后的结果的数据类型
基本数据类型/引用数据类型(int float doublering Array)
void 空,方法执行后,不返回任何数据
如果方法需要返回值
1. 需要在返回值类型处写上需要返回数据所对应的数据类型
2. 在方法体的最后需要使用return值的格式,将值明确返回
参数列表:
1. 形式参数:该方法执行可能会用到的数据
2. 形式参数的写法:数据类型,参数名
3. 列表内可写多个参数,也可不写
4. 有参数时,在使用方法时要调用,必须给参数先赋值
{}方法体
方法功能的具体体现:
无返回值,无参数
无返回值,有参数
有返回值,无参数
有返回值,有参数
两个引用指向一个对象,s1是对象名,也是变量,可以叫做对象的引用
s1应用的是内存中,堆内存中的对象的地址值,
student s2=s1,将s1的地址值赋值(引用)给s2,所以s1与s2操作的是同一个对象
定义位置 | 作用范围 | 初始值 | 在内存中的存储位置 | 生命周期 | 修饰符 | |
---|---|---|---|---|---|---|
成员变量 | 类中,方法外 | 类中 | 有默认值 | 堆内存 | 随着对象的创建而存在,对象消失就消失 | 可使用修饰符 |
局部变量 | 方法中或方法声明上(形式参数) | 方法中 | 无默认值, 必须先定义赋值再引用 | 栈内存 | 随着方法的调用而存在,调用结束就消失 | 不使用修饰符 |
方法的重载(Overload):
- 方法名一样,参数列表不一样的方法之间叫做重载
- 参数列表不同:不同的参数个数,参数类型,参数顺序
//方法重载的演示 public void what(){ //个数不同 } public void what(String eat,int age){ //类型不同 } public void what(int age,String eat){ //顺序不同 }
- 方法重载与什么无关:
- 与参数名称无关
- 与方法返回值类型无关
- 与方法修饰符无关
- 标准类——JavaBean
是java语言编写类的一种标准规范,符合java的类
什么样的标准叫JAVABean - 所有成员变量都要使用private关键字修饰
- 要为每一个成员变量提供getxx()和setxx()方法
- 编写一个无参构造方法
- 最好再提供一个全参构造方法
同样具有与Java 一样的这些基本数据类型,byte , short,int,long, float, double,char,boolean
注意:Scala 有与Java有一些不太一样的地方,Scala定义的这些基本数据类型,都是类,例如:Int类型《-------》scala.Int 类
有个特殊的地方,String类型没有自己定义类,而是完全使用java里,java.long