实训日志(Java SE)
文章目录
命名习惯:
//类名 大驼峰 每个英文单词首字母大写 //变量 小驼峰 首个英文档次首字母小写,其他大写
一、基本数据类型
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); } }