一.知识总结
1.学习jdk的配置
1.1
下载地址为: Java Downloads | Oracle
使用JDK 17.0.2,适用的时间可到2024年。
1.2
配置与验证
以window11为例,右键我的电脑—属性—在高级系统设置中找到环境变量—系统变量中新建变量名为JAVA_HOME,变量值为你下载jdk存放的路径(进入到“\jdk-17”即可,无需进入bin)—接着找到Path,编辑,新建一个“%JAVA_HOME%\bin”。
键盘同时按住“win”和“R” ,打开运行输入“cmd”打开命令行,在命令行中输入java -version后出现以下
java version "17" 2021-09-14 LTS
Java(TM) SE Runtime Environment (build 17+35-LTS-2724)
Java HotSpot(TM) 64-Bit Server VM (build 17+35-LTS-2724,
mixed mode, sharing)
表明配置成功,也可输入javac进行测试
2.数据类型与表达式
2.1
数据类型包括基本类型与引用类型
基本类型:又分为整数类型(byte,short,int,long),浮点类型(float,double),字符类型(char),和布尔类型(boolean).
他们的区别在于区间不同,布尔类型只有真true假false。Char类型有时要查ASCII码表。有时也要强制转换。
引用类型:类(class),接口(interface),集合(array).
2.2
运算符
+(加/连接),-(减),*(乘), /(除),%(取余)
逻辑运算符 &&(与), ||(或), !(非)
比较运算符 !=(不等于), >(大于), >=(大于等于), <(小于), <=(小于等于), ==(等于)
移位运算符>>, <<等
自增++,自减--,+=相加赋值(其他运算同理)。
2.3
表达式
例如:int a=5;int a=x>y?x:y
3.程序结构
条件语句(If语句,If...else if...语句)
switch语句
switch(表达式){
case值1:{}
case值2:{}
}
:(如需跳出用break)
循环语句
1.
while(条件){
}
2.
do {
}
while(条件)
3.
for(条件){
}
死循环时用while循环较多
4.数组应用
4.1一维数组
定义:数据类型[] 数组名 / 数据类型 数组名[]
4.2静态初始化
int[] array; // 声明一个int类型数组
array = new int[]{1,2,3,4,5}; // 静态初始化数组
int[] array = new int[]{1,2,3,4,5}; // 声明并初始化数组
简写:
int[] array = {1,2,3,4,5}; // 声明并初始化一个int类型的数组
4.3动态初始化
int[] array = new int[10]; // 动态初始化数组
在数组声明的同时分配一块内存空间供该数组使用,其中数组长度是10,由于每个元素都为int型数据类型
4.4数组长度与遍历
长度:数组名.length
遍历:for(int i=0;i<数组名.length;i++) {
System.out.println(d[i]);
}
4.5二维数组
二维数组的声明:
int[][] array;
int array[][];
二维数组动态初始化的实例如下:
array=new int[3][2]; // 动态初始化3*2的二维数组
array[0]={1, 2}; // 初始化二维数组的第一个元素
array[1]={3, 4}; // 初始化二维数组的第二个元素
array[2]={5, 6}; // 初始化二维数组的第三个元素
二维数组静态初始化的示例如下:
array=new int[][]{
{1},
{2, 3},
{4}
};
对于二维数组的静态初始化也可用另一种形式,具体示例如下:
int[][] array={
{1},
{2, 3},
{4}
};
遍历:
for(int x=0; x<数组名.length; x++) {
for(int y=0; y<数组名[索引].length; y++) {
//把元素累加即可。
sum += arr[x][y];
}
}
5.方法
5.1定义
修饰符 返回值类型 方法名([参数类型 参数名1,参数类型 参数名2,…]) {
方法体
return 返回值;
}
必须有return关键字,return后的返回,必须与返回值类型一致。
5.2调用
直接调用方法名;//方法名()
如果有参数要输入参数;//方法名(参数1,参数2...)
6.类
6.1类的定义
class 类名{
属性类型 成员变量名; // 成员变量(对象属性)
…
修饰符 返回值类型 方法名([参数列表]) { // 成员方法(对象行为)
// 方法体
return 返回值;
}
}
6.2对象的创建与使用
类名 对象名= new 类名();
对象名.成员变量;
对象名.成员方法();
6.3类有三大特性
封装性,继承性,多态性
6.4构造方法
构造方法名与类名相同。
构造方法没有返回值类型。
构造方法中不能使用return返回一个值。
每次定义构造方法要先定义一个无参构造,再根据需求构建有参构造。
6.5static关键字与final关键字
static关键字表示静态的,用于修饰成员变量、成员方法以及代码块,如用static修饰main()方法。灵活正确地运用static关键字,可以使程序更符合现实世界逻辑。
在Java中,为了考虑安全因素,要求某些类不允许被继承或不允许被子类修改,这时可以用final关键字修饰。它可用于修饰类、方法和变量,表示“最终”的意思,即用它修饰的类、方法和变量不可改变,具体特点如下:
-
- final修饰的类不能被继承。
- final修饰的方法不能被子类重写。
- final修饰的变量是常量,初始化后不能再修改。
6.6代码块
代码块是指用大括号“{}”括起来的一段代码,根据位置及声明关键字的不同,代码块可分为普通代码块、构造代码块、静态代码块和同步代码块,其中同步代码块在第7章进行讲解。
6.7内部类
在Java中,类中除了可以定义成员变量与成员方法外,还可以定义类,该类称作内部类,内部类所在的类称作外部类。根据内部类的位置、修饰符和定义的方式可分为成员内部类、静态内部类、方法内部类以及匿名内部类4种。
内部类有3点共性:
1.内部类与外部类经Java编译器编译后生成的两个类是独立的。
2.内部类是外部类的一个成员,因此能访问外部类的任何成(包括私有成员),但外部类不能直接访问内部类成员。
3.内部类可为静态,可用protected和private修饰,而外部类只能用public 和默认的访问权限。
6.8类的继承
格式如下:
class 子类名 extends 父类名 {
属性和方法
}
Java使用extends关键字指明两个类之间的继承关系。子类继承了父类中的属性和方法,也可以添加新的属性和方法。
Java语言只支持单继承,不允许多重继承,即一个子类只能继承一个父类,否则会引起编译错误,具体示例如下:
class A {}
class B {}
class C extends A, B {}
Java语言虽然不支持多重继承,但它支持多层继承,即一个类的父类可以继承另外的父类。因此,Java类可以有无限多个间接父类,具体示例如下:
class A {}
class B extends A {}
class C extends B {}
6.9 this与super关键字
类在定义成员方法时,局部变量和成员变量可以重名,但此时不能访问成员变量。为避免这种情形,Java提供了this关键字,表示当前对象,指向调用的对象本身。
当子类重写父类方法后,子类对象将无法访问父类被重写的方法。如果在子类中需要访问父类的被重写方法,可以通过super关键字来实现,其语法格式如下:
super.成员变量
super.成员方法([实参列表])
在继承中,实例化子类对象时,首先会调用父类的构造方法,再调用子类的构造方法,这与实际生活中先有父母再有孩子类似。子类继承父类时,并没有继承父类的构造方法,但子类构造方法可以调用父类的构造方法。在一个构造方法中调用另一个重载的构造方法使用this关键字,在子类构造方法中调用父类的构造方法用super关键字,其语法格式如下:
super([参数列表])
7.Pta实践总结
7.1
示例1
循环-乘法运算
接收一个正整数N,然后打印输出:N个等式,形如:i(1->N)N=iN 格式的数据。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int a=sc.nextInt(); //只有一个正整数N
for(int i=1;i<=a;i++){
//输出共N行数据,形式如:i (1->N)*N=? 格式的表达式。
System.out.println(“”+i”*”+a+”=”+(i*a));
}
}
}
输入:
4
输出:
1*4=4
2*4=8
3*4=12
4*4=16
示例2
直角坐标系象限判断
X是一个喜欢数学的小孩,现在刚刚学了坐标系。
他想知道点(X,Y)在第几象限内。输入数据保证点不在坐标轴及原点上。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()){
//每组输入两个整数X,Y,代表点(X,Y)
int x= sc.nextInt();
int y= sc.nextInt();
if (x>0&&y>0){ //第一象限条件
System.out.println("1");
}else if (x<0&&y>0){ //第二象限条件
System.out.println("2");
}else if (x<0&&y<0){ //第三象限条件
System.out.println("3");
}else { //第四象限条件
System.out.println("4");
}
}
}
}
输入:
2 3
-2 -3
输出
1
3
示例3
水仙花数
编写程序打印出所有的水仙花数。所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3。 输出的数之间用“,”(英文半角的逗号)分割。
153,370,371,407
public class Main {
public static void main(String[] args) {
int count=0;
for (int i = 100; i < 1000; i++) {
int a=i/100; //百数位置的数字
int b=i%10; //个位位置的数字
int c=(i/10)%10; //十位位置的数字
if (Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)==i){
//Math.pow(a,3)为a的三次方,其他同理相加得到水仙花数
count++;
System.out.print(i);
if (count<4){
System.out.print(",");
}
}
}
}
}
7.2
在线评测感受:
我感觉每次做完pta都有一种满足感,对于java的每一次学习与了解都有很好的意义,主要是锻炼了我们的算法能力,每周固定的次数,能够让我们很好的坚持学习。但是每次如果有错,我都会查很久,系统并没有很明确告诉你哪里错误,虽然这也能很好的让我们学会去找错但对于萌新来说很痛苦。但是总体来说在线评测我十分的接受与认可。
三.改进学习方法、措施落实情况
8.1
除课堂外,遇到不会我会求助csdn这个平台,或者bilibili。
8.2
没有记录无法做表,但是之前没结课时,每天都保持着学习Java,虽然可能时间不长。
8.3
对于算法的理解不好,我很容易把问题复杂化,导致会浪费太多时间,碰到问题容易钻牛角尖,不会往回想。加强我的算法能力,我觉得敲代码是一件枯燥的事情,但是还是要坚持每天去学习,才能够巩固知识,要学会解决枯燥,每天保存新鲜。
四.CSDN
9.1
内容丰富,多方面,兼顾各计算机语言,方便,直观。
9.2
有些文章要钱才能进去,有广告,评论区隐藏的太深不好与其他人交流学习
9.3
用bilibili,有视频,有老师带,直观方便可重复观看
五.阻力
10.1
难以理解,导致太受挫,看到别人卷到很远就会丧失动力。所以我不去过度关注别人,知道有些人的天赋比较好,先学了就好,然后自己再慢慢学,不要被影响,要追着他的步伐。
六.其他
针对课程的学习,之后会尽力去参加一些比赛给自己的简历加分,然后继续学习加深java,努力毕业后能找到一个更好的工作。