基础练习
注意:java类名首字母必须大写、驼峰式命名,必须与关键字区分。所以以后看到首字母大写的一定是一个类。
1.向控制台输出一个字符串
//类文件名前有*符号,示意未保存
public class HelloWorld {
//java程序中一定要有且只有一个main方法
//main方法的标准写法(程序的主入口)
public static void main(String[] args)
{
//args数组是运行程序时的参数列表,参数是字符串,可以有多个,所以必须声明为String数组
System.out.println("Hello World");
//"syso"+自动填充快捷键:换行打印
//println的意思是换行打印,是java语言中的命令,print命令则不换行
System.out.println("Hello World" + "!");
//输出时可以用加号“+”拼接
}
}
注意:java中也是逐行编译的
2.输入练习:用Scanner获取键盘输入
package myNote;
import java.util.Scanner;//引包,不在本包下的类使用时需要引包,用关键字import
public class InAndOut {
public static void main(String[] args)
{
//Scanner:扫描控制台输入的信息
Scanner s =new Scanner(System.in);//创建Scanner对象
int age = s.nextInt();//获取控制台输入的数字
System.out.println(age);
}
}
注意:Scanner对象需要引包,可以先输入代码行,会出现波浪线下滑提示,鼠标移至出错位置,根据提示可以自动引包。如下图。
3. 面向对象的封装:将功能类和主函数分别写在两个类中
3.1 手动封装
功能类举例:
public class Package {
//get方法和set方法封装保护成员
private String sudentName;
private String sudentGender;
//set方法:为成员设置属性
public void setGender(String gender)
{
sudentGender=gender;
}
public void setName(String sudentName)
{
this.sudentName=sudentName;
//java中对于同名变量有就近原则,需要加this指向本类内存
}
//get方法:输出成员属性
public void getName()
{
System.out.println("我的名字是"+sudentName);
}
}
主函数类举例:
public class MainPackage {
public static void main(String[] args)
{
//在主函数类的main方法中声明工具类
ToolPackage tool = new ToolPackage();
tool.setName("Dangerous");
tool.getName();
}
}
运行结果展示:
3.2 自动封装
3.2.1 setter方法和getter方法
系统自带了setter方法和getter方法对选中的数据成员完成set赋值和get取值,步骤如下:
1.进入方法入口
2.选择需要操作的数据成员
3.选中的数据成员已经自动被完成set和get
3.2.2 to string方法:对所有选中的数据成员用一个字符串完成输出
1.进入方法入口
2.选中要操作的数据成员
3.选中的数据成员以某种格式被拼接到一个字符串中作为返回值输出
3.2.3 初始化构造方法
可以对数据成员进行快捷的初始化操作
1.进入入口
2.选中要操作的数据成员(忘记截图了)
3.被选中的成员已经被写好了构造函数
4. 面向对象的交互
4.1 工具类交互举例
package myNote;
import java.util.Scanner;
//写一个简单的用户登录系统
public class Tools {
//欢迎页面
public static void welcome()
{
System.out.println("welcome!");
System.out.println("输入1:登陆");
System.out.println("输入2:注册");
}
//登陆交互
public void control(int order)//输入操作指令
{
Scanner scan = new Scanner (System.in);
switch(order)
{
case 1:
System.out.println("请输入用户名和密码");
System.out.println("输入用户名:");
String name = scan.next();//获取字符串用.next()
System.out.println("输入密码:");
String pwd = scan.next();
if(login(name,pwd))//用户名和密码均匹配
{
System.out.println("登陆成功");
}
else
{
System.out.println("用户名或密码错误");
}
break;
case 2://此处省略不写了
System.out.println("请输入注册信息");
break;
default:
System.out.println("输入操作无效");
break;
}
}
//用户名和密码验证方法
public boolean login(String name, String pwd)
{
//字符串是一个类,不能用if判断相等,要用.equals()方法
if(name.equals("Dangerous")&&pwd.equals("666666"))
{
return true;
}
return false;
}
}
4.2 主函数类举例
package myNote;
import java.util.Scanner;
public class MainDemo {
public static void main(String[] args)
{
Tools t = new Tools();
Scanner s = new Scanner(System.in);
t.welcome();
t.control(s.nextInt());//输入int类型的方法为.nextInt()
}
}
运行结果:
5. 继承
练习:创建Father类为父类,创建一个子类。其中父类属性2个,子类特有的属性1个;父类1个标准动作,子类加一个特有的行为。
5.1 父类部分
package myNote;
public class Father {
//父类属性
protected String name;
protected int age;//private修饰的属性和方法不能被子类继承
//get方法和set方法
public void set(String name, int age)
{
this.name = name;
this.age = age;
}
public void get()
{
System.out.println("my name is : " + name);
System.out.println("I am " + age + " years old.");
}
//父类标准动作
public void love()
{
System.out.println("I love my children.");
}
}
5.2 子类部分
package myNote;
//extends为继承关键字,需要在子类中写明
public class Son extends Father {
//子类特有属性
private int mathScore;
public void setScore(int score)
{
mathScore = score;
}
public int getScore()
{
return mathScore;
}
//子类特有行为:子类可以创建父类没有的方法
public void loveToo()
{
System.out.println("I love my dad too.");
}
//子类可以重写父类的方法
public void love()
{
System.out.println("My dad love me.");
}
//子类可以调用父类的方法
public void introduce()
{
get();//调用父类
System.out.println("my score of math is : " + mathScore);
}
}
5.3 主函数类部分
package myNote;
public class MainDemo {
public static void main(String[] args)
{
Father f = new Father();
f.set("胡英俊", 32);
f.get();
f.love();
Son s = new Son();
s.set("胡图图", 3);
s.setScore(100);
s.introduce();
s.love();
s.loveToo();
}
}
运行结果:
注意:一个子类只能继承一个父类,一个父类可以被多个子类继承(其实还有别的继承方式,但是为了便于学习,这里不提)
6. 接口
6.1 定义接口
定义规范:接口中的所有方法都是抽象方法,不需要方法体。接口本身没有实例对象,只能new一个接口的实现类。实现接口的实现类必须重写接口的抽象方法
package myNote;
public interface Fruit {
//interface:说明接口的关键字
public void grow();//声明抽象方法,没有方法体
}
6.2 实现接口
package myNote;
//用implements关键字指定需要实现的接口
public class Banana implements Fruit {
@Override
public void grow()
{
System.out.println("香蕉长在树上");
}
}
7.多态:同一种事物的不同形态
7.1 用接口实现多态举例
声明接口:
package myNote;
public interface Fruit {
//interface:说明接口的关键字
public void grow();//声明抽象方法,没有方法体
}
声明接口的实现类:
(1)实现类1
package myNote;
public class Banana implements Fruit {
@Override
public void grow()
{
System.out.println("香蕉长在树上");
}
}
(2)实现类2
package myNote;
public class Grape implements Fruit{
@Override
public void grow()
{
System.out.println("葡萄长在藤上");
}
}
主函数类:
package myNote;
public class MainDemo {
public static void main(String[] args)
{
Fruit a = new Banana();
a.grow();
a = new Grape();
a.grow();
}
}
编译结果:
项目问题总结
这个部分是我在写项目的时候总结的一些问题,如果涉及到有的步骤看不懂,需要把jsp部分的笔记了解一下。
1.Data类
在我设计页面填写某人的信息时,出生日期是一个不太容易实现的问题。
表单中的data型数据传给后台仍是String,但因为数据库中设置的类型是日期,我要传回给数据库的必须是JAVA的Data类。那么就涉及到String类和Data类的转化。
首先要知道,适用于我项目Data类的结构是Data(int,int,int)
,我们需要将String转化成整型的年、月、日。
由于字符串比较长,我们先用Long.parseLong(String s)
将字符串转化成长整型,然后可以通过简单的方法(无非就是减法、除法、取余操作一波,这里不细说了,很简单),分别取其前4位、5-6位、7-8位,得到三个整型分别为年、月、日。
但是不是这么容易就结束了,Data类中:第一个int是当前年份-1900,第二个int是当前月份-1,第三个int是当前日期。通过查资料我大概了解了一下,java中第一个int表示距1900年过了多长时间,月份也是有另外的意思,不仅仅是表示年月日,所以我们要进行一定的转换。比如今天是2021年8月18日,那么我的Data类应该这样写:
Data birth = new Data(121,7,18);
本文结束啦,培训内容比较少,但是都是主要的基础知识,写数据库差不多足够了
之后关于java系统的学习是在学校,不确定会不会再写电子笔记了
老样子【新手笔记 欢迎指正】