Java从入门到放弃系列
学了将近四个月的Java了吧,总要留点什么,不然感觉自己没学过一样。所以,特别的撰写此篇文章来总结一下学习过程中的收获,分享给正在学Java的朋友,希望能对你们有一点帮助。
一、JDK的安装和Java环境变量配置
二、工具介绍
1.JCreator
很久的一款开发工具了,现在也还能用的。对刚入门的新手来说,这个还不错。简单易上手,但是功能不够强大。
关于安装的流程详细请看这里:https://blog.csdn.net/Bertil/article/details/107385842
2.eclipse
这款开发工具算是大多数人所使用的吧,毕竟功能也很强大而且还可以免费安装正版。
关于安装的流程详细请看这里:https://blog.csdn.net/qq_38566465/article/details/79484286
3.IDEA
这个就很nb了,除了前面两个所拥有的基本功能外,还有可以制作前端网页设计等等,功能十分强大,深受广大后端开发者的喜爱。当然了,功能越强大所占内存也会更多,所以使用这个的话前提是要保证自己电脑的CPU承受的住。此外,IDEA的激活也会受到限制,持有校园企业邮箱的学生可以直接激活正版,其他的情况我也不是很清楚了,具体上网搜。
关于安装的流程详细请看这里:https://blog.csdn.net/weixin_43184774/article/details/100578786
工具只是个辅助,能力才是关键。我的Java授课老师曾遇到过有个学生可以用记事本直接打出很长的代码来,这就是强者的境界吧。但前提是要安装好JDK和配置好环境变量,然后才能在字符终端编译和运行程序;其次,基础肯定要很扎实,毕竟没了代码辅助功能。
三、关于API文档下载及其使用方法说明
1.下载
关于下载的流程详细请看这里:https://blog.csdn.net/Bertil/article/details/107335554
2.使用方法说明
此次难以说清,直接上图(资料来源于:Java程序设计基础第六版实验指导书)
四、Java基础知识
(一)数据类型
数据类型分为两种:基本数据类型和引用数据类型(也称复合数据类型)
1.基本数据类型
整型: byte short int long
浮点型: float double
逻辑型: boolean
字符型:char
2.引用数据类型
包括类、数组、接口等。
关于数据类型的介绍详细请看这里:https://blog.csdn.net/Bertil/article/details/107386628
(二)关键字与标识符
1.关键字
2. 标识符及其命名规则
标识符:用来表示变量名、类名、方法名、数组名和文件名的有效字符序列 。
命名规则:
(1)可以由字母、数字、下划线(—)、美元符号($)组合而成。
(2)必须以字母、下划线或美元符号开头,不能以数字开头。
(3)关键字不能当标识符使用。
(4)区分大小写。
编码习惯:类名首字母大写,变量、方法及对象首字母小写。
(三)数据类型转换
一般分为自动转换和强制转换两种。
1.自动类型转换
①转换前的数据类型与转换后的类型兼容。
②转换后的数据类型的表示范围比转换前的类型大。
条件②说明不同类型的数据进行运算时,需先转换为同一类型,然后进行运算。转换从“短”到“长”的优先关系为:
byte→short→char→int→long→float→double
2. 强制类型转换
如果要将较长的数据转换成较短的数据时(不安全),就要进行强制类型转换。强制类型转换的格式如下:
关于数据类型的转换详细请看这里:
(四)键盘输入操作
Scanner是一个专门用于输入操作的类,可以使用该类输入一个对象。
例如:
Scanner reader = new Scanner(System.in);
int a = reader.nextInt();
创建的reader对象可以调用nextInt()方法来读取用户从键盘上输入的int型数据,也可用reader对象调用下列方法,读取用户在键盘上输入的相应类型的数据:
nextByte()
nextDouble()
nextFloat()
nextInt()
nextLong()
nextShort()
next()
nextLine()
此外,reader对象还可以调用nextByte()、nextFloat()、nestDouble()、nextInt()等。
next×××()被调用后,则等待用户在命令行输入数据并按回车键(或空格键、Tab键)确认。
next()和nextLine()方法表示等待用户在键盘上输入一行文本,然后返回一个String类型的数据。
next()和nextLine()区别:
next():一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,它将自动将其去掉,只有在输入有效字符之后,该方法才将其后输入的这些符号视为分隔符。
nextLine():结束符为Enter键,即返回Enter之前的所有字符。
(五)运算符与表达式
关于运算符与表达式的详细请看这里:
(六)三种注释方法
(七)流程控制
1.顺序、分支、循环三种结构
关于三种结构的详细请看这里:
2.循环中的跳转语句
break语句:使程序的流程从一个语句块(switch或循环结构)内跳出。
continue语句:终止当前这一轮(次)的循环,进入下一轮(次)循环。
return语句:用来使程序从方法(函数)中返回,并返回一个值。
五、Java中的类与对象
(一)面向对象和类的定义
1.类(Class)和对象(Object)是面向对象程序设计方法中最核心的概念。
类是对某一类事物的描述(共性),是抽象的、概念上的定义;而对象则是实际存在的属该类事物的具体的个体(个性),因而也称为实例(Instance) 。类描述了对象的属性(静态特征)和对象的行为(动态特征)。而对象(Object)则是类(Class)的一个实例(Instance),是个实实在在的个体。
新手刚学面向对象这块时理解起来可能会有点抽象,但是可以通过做一些简单的类设计基础题来促进理解。面向对象程序设计思想的重点是类的设计,而不是对象的设计。
(二)面向对象的基本特征
1.封装性 : 利用抽象数据类型将数据和基于数据的操作封装在一起,保护数据并隐蔽具体的细节,只保留有限的接口与外界联系。
2.继承性:使特殊类(子类)的对象拥有一般类(父类)的全部属性与方法,同时可以增添自 身的属性和方法。
3.多态性:一个程序中同名的多个不同方法共存的情况。常用重载和覆盖。
(三)定义类的语法
类的访问控制符只有public; abstract和final相互对立,不能同时应用在一个类的定义中。
下面看一个实例——圆柱体类的定义。
class Cylinder //定义圆柱体类Cylinder
{
double radius; //声明成员变量radius
int height; //声明成员变量height
double pi=3.14; //声明数据成员pi并赋初值
void area( ) //定义成员方法area(),用来计算底面积
{
System.out.println("圆柱底面积="+ pi*radius* radius);
}
void volume( ) //定义成员方法volume (),用来计算体积
{
System.out.println("圆柱体体积="+((pi*radius* radius)*height);
}
}
(四)局部变量和成员变量的区别
1.从语法形式上看,成员变量属于类,而局部变量是方法中定义的变量或方法的参数;成员变量可以被public、private和static等修饰,而局部变量则不能,二者都可以被final修饰。
2.从变量在内存中的存储方式看,成员变量是对象的一部分,对象是存储在堆内存的,局部变量存于栈。
3.从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在;局部变量随着方法的调用而产生,随着方法调用的结束而消失。
4.成员变量若没有被赋初值,则自动初始化默认为0(用final修饰的但没有被static修饰的成员变量必须显式赋值);局部变量不会自动赋值,必须显式赋值。
(五)对象的创建和使用
1.创建对象的步骤
声明指向“由类所创建的对象”的变量;
利用new创建新的对象,并指派给前面所声明的变量。
2.对象的使用
通过对象来引用对象成员的格式如下:
对象名.对象成员
如,volu.radius = 2.8; volu.height = 5;
如果引用的是成员方法,只要在成员方法名的圆括号内提供所需参数即可,如果方法不需要参数,则用空括号。如:volu.area()
一个类多个对象,它们的成员变量分配在不同的内存,因此修改某一对象的成员变量时其他不受影响。
(六)在类定义内调用方法
在同一个类的定义里面,某一方法可以直接调用本类的其他方法而不需加对象名。
若要强调是“对象本身的成员”的话,则可以在成员名前加this关键字,即“this.成员名”。此时this即代表调用此成员的对象例如:
(七)参数的传递方法
1.类的方法既可以有返回值也可以带参数
2.以变量为参数调用方法
3.以数组作为参数或返回值的方法调用
关于参数传递的详细请看这里:
(八)匿名对象
以当一个对象被创建之后,在调用该对象的方法时,也可以不定义对象的引用变量,而直接调用这个对象的方法,这样的对象叫做匿名对象。
例如,若将
Cylinder volu=new Cylinder();
volu.SetCylinder(2.5, 5,3.14);
改写为:
new Cylinder().SetCylinder(2.5, 5,3.14);
则Cylinder()就是匿名对象。
以使用匿名对象通常有如下两种情况:
1.如果对一个对象只需要进行一次方法调用。
2.将匿名对象做为实参传递给一个方法调用。
例:一个程序中有一个getSomeOne()方法要接收一个MyClass类对象作为参数,方法的定义如下:
public static void getSomeOne (MyClass c)
{
……
}
可以用下面的语句调用这个方法。
getSomeOne(new MyClass( ) );
(九)Java异常处理机制
1.异常处理的基本概念
2.Java异常处理机制
关于Java异常处理的详细请看这里:https://blog.csdn.net/Bertil/article/details/106402047
六、OJ经典例题实战
(一)对象排序
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sin = new Scanner(System.in);
int count,weight;
String name;
if(sin.hasNextInt())
count = sin.nextInt();
else
{
System.out.println ("error input");
return;
}
if(count <= 0)
{
System.out.println ("error input");
return;
}
Cat[] catArray = new Cat[count];
for (int i = 0; i<count; i++)
{
name = sin.next();
if(sin.hasNextInt())
weight = sin.nextInt();
else
{
System.out.println ("error input");
return;
}
catArray[i] = new Cat(name,weight);
}
Cat.printCats(catArray);
Arrays.sort(catArray, new CatNameComparator());
Cat.printCats(catArray);
Arrays.sort(catArray, new CatWeightComparator());
Cat.printCats(catArray);
}
}
class Cat{
String name;
int Weight;
public Cat(String name,int Weight){
this.name = name;
this.Weight = Weight;
}
public static void printCats(Cat[] catArray){
for(int i = 0;i < catArray.length;i++){
System.out.println ("name="+catArray[i].name+" "+"weight="+catArray[i].Weight);
}
System.out.println ();
}
}
class CatNameComparator implements Comparator<Cat>{
public int compare(Cat c1,Cat c2){
return c2.name.compareTo(c1.name);
}
}
class CatWeightComparator implements Comparator<Cat>{
public int compare(Cat c1,Cat c2){
return c2.Weight - c1.Weight;
}
}
(二)String类中的常用方法
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String str1 = reader.next();
String str2 = reader.next();
if(str1.equals(str2))
System.out.println ("true");
else
System.out.println ("false");
int idx,count=0;
idx=str1.indexOf(str2);
while(idx>=0)
{
idx=str1.indexOf(str2,idx+str2.length());
count++;
}
System.out.println (count);
int lastIndex = str1.lastIndexOf(str2);
System.out.println (lastIndex);
String newstr1 = str1.toUpperCase();
System.out.println (newstr1);
String newstr2 = str2.toLowerCase();
System.out.println (newstr2);
int num1=0;
for(int i=0;i<str1.length();i++)
{
if(Character.isDigit(str1.charAt(i)))
num1++;
}
System.out.println (num1);
int num2=0;
for(int i=0;i<str2.length();i++)
{
if(Character.isLetter(str2.charAt(i)))
num2++;
}
System.out.println (num2);
System.out.println (str1.replace("abc","cde"));
}
}
本文地址:https://blog.csdn.net/Bertil/article/details/107334869
下一篇: Junit5单元测试
推荐阅读
-
DIY从入门到放弃:主板避坑简单三步走
-
MyBatis从入门到精通(十一):MyBatis高级结果映射之一对多映射
-
小白学 Python 爬虫:自动化测试框架 Selenium 从入门到实战
-
Oracle数据库从入门到精通 单行函数问题
-
Python编程 从入门到实践 练习6-1~练习6-3
-
荐 「「 Python从入门到实践 」」学习笔记(连载中)
-
荐 「「 Python从入门到实践 」」学习笔记(连载中)
-
从入门到高端!AMD Radeon RX 500系列移动显卡全解析
-
JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识
-
从入门到放弃:python爬虫系列-xpath解析库的使用