一 JAVA数据类型
public class leixing{
public static void main(String[]args){
byte b =10 ;
short s = 20;
int i = 30 ;
System.out.println(i);
long n = 999999;
System.out.println(n);
float f = 10.1f;
System.out.println(f);
double d = 20.2
System.out.println(d);
}
}
Java中的类型
- 整数的四种类型 Byete Short Int Long:定义long类型时需要加入L的标识.
- 浮点数的俩种类型 float double :定义float类型变量时需要加入F的标识.
- 字符 char
- 布尔 Boolean
二 类型的练习
public class self{
public static void main(String[]args){
String name = "坤坤" ;
int age = 18;
char gender = '男';
double height= 180.1;
boolean flag = true;
//输出
System.out.println(name);
System.out.println(age);
System.out.println(gender);
System.out.println(height);
System.out.println(flag);
}
}
- 先定义变量与类型
- 给予赋值
- 输出变量名
三 键盘录入
import java.util.Scanner; //导包 :在类之上导包
public claas ScannerDemol{
public static void main (String[]args){
//创建对象,表示我现在准备用这个Scanner这个类
Scanner sc = new Scanner(System.in);
System.out.prntln("请输入一个整数")
//接收数据
//变量i记录了键盘录入的数据
int i =sc.nextInt();
System.out.println(i);
}
}
//导包
import java.util.Scanner;
public class day5{
public static void main(System[]args){
Scanner sc = new Scanner(System.in);//创建对象
System.out.println("请输入第一个数字");
int num1 = sc.nextInt(); //接收键盘输入的数字
System.out.println("请输入第二个数字");
int num2 = sc.nextInt(); //接收键盘输入的数字
System.out.println(num1+num2);//输入俩个数字后相加
}
}
四 1.隐式转换/强制转换
-
类型不相同时需要转换成同一个类型才能继续计算
-
Byte,short,char转换时直接转换成int类型参与计算
public class day6{
public static void main(String[]args){
byte b1 = 10;
byte b2 = 20;
byte result = b1+b2;
System.out.println(result);
}
}
- 如果强制转换Byte成Byte会报错 ;数值超过了byte的总值
- 而Byte运算时会自动转为int类型参与计算
2.字符串的拼接
- 字符和整数拼接时并不会相加而是相连接在一起
public class day7{
public static void main(String[]args){
String num1 = "1111";
int num2 = 222;
System.out.println(num1+num2)
}
}
3.录入三位数,获取它的个,十,百,位
import java.util.Scanner;
public class day8{
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个三位数");
int num = sc.nextInt();
//获取个位:%10
//获取十位:/10%10
//获取百位:/100%10
int ge = num % 10;
int shi = num /10 %10;
int bai = num /100 %10;
System.out.println(ge);
System.out.println(shi);
System.out.println(bai);
}
}
4.算数运算符
5.自增自减运算符
6.赋值运算符
7.关系运算符
8.逻辑运算符
9.运算符的优先级
五 原码,反码,补码
暂无!
六 流程控制语句
if语句
import java.util.Scanner;//导包
public class day9{ //主语句,类,类名
public static void main(String[]args){ //主语句
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的酒量");
int num = sc.nextInt();//提取键盘输入的值
if (num>=2){
System.out.println("小伙子酒量不错");//第一个输出语句
}else {
System.out.println("小伙子酒量还得练啊");//第二部分输出语句
}
}
}
- if———else语句
- 根据判断语句,如果为真则输出if语句中的第一个输出语句,反之为假输出else语句
3.
public class day10分支语句{
public static void main(String[]args){
int ranking = 2; //这里如果为2贼小红不会做他的女朋友
if(ranking==1){
System.out.println("小红做他的女朋友");
}else {
System.out.println("小红不会做他的女朋友");
}
}
}
-
根据流程语句来判断true /false
if else语句
import java.util.Scanner;
public class day10分支语句{
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个整数表示你的成绩");
int score= sc.nextInt();
if(score>0&&score<=100){
if(score>=95&&score<=100){
System.out.println("送自行车一辆");
}else if(score>90&&score<=94){
System.out.println("送游乐园一日游");
}else if(score>80&&score<=93){
System.out.println("送变形金刚");
}else{
System.out.println("吊树上打一顿");
}
}
}
}
- 如果超过100贼不会继续输出下面的语句
- 修改后
import java.util.Scanner;
public class day10分支语句{
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个整数表示你的成绩");
int score= sc.nextInt();
if(score>0&&score<=100){
if(score>=95&&score<=100){
System.out.println("送自行车一辆");
}else if(score>90&&score<=94){
System.out.println("送游乐园一日游");
}else if(score>80&&score<=93){
System.out.println("送变形金刚");
}else{
System.out.println("吊树上打一顿");
}
}else{
System.out.println("你搁这吹牛逼呢");
}
}
}
- 超过数值后会直接跳过中间的语句,直接输出最后语句else语句.
练习题
1.根据不同会员的等级打折不同的力度
在这里插入图片描述
Switch语句
- switch语句格式
case穿透__ Switch__
- 语句中没有书写brke语句,Switch语句就会一直输出到最后一条语句
- default语句可以在语句中的任何位置
- jdk12中的简化写法
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rkTeDZxN-1669532926314)(image-20221119134010715.png)]
for循环
- for语句循环体结构输出步骤
2.
练习题1
打印十次Hello world
public class for1{
public static void main(String[]args){
for(int i =1;i<=10;i++){
System.out.println("Hello world")
}
}
}
小知识
- 求和的变量不能定义在循环的里面,因为变量只在所属的大括号中有效
- 输出语句写在循环体的里面会造成,当前变量只会在本次循环中有效
- 在下次的循环中,变量会从内存中消失,不会累加
while语句
1~100打印
for循环与whlie循环对比
七 数组
-
动态初始化
-
数组中的比大小
练习题1
3.
4.println中的ln是输出时换行,去掉ln课使输出时不换行,在一行中显示
八 java的内存分配
-
- 栈 堆 方法区 本地方法栈 寄存器
九 方法
1. 方法的格式
2.方法的定义/调用方式
public static void 方法名
2.打包代码后利用方法名调用方法
public class day11{
public static void main(String[]args){
printGFInfo();
}
public static void printGFInfo(){
System.out.println("小红");
System.out.println("萌妹子");
System.out.println("18岁");
}
}
3.带参数的方法定义和调用
4.带返回值的方法
总结
- 如果有返回值就要写返回值类型,没有就写void
- 方法名要驼峰命名,看词知意
return 关键字
5.方法重载
- 在同一个类中,方法名相同,参数不同,就构成了重载,与返回值无关
练习题4
定义数组的遍历:
public class day12{
public static void main(String[]args){
int[] arr = {11,2,23,55,66,77};//定义数组
fn(arr);//调用方法遍历数组
}
public static void fn(int[]arr){
System.out.print("[");
for(int i = 0;i<arr.length;i++){
if(i==arr.length - 1){
System.out.print(arr[i]);
}else{
System.out.print(arr[i]+",");
}
}
System.out.print("]");
}
}
练习题5
-
设计一个方法数组的最大值,并求出最大返回 值.
public class day13{ public static void main(String[]args){ //1.定义数组 int[] arr={11,22,33,55,66,77,5}; //2.调用方法求最大值 int max = getMax(arr); //3.打印 System.out.println(max); } //定义方法 //首先问自己:我要干嘛? 求最大值 //我干这件事,需要完成什么? 数组 //是否返回? 返回 public static int getMax(int[] arr){ int max = arr[0]; for(int i = 0 ; i<arr.length;i++){ if(arr[i]>max){ max = arr[i]; } } return max; } }
练习题6
-
定义一个方法判断数组中某一个数是否存在,将结果返回给调用处
-
public class day14{ public static void main(String[]args){ //定义数组 int []arr = {22,66,55,99,77,58,44,}; //判断一个数字在数组中是否存在/调用方法 boolean flag = contains(arr,123); //打印出来 System.out.println(flag); } //定义方法 //首先问自己:我要干嘛? 判断数字是否存在 //我干这件事,需要完成什么? 数组 数字是什么 //是否返回? 返回 true false public static boolean contains(int[]arr, int number){ for(int i = 0;i<arr.length; i++){ if(arr[i] == number){ return true; } } return false; //什么时候才能判定数组中存在于不存在,得先遍历完后数组在进行比较后才能确定是否存在. } }
练习题7
定义一个方法copyOfRange(int[] arr,int to,int from);
功能: 将数组arr中从索引from(包含from)开始,到索引to结束(不包含to)的元素到新数组中,将数组返回
public class day15{
public static void main(String[]args){
/*定义一个方法copyOfRange(int[] arr,int to,int from);
功能: 将数组arr中从索引from(包含from) 开始
到索引to结束(不包含to)的元素到新数组中,将数组返回*/
//1.定义原始数组
int [] arr = {11,22,33,55,66,77,88,99,40}
//2.调用方法拷贝数组
int[] copy = copyOfRange(arr,from:3,to:7);
//遍历copy
for(int i = 0 ; i<copy.length;i++){
System.out.println(copy[i]+" ");
}
}
//将数组arr中从索引from(包含from)开始,到索引to结束(不包含to)的元素复制到新的数组中
public static int[] copyOfRange(int[]arr,int from,int to){
//1.定义数组
int[] newArr = new int[to-from];
//2.把原始数组arr中的from到to对应的元素,直接拷贝到newarr中
for(int i=from;i<to;i++){
//伪造索引的思想
int index = 0;
newArr[index] = arr[i];
}
//把数组返回
return newArr;
}
}
6.方法的内存
- 方法调用的基本内存原理
- 先进后出
- 基本数据类型 引用数据类型
- 整数类型 除了基本数据类型的所有类型
- 浮点数类型
- 布尔类型
- 字符类型
当我们传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值
变量作用的范围只在本方法内有效
传递引用数据类型时,传递的是地址值,形参的改变,影响实际参数的值
综合练习
public class day2 {
public static void main(String[]args) {
//ASCII码表
var chs = new char[52];//定义数组
for(int i = 0;i<chs.length;i++) {
if(i<=25) {
chs[i]=(char)(97+i);//添加小写26个字母
}else {
chs[i] = (char)(65+i-26);//添加大写26个字母
}
}
String result = " ";
//System.out.println(chs);//打印所有的字母
Random r = new Random(); //随机抽四次,抽取数组中的索引
for(int i =0;i<4;i++) {
int randomIndex=r.nextInt(chs.length);
result = result +chs[randomIndex];
//System.out.println(chs[randomIndex]);
}
int number = r.nextInt(100);//随机抽取数字
result = result + number;//生成最终结果
System.out.println(result);//打印最终结果
}
}
十 面向对象
1.面对对象重点学习
- 学习获取已有的对象并使用
- 学习如何自己设计对象并使用 :面向对象的语法
-
设计对象并使用
-
类和对象
-
类(设计图):是对象共同特征的描述;
-
对象:是真实存在的具体东西
-
在JAVA中,必须先设计类,才能获取对象
2.如何定义类
- 成员变量(代表属性,一般是名词)
- 成员方法(代表行为,一般为动词)
- 构造器
- 代码块
- 内部类
3.定义类的注意事项
-
用来描述一类事务的类,专业叫做:Javabean类.;
-
在javabean类中是不写main类方法的
-
在以前编写main方法的类,叫做测试类.
-
我们可以在测试类中创建javabean类的对象并进行赋值调用
在javabean类中可以编写属性和行为
-
成员变量:代表属性
-
成员方法:代表行为
- 类名是字母建议大写,需要见名知意,驼峰命名
- 一个Java文件中可以定义多个class类,且只能是一个类是public修饰,而且public修饰的类名必须成为代码文件名.实际开发中建议还是一个文件定义一个class类
- 成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值 一般无需指定初始化值,存在默认值
4.如何使用对象
-
类和对象是什么
-
类:是共同特征的描述(设计图),
-
对象:是真实存在具体实列
-
如何得到对象
- 拿到对象后能做什么?
- 拿到对象后可以获取成员变量的值,或者给成员变量赋值
- 拿到对象后可以让成员方法帮我们做事情
5.封装
- 拿到需求之后,精确的定义属性与方法
对象代表什么,就得封装对应的数据,并提供数据对应的行为
- private关键字
- 是一个权限修饰符
- 可以修饰成员
- 被private修饰的成员只能在本类中才能访问
- 利用get/set方法保护数据
- set:给成员赋值
- get: 用于获取成员变量的值
6.this关键字
- 把变量定义在方法里它就是局部变量
- 而把变量定义在类当中就是成员变量
就近原则:
输出时有同一个相同的变量名,就会使用就近原则,使用最近的变量名
在输出时加上this. 输出语句就会输出成员变量中的变量
7.构造方法
在创建对象的时候给成员变量进行赋值
- 作用:在创建对象的时候给成员变量初始化的.
构造方法是在定义变量时会直接被调用
如果我们自己没有写如何的构造方法;那么虚拟机给我们加一个空参构造方法
public class gaozao1 {
private String name;
private int age;
public gaozao1 (){
}
public gaozao1(String name, int age){
this.name = name;
this.age = age ;
}
public String getName() {
return name;
}
public void setName(String name){
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age){
this.age = age;
}
}
注意事件
- 构造方法的定义
- 如果没有定义构造方法,系统将给出一个默认的无参数构造方法
- 如果定义了构造方法,系统将不会再提供默认的构造方法
2.构造方法的重载
- 带参构造方法,和无参构造方法,俩者方法名相同,但是参数不同,这叫构造方法的重载
3.构造方法的使用方式
- 无论是否使用,都手动书写无参数构造方法,和带全部参数的构造方法
总结
- 创建对象的时候,由虚拟机自动调用,给成员变量进行初始化的.
2.无参数的构造方法:初始化对象时,成员变量的数据均采用默认值
3.有参数的构造方法:在初始化对象的时候,同时可以为对象进行赋值
4.如何类定义出来默认就带了无参数构造器
5.一旦定义了有参数的构造器,由系统提供的默认无参数构造器就没有了,此时就需要自己写无参数构造器
6.在写构造器时必须都手动写上无参数构造器和全部参数构造器方法
创建对象的时候,虚拟机会自动调用构造方法,作用是给成员变量进行初始化的
8.标准 JavaBenan
- 类名需要见名知意
- 成员变量使用private
- 提供至少两个方法
-
无参构造方法
-
带全部参数构造方法
4.成员方法
- 提供一个成员变量对应的 set() get()
-
有其他行为,也需要写上
快捷键
alt + insert
alt+fn+inser
9.面向对象内存
- 字节码文件加载时进入 方法区(元空间)
- 调用方法运行时就会进入栈空间,使用后会从栈空间出去
- 在new时new出来的东西就会在堆中开辟一个空间并会产生一个地址值
一个对象的内存步骤
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Os50NKTg-1669532926340)(image-20221123171355070.png)]
- 加载class文件
- 申明局部变量
- 在堆内存中开辟一个空间
- 默认初始化
- 显示初始化
- 构造方法初始化
- 将堆内存中的地址值赋值给左边的局部变量
基本数据类型
- 是直接记录被赋值的值,数据值是存储在自己的空间中的
- 赋值给其他的变量,也是赋值的真是的值
引用数据类型
- 记录堆中的地址值,从而根据地址值去获取相应的值
- 赋值给其它变量时,赋值的是地址值
this的内存原理
this作用:区分局部变量和成员变量
this的本质:所在方法调用者的地址值
this是指向调用者使用的地址值
成员变量和局部变量的区别
}
public void setAge(int age){
this.age = age;
}
}
### 注意事件
1. 构造方法的定义
- 如果没有定义构造方法,系统将给出一个默认的无参数构造方法
- 如果定义了构造方法,系统将不会再提供默认的构造方法
2.构造方法的重载
- 带参构造方法,和无参构造方法,俩者方法名相同,但是参数不同,这叫构造方法的重载
3.构造方法的使用方式
- ==无论是否使用,都手动书写无参数构造方法,和带全部参数的构造方法==
### 总结
1. 创建对象的时候,由虚拟机自动调用,给成员变量进行初始化的.
2.无参数的构造方法:初始化对象时,成员变量的数据均采用默认值
3.有参数的构造方法:在初始化对象的时候,同时可以为对象进行赋值
4.如何类定义出来默认就带了无参数构造器
5.一旦定义了有参数的构造器,由系统提供的默认无参数构造器就没有了,此时就需要自己写无参数构造器
6.在写构造器时必须都手动写上无参数构造器和全部参数构造器方法
==创建对象的时候,虚拟机会自动调用构造方法,作用是给成员变量进行初始化的==
## 8.标准 JavaBenan
1. 类名需要见名知意
2. 成员变量使用private
3. 提供至少两个方法
- 无参构造方法
- 带全部参数构造方法
4.成员方法
- 提供一个成员变量对应的 set() get()
- 有其他行为,也需要写上
快捷键
alt + insert
alt+fn+inser
## 9.面向对象内存
- 字节码文件加载时进入 方法区(元空间)
- 调用方法运行时就会进入栈空间,使用后会从栈空间出去
- 在new时new出来的东西就会在堆中开辟一个空间并会产生一个地址值
一个对象的内存步骤
![在这里插入图片描述](https://img-blog.csdnimg.cn/b4147c0a50024a3c948b3a5c5435799e.png)
1. 加载class文件
2. 申明局部变量
3. 在堆内存中开辟一个空间
4. 默认初始化
5. 显示初始化
6. 构造方法初始化
7. 将堆内存中的地址值赋值给左边的局部变量
基本数据类型
- 是直接记录被赋值的值,数据值是存储在自己的空间中的
- 赋值给其他的变量,也是赋值的真是的值
引用数据类型
- 记录堆中的地址值,从而根据地址值去获取相应的值
- 赋值给其它变量时,赋值的是地址值
### this的内存原理
this作用:区分局部变量和成员变量
this的本质:所在方法调用者的地址值
this是指向调用者使用的地址值
### 成员变量和局部变量的区别
![在这里插入图片描述](https://img-blog.csdnimg.cn/b70acccd3e634b108f3959d309815deb.png)