非原创,记录学习过程,为方便自己后期复习
目录
1.Java基础概念
2.运算符
3.判断
4.循环
5.循环高级
6.数组
7.数组的内存图
8.方法
ctrl+alt+L 自动格式化代码
为什么要配置环境变量?
我们想在任意目录都可以打开指定软件,就可以把软件的路径配置到环境变量中。
打开环境变量:系统——》高级系统设置——》高级(环境变量)——》path(编辑)
下载安装JDK:https://www.oracle.com
1.Java基础概念
1.helloworld小案例
javac编译后用java.exe运行
javac编译后会生成一个新文件
用java运行,不用带后缀
2.关键字、字面量、变量
3. 计算机的存储规则
任意数据都是以二进制存储的
文本:数字(转二进制),字母(查询码表),汉字(查询码表)
图片:通过每一个像素点中的RGB三原色来存储
声音:对声音的波形图进行采样再存储
4.数据类型
数据类型相同,取值范围不同 。
如果要定义long类型的变量,在数值后面加一个L后缀(long m=99999999L)。
如果要定义float类型的变量,在数值后面加一个后F缀(float m=10.1F)。
5.标识符
标识符:就是给类、方法、变量等起的名字。
6.键盘录入
Java中有个Scanner类,这个类可以接收从键盘输入的数字。
练习:从键盘输入两个整数,并打印出两者之和。
7.IDEA
2.运算符
练习:从键盘输入三位数,获取其中百位、十位、个位。
1.隐式转换和强制转换
2.自增自减运算符++,--
3.赋值运算符
4.短路逻辑运算符
当左边表达式能确定最终结果,右边表达式就不会参与运行。
5.三元运算符
6.运算符优先级
小括号(),优先于所有。
7.原码反码补码
原码:十进制数据的二进制表现形式,最左边是符号位,0为正,1为负。
原码的弊端:利用原码计算时,如果是整数就没问题,但如果是负数,结果会出错,实际运算方向与正确运算方向相反。
3.判断
如果对布尔类型的变量进行判断,不要用==,直接将变量写到小括号里。
练习:
4.循环
100.fori (快速生成100以内的for循环)
练习:100范围内的偶数和(包括100)
练习:
先执行后判断
5.循环高级
练习:
练习:猜数字小游戏,随机生成1~100的数字,使用程序实现猜出这个数字是多少?
注:括号内的范围是0~99,所以+1,就是1~100
import java.util.Random;
import java.util.Scanner;
public class GuessNumber {
public static void main(String[] args) {
Random r=new Random();
int number= r.nextInt(100)+1;
while (true) {
System.out.println("请输入要猜的数字:33");
Scanner sc=new Scanner(System.in);
int guessunm= sc.nextInt();
if (number > guessunm) {
System.out.println("小了");
} else if (number < guessunm) {
System.out.println("大了");
} else if (number == guessunm) {
System.out.println("猜对了");
break;
}
}
}
}
6.数组
直接打印数组名,是不会出现数组中的值,而是数组的地址值。
1.获取数组元素:数组名[索引]
2.将数据存储到数组中:数组名[索引]=数据/变量 (之前的数据会被覆盖)
数组的遍历:遍历是指取出数据的过程,而不只是简单的打印。
自动快速生成数组遍历:数组名.fori
练习:遍历数组并求和。定义一个数组,存储1,2,3,4,5,遍历得到每一个元素,并求所有元素之和。
public class ArrayText {
public static void main(String[] args) {
int[]array={1,2,3,4,5};
int sum=0;
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
sum=sum+array[i];
}
System.out.println(sum);
}
}
练习:定义一个数组,存储1,2,3,4,5,6,7,8,9,10,遍历得到每一个元素,统计里面有多少个能被3整除的数字。
public class ArrayText {
public static void main(String[] args) {
int[]array={1,2,3,4,5,6,7,8,9,10};
int count=0;
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
if(array[i]%3==0){
count++;
}
}
System.out.println("能被3整除的数字有"+count+"个");
}
}
练习:变化数据。定义一个数组,存储1,2,3,4,5,6,7,8,9,10,遍历得到每一个元素,如果是奇数,则将当前数字扩大两倍,如果是偶数,就将数字变成二分之一。
public class ArrayText {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int count = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] % 2 != 0) {
array[i] = array[i] * 2;
} else if (array[i] % 2 == 0) {
array[i] = array[i] / 2;
}
}
//遍历数组
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
注:一个循环只做一件事情
练习:求最值。一直输组元素为[33,5,22,44,55] ,找出最大值并打印。
public class MaxNumber {
public static void main(String[] args) {
int[] arr = {33,5,22,44,55};
int max=arr[0];
//max的初始化值一定是数组的值
for (int i = 0; i < arr.length; i++) {
if(arr[i]>max){
max=arr[i];
}
}
System.out.println(max);
}
}
练习:生成10个1~100的随机数存入数组。1.求出所有数据和;2.求出平均值;3.统计有多少个数据小于平均值。
import java.util.Random;
public class ArrTest {
public static void main(String[] args) {
int[]arr=new int[10];
int sum=0;
int count=0;
for (int i = 0; i < 10; i++) {
Random r=new Random();
int num=r.nextInt(100)+1;
arr[i]=num;
}
for (int i = 0; i < arr.length; i++) {
sum=sum+arr[i];
}
System.out.println("所有数据和为:"+sum);
int ave=sum/10;
System.out.println("所有数据的平均值:"+ave);
for (int i = 0; i < arr.length; i++) {
if(arr[i]<ave){
count++;
}
}
System.out.println("有"+count+"个数据比平均值小");
}
}
练习:定义一个数组,存入1,2,3,4,5,按照要求调换索引对应元素。交换前1,2,3,4,5;交换后5,2,3,4,1。
public class ArrTest {
public static void main(String[] args) {
int[]arr={1,2,3,4,5};
for (int i = 0; i < arr.length; i++) {
int temp=arr[0];
arr[0]=arr[4];
arr[4]=temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
//1,2,3,4,5交换成5,4,3,2,1
public class ArrTest {
public static void main(String[] args) {
int[]arr={1,2,3,4,5};
for (int i = 0,j= arr.length-1; i<j;i++,j--) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
练习:定义一个数组,存入1~5。要求打乱所有数据的顺序。
import java.util.Random;
public class ArrTest {
public static void main(String[] args) {
int[]arr={1,2,3,4,5};
Random r=new Random();
for (int i = 0; i < arr.length; i++) {
int randomnum=r.nextInt(arr.length);
int temp=arr[i];
arr[i]=arr[randomnum];
arr[randomnum]=temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
7.数组的内存图
栈:方法运行时使用的内存,比如main方法运行,进入方法栈中运行。
堆:存储对象或数组,new来创建的,都存储在堆内存。
8.方法
方法是程序中最小的执行单元。方法和方法是平级关系,不可嵌套。
1.最简单的方法定义, 调用方法:方法名();
2.带参数的方法,调用方法:method(数据,数据)
形参:方法定义中的参数
实参:方法调用中的参数
void就是没有返回值
3.带返回值的方法
return返回值给方法调用处 。return不带参数时,就是结束方法。
方法的重载:
在一个类中,定义了多个同名的方法,这些同名的方法具有同种功能。每个方法具有不同的参数类型或参数个数,这些同名方法,就构成了重载关系。
同一个类中,方法名相同,参数不同的方法。与返回值无关。(参数不同:个数,类型,顺序)
注:调用时可以结合数据类型强制转换。
练习:设计一个方法,求数组的最大值,并将最大值返回。
public class ArrTest {
public static void main(String[] args) {
int[]arr={2,4,6,3,13,15};
int max=getmax(arr);
System.out.println(max);
}
public static int getmax(int[]arr) {
int max=arr[0];
for (int i = 0; i < arr.length; i++) {
if(max<arr[i]){
max=arr[i];
}
}
return max;
}
}
练习:定义一个方法copyOfRange(int[]arr,int from,int to),将数组arr中从索引from(包含from)开始,到索引to(不包括to)结束的元素复制到新数组中,将新数组返回。
public class ArrTest {
public static void main(String[] args) {
int[]arr={2,4,6,3,13,15,10,9};
int[]copy=copyOfRange(arr,3,7); //调用,用一个数组接收数据
for (int i = 0; i < copy.length; i++) { //遍历copy数组
System.out.print(copy[i]+" "); //用print就不会换行,println会换行
}
}
public static int[] copyOfRange(int[]arr,int from,int to) {
int[]arrnew=new int[to-from]; //定义数组
int index=0; //伪造索引
for (int i = from; i < to; i++) {
arrnew[index]=arr[i]; //把原数组arr的从from到to的数据,赋值给arrnew
index++;
}
return arrnew; //返回数组,数据类型要用int[]
}
}
方法的基本内存原理:方法进栈,先进后出
什么是基本数据类型和引用数据类型?
只要是new出来的,都是引用数据类型。在变量里存储的不是真实数据,而是地址值。
传递基本数据类型时,传递的是真实的数据,形参的改变,不改变实际参数的值