实训日志(Java SE)
文章目录
- 实训日志(Java SE)
- 一、基本数据类型
- 二、选择结构
- 三、循环结构
- 四、方法
- 五、数组
- 六、面向对象
- 1、对象
- 2、类
- 3、类的使用
- 七、三大特性
- 1、封装
- 2、继承
- 3、多态
- 八、接口
- 1、接口
- 2、实现
- 九、集合
- 1、List 接口
- 2、Set
- 3、Map
命名习惯:
//类名 大驼峰 每个英文单词首字母大写
//变量 小驼峰 首个英文档次首字母小写,其他大写
一、基本数据类型
1、基本数据类型:
- 整形:byte,short,int,long
- 浮点类型:float(单精度),double(双精度)
//浮点少用
BigDecimal bigdecimal;//一般用这个,可自定义小数点后几位
- 布尔类型:boolean(取值:true/false)
boolean flag=true;
if(flag==true){//这个语法是错误的,虽然能输出
System.out.println("真!");
}
//正确用法;
if(flag){
System.out.println("真!");
}
- 字符:char
2、强制类型转换:
- 小转大无错误
int num2=byte2;//小转大无错误
byte byte2=(byte)num2;//大转小需强制类型转换,但可能会出现数据错误
3、基本输入输出
Scanner scanner=new Scanner();//来自util.Scanner包 System.out.println("请输入:"); int print=scanner.nextInt();
二、选择结构
- if-else
if(条件表达式)
{
复合语句A; //if体
}
else
{
复合语句B; //else体
}
- switch-case
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
}
三、循环结构
- 方式一:先判断条件,再执行循环体
while(){
}
- 方式二:先执行循环体,再判断
do{
}whlie()
for(初始值;循环条件;变更条件){
}
四、方法
- 具有特定功能的代码------>专职专能
- 重复性的代码
一、语法:
public static void add(参数1,参数2){}
- 权限修饰符 public
- private 私有的、default 默认、protected 受保护的、public 公开
- 静态 static
- 表示静态代码块
- 返回值类型 void
- 基本数据类型、对象、String等、void无返回值
- 有返回值:return 只有一个结果,结果类型和返回值类型保持一致
- 参数列表
- 形式参数列表;具体传入的值成为实参
- 递归
- 自身调用自身、要有跳出条件
- 经典例子:斐波那契数列、冒泡排序、选择排序、快速排序、归并排序
public static int factorial(int num){
//num = 5 --> 5*fa(4) fa(4)=4*fa(3)
//跳出条件
if(num==1){
return 1;
}
return num * factorial(num:num-1);
}
五、数组
- **定义:**一组数,一组数据类型相同的数
int arr[]=new int [6]//数组一经定义,长度无法改变
arr=new int [12];//arr 存储的是首地址
/*
6:数组长度
下标:数据在数组中的位置 从0开始
new:对象 开辟新的内存空间
Scanner scanner=new Scanner(); Scanner()为构造方法
*/
//赋值 如果指定下标位置没有赋值,会存在一个相应类型的默认值
arr[0]=1;
arr[1]=2;
//数组遍历
for(int i:arr){//增强for循环,快捷键arr.i加回车
System.out.println(i);
}
for(int i=0;i<arr.length();i++){//普通for循环
System.out.print("arr["+i+"]:"+arr[i]+" ");
}
//创建数组
//创建并初始化
int[] arr1= new int[]{1,2,3,4,5};//长度为5
System.out.println("数组长度:"+ arr1.length);
int[] arr2={1,2,3,4,5}
六、面向对象
万物皆对象
1、对象
- 特征:属性、姓名、身高、体重等。
- 行为:动作、吃饭、跑步、学习等。
2、类
- 一组具有相同特征或者行为的对象
public class Person{
String name;
int age
float height;
float weight;
/*
构造方法:有参和无参
方法重载:在一个类中可以定义多个同名方法,方法名相同,参数列表不同
*/
public Person(){//无参构造
}
public Person(Sting name,int age, float height,float weight){
this.name=name;//this关键字,指代当前类的对象
this.age=age;
this.height=height;
this.weight=weight;
}
//方法:就是行为
public void eat(){
System.out.println("胡辣汤、胡椒粉、油条、肉盒");
}
public void run(){
System.out.println("跑了10公里");
}
public Sting toString(){
return "name:"+name+"age:"+age+"height:"+height+"weight"+weight;
}
}
3、类的使用
public static void main(String[] args){
//new 申请内存空间 Person()构造器 类加载器
Person person =new Person();
person zcy= new Person("赵琛洋",20,180,160);
person jyl= new Person("贾元龙",21,185,160);
}
七、三大特性
1、封装
- 尽可能的隐藏对象内部的实现过程,只提供外部的访问方法。
- 给属性加上私有、同时提供有的方法。
public class Student{
//封装
private int age;
private int number;
private String name;
}
//右键Genernate生成get(),set()方法,构造方法
//类中有默认的无参构造方法
//类中有有参构造方法就必须有无参构造方法
public Student() {
}
public Student(int age, int number, String name) {
this.age = age;
this.number = number;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
2、继承
- 方法重载:如果父类的方法不能满足子类的需求,子类可以重构方法。
Emp emp =new Emp();
emp.eat();//调用的是重构后的方法。
- 子类可从父类获取公共(public)的变量、私有(private)无法使用。
Public class Emp extends Person{
String addr;//变量一经赋值才能使用
String desc;
public Emp(){
super();//指代父类 调用父类的无参构造方法
}
//前四个属性来自父类
public Emp(String name,int age,float height,float weight,String addr,String desc){
super(name,age,height,weight);//指代父类 调用父类的有参构造方法
this.addr=addr;
this.desc=desc;
}
@Override
/*
override 重写注解
*/
public void eat(){
System.out.println("烩面、水煎包");
}
}
3、多态
- 父类的引用指向子类的对象
- 父类创建子类的空间,并不能调用子类的方法,只能访问父类的方法和属性
- 在任意需要父类对象的位置,都可以用子类代替
Person person1= new Emp();
person1.printColor();//只能用父类的方法
Emp emp =new Emp();//子类和父类的方法都可以使用
emp.print();
emp.printColor();
八、接口
1、接口
- 就是一种约定(常常放在DAO包中)
- 可以看做特殊的类
- interface 关键字
- 内部只存在抽象类:只有方法的声明,没有实现
- 属性:公开静态不可更改
- 如果要实现一个接口,需要实现接口中所有的抽象方法
- java是一门单继承语言,一个类只能有一个直接父类。
- java是一门多实现语言,接口可以有多个实现的子类,接口可以多继承。
public static final int age;
abstruct 、static 、final,请自行查阅相关资料
public interface PersonDao{
public abstract Person getPerson();//未省略修饰符和抽象关键字
Person setPerson();//省略写法
}
2、实现
- 在DAO包中再新建一个impl包后新建类
Public class PersonDaoImpl implements PersonDao{//abstract省略了
@Override
public Person getPerson(){
System.out.println("获取接口对象");
return null;
}
@Override
public Person setPerson(){
System.out.println("设置接口对象");
return null;
}
}
九、集合
1、List 接口
- ArrayList:查询快、增删慢;底层是一个数组,ArrayList是一个可扩容的数组;每次扩容的大小为1.5倍。
- LinkedList:查询慢,增删快;内存空间是片段的。
public class Test_arraylist{
public static void main(String[] args){
//List<object> 泛型 指定当前集合所存储的数据类型 基本数据类型
//Object 基类 超类 目前已知所有类的父类
List<String> list = new ArrayList<>();
//使用方法
//添加
list.add("饭");
list.add("肉");
//获取元素 下标从0开始
list.get(0);//返回下标为0的元素值
//集合的长度
list.size();
//返回指定元素的下标位置
list.indexOf("饭");
//设置|修改值
list.set(1,"蜜雪冰城");
//移除元素,下标和值都可以,若不存在会发生越界错误
list.remove(0);
//将一个集合的值赋值到另一个集合中。
list.all();
//清空
list.clear();
//判空
list.isEmpty();
//判断是否包含某元素
list.contains();
}
}
2、Set
- 特点:元素不允许重复。
- HashSet:底层是一个哈希表(散列表)。
- TreeSet:底层是一个树结构。
public class Test_Set{
public static void main(String[] args){
Set<Integer> set =new HashSet<>();
set.add(1);
set.add(1);//只会存储一个
}
}
3、Map
- 特点:键值对 双边队列 一个键对应一个值 键是唯一的
- HashMap
- TreeMap
- HashTable
public class Test_map{
public static void main(String[] args){
Set<String,Object> hashMap =new HashMap<>();
//key 底层是一个Set集合(会自动校验,不允许出现重复值)
//Objetc 各种数据类型
//添加元素
hashMap.put("姓名","赵琛洋");
//修改元素 如果当前键已存在,则覆盖其对应的值
hashMap.put("姓名","李浩楠");
//删除
hashMap.remove("姓名");
//判断是否包含当前key值
hashMap.containsKey("性别");
//判断是否包含value值
hashMap.containsValue("男");
//替换
hashMap.put("姓名","贾元龙");
hashMap.replace("姓名","刘金昌");
//返回所有的key的集合
Set<String> strings=hashMap.keySet();
//map的遍历,还有其他方式
for(String s:hashMap.keySet()){
System.out.println(s+" : "+hashMap.get(s));
}
//map的遍历
Set<Map.Entry<String,Object>>entries = haseMap.entrySet();
System.out.println(entries);
}
}