java学习
day01
java技术
jdk java开发工具包
在oracle官网下载 jdk下载地址
java环境搭建
安装路径不要由空格,可以更改存储路径
win+r cmd 查看Java版本
Java -version
javac -version
第一个小程序
public class HelloWorld{
public static void main(String[] args{
System.out.println("Hello World");
}
}
javac 编译工具
javac HelloWorld.java
java 执行工具
java HelloWorld
- Java文件名称必须和类名一致,必须是英文模式下的符号,文件以.java为文件后缀
- 常见错误:
- 直接利用记事本写程序的时候,必须勾选“隐藏的项目”和“文件扩展名”,再建立文件时,
- 注意主函数的固定写法
机器语言-汇编语言-高级语言
java的跨平台:一次编译,处处可用
path环境变量用于记住程序路径,方便再命令行窗口的任意目录启动程序
- List item如果path中没有改路径,就会:
- 一般的启动程序都放在bin包里面的
- 电脑-属性-高级系统设置-环境变量-
java项目结构
idea结构:项目-模块-包-类
idea可以调护眼色的背景
使用idea建立项目:建立空项目-建立模块-建立包-类
导入模块 建议先建立一个模块,再将需要导入模块中src内的内容复制粘贴进新模块中
不建议从现有模块中中添加-关联添加
都从黑点打开
删模块是否删除干净?先移除-在去相应的磁盘中去删除 .idea中的modules中的相应模块也可以删除代码 不行就重启验证
- java快速入门,idea简介
- day1总结
空项目-java模块-包-类
day02
-
注释
注释 //ctrl+/ /* / ctrl+shift+/ 文档注释 /** */
out文件存放的时编译后的class文件 -
字面量
字面量-数据在程序中书写的格式
单引号中有且必须有一个字符
双引号中可以没有字符
System.out.println('\n') 会换两行
- 变量 - 存储的数据可以变化
变量定义格式: 数据类型 变量名称 = 初始值
变量相当于一个盒子
int a = 9 ;
变量需要先声明再使用,注意变量的作用域
- 变量范围从生命到}截至,同一个范围中不能定义两个一样的变量,
- 定义的时候可以没有初始值,使用的时候必须有值
-
进制
除二取余法
计算机中按最小单位-字节存储 1B=8b
-
数据类型
-
类型转换
强制类型转换可能会造成数据丢失或溢出
浮点型强转为整型,直接丢掉小数部分,保留整数部分返回
6.API文档下载
documentation文档
API应用程序编程接口
package com.yolo.hello;
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int a = sc.nextInt(); //输入一个整数
System.out.println("HelloWorld");
System.out.println(a);
String b = sc.next(); //输入字符串
System.out.printf(b);
}
}
day03 流程控制
无限循环
for(; ;)
while(true)
do{}while(true)
跳转循环控制
continue 满足一定条件则continue那么continue后的语句将不会执行,继续下次循环
break 满足条件直接跳出整个循环
day03
数组
数组存储同种类型`
int [ ] array
int array[]
静态初始化:
数据类型[ ] 数组名 = new 数据类型[ ] {元素一,元素二,...}
int[ ] array = new int[ ]{1,2,3...}
int[] age = new int[]{1,2,3,4}
int[] age={1,2,3,4,5} //简写模式
String[] name = new String[]{"zhang","xiao"};
double[] height = new double[]{155.4,160.0};
数组名就是该地址
数组以0开始下标
数组长度 arr.length
利用idea的特性 输入 数组名.fori 会自动补充为 for (int i = 0; i < 数组名.length; i++)
动态初始化
数据类型[] 数组名= new 数据类型[数组长度]
int[] arr =new int[3]; //默认初始化值为null,0,0.0
数组的最小索引0;;最大索引为数组长度-1;
注意:数组的越界访问
找最值-打擂台
int[] ran=new int[101];
for(int i=0;i<=100;i++){
int num=new random(100)+1;//生成1-100的随机数
ran[i]=num;
}
for(int i=0,j=arr.lenth-1; i<j; i++,j--)
//随机索引
Random r=new Random(); //
int randomIndex=r.nextInt(arr.length);
java内存分配:堆,栈,方法区,本地方法栈,寄存器
二维数组
静态初始化
数据类型[][] 数组名 =new 数据类型[][]{{yuansu1,jj}....}
int[][] arr=new int[][]{{11,22},{23,45}}
可以有类似一维数组的简写
int[][] arr={
{1,2,3,4},
{2,31,4,5,6}
}
arr[0]表示二维数组的地址值
前空后不能空
for(int i=0;i<arr.length;i++)
for(int j=0;j<arr[i].length;j++){
}
动态初始化
数据类型[][] arr=new 数据类型[m][n];
int[][] arr=new int[3][2];//创建一个三行两列的数组
手动对一维数组赋值
方法
方法定义-方法调用
调用的时候,注意参数的类型和个数对应
public static 方法类型 方法名(){}
若需要方法的返回值,则方法必有类型
方法之间不能嵌套哦,执行顺序与编写顺序无关
方法类型为void则不能写return,若要写return,则return后不能跟数据;
return后不能有其他代码,return只能存在于方法中,表示结束方法
方法重载
java虚拟机会通过参数的不同来区别他同名的方法
public static void main(String[] args) {
compare(1,2);//比较整数
compare((byte)4,(byte)5);//比较字节
}
public static void compare(int a,int b){
System.out.println(a==b);
}
public static void compare(byte a,byte b){
System.out.println(a==b);
}
System.out.print(arr1[i]+" ");//注意这里的print里面 只能是" "
方法调用的内存原理-栈内存
基本数据类型中存放的是实际数据,
引用数据类型-其他空间的地址值
int[] arr={1,2,3,4}
还有两个练习??
双色球系统
day04
面向对象
类名 对象名=new 类名()
成员方法,成员变量
对象.成员方法/成员变量
- javabean类–用于描述一类事物的类,在javabean中是不写main方法的,
- 编写main方法的类叫做测试类,可以调用javabean中的对象并进行赋值调用
- 类名首字母建议大写,一个java文件中可以定义多个class类,且只能有一个类是public修饰,而public修饰的类名必须成为代码文件名,建议一个文件定义一个class类,
- 成员变量的完整定义格式:修饰符 数据类型 变量名称=初始化值,一般可以没有初始化值
按住alt,竖着选中
封装:
人画圆 人调用画圆的方法,画圆是圆类的方法
private 权限修饰符,可以修饰成员,该成员被修饰之后只能在本类中才能访问
public class girl{
private String name;
private int age;
}
方法一般都是public
成员变量和局部变量的命名重合的时候,使用的时候就近原则,另可以使用this区分
构造方法-- 创建对象时,会自动调用构造方法,并对成员变量进行初始化
- 方法名与类名相同,大小一致
- 没有返回值,没有void
- 没有具体的返回值,所以方法体中没有return语句
- 该方法由虚拟机调用,不能自己手动调用
- 每创建一次对象,就会调用一次
- 由空参构造方法,全参构造方法
- 若没有手动写空参构造方法,虚拟机会自动添上,若只写了有参构造方法,那么虚拟机将不会再添加空参构造方法; 建议自己手动两个都写上
//构造方法
public GirlFriend(){}
public GirlFriend(String name,int age,String sex){
this.name=name;
this.age=age;
this.sex=sex;
}
标准的javabean
- 类名见名知意,成员变量使用private修饰,至少提供两种构造方法(空参+有参),成员方法必须由get/set函数和其他一些方法
- 可以使用快捷键或者利用PTG插件 一键生成常规的代码(get/set等)
字节码文件.class文件会加载时会进入方法区(元空间)
对象的内存图
每识别到一个方法,就加入栈
每识别到一个类就将其字节码文件加载到方法区
student s=new student(); s是引用类型
int[] arr={1,2,3,4} arr也是引用类型
引用数据类型 存放的是地址值
this的基本原理
this-方法调用者的地址值
局部变量-类中方法内的变量
成员变量-类中方法外的变量
System.out.printf("实打实的方式%s","cccc")
注意printf不会换行,用法和c差不多
类似c的gets和scanf
两种体系不能混用
字符串
字符串在lang包里面,字符串中的内容是不会发生改变的,它的对象在创建之后不能更改
String name="sdfs";
String name=new String("sdfs");
System.out.println("sdfs");
//这里一共创建了3个对象
String name="sdfs";
name="sdfs";
//这里一共创建了2个对象
public static void main(String[] args) {
**//== 基本数据类型比较数据值,引用类型比较地址值**
String s1="asd";
String s2="asd";//串池中的地址
String s3=new String("asd");//堆中的地址
String s4=new String("asd");
System.out.println(s1==s2); //t
System.out.println(s2==s3);//f
System.out.println(s3==s4);//f
//equals比较的内容要完全一致返回true;equalsIgnoreCase忽略大小写比较
String s5="Asd";
System.out.println(s1.equals(s5));//f
System.out.println(s1.equalsIgnoreCase(s5));//t
Scanner s=new Scanner(System.in);
System.out.println("请输入asd 进行比较验证:");
String s6=s.next();//new出来的
System.out.println(s1==s6); //f
身份证:省份+城市+区县+出生年月日+派出所+性别+个人信息码
//subString(int begin,int end) 截取 包头不包尾,包左不包右,只有返回值才是截取的小串,原串并没有变化
//subString(int begin) 从5开始截取到末尾
//将字符数字转换为数字
//‘0’--48 ‘1’---49
int nu=sex-48;
System.out.println('0'+0);//48--ASCii
//敏感词替换
//String replace(旧值,新值) 替换 只有返回值才是替换之后的结果
StringBuilder
可以看作是一个容器,创建之后里面的内容是可变的
可以提高效率
String s1=s2+s3+S4;//会产生冗余
//使用StringBuilder的场景:反转,拼接
StringJoiner
可以看作是一个容器,创建之后里面的内容是可变的
可以提高效率,代码简洁
拼接 --有间隔符
方法:
容量和长度
StringBuilder sb=new StringBuillder();
sb.capcity()
sb.length();
集合
自动扩容,可以存储不同类型的数据
可以直接存储引用类型的数据,但是基本类型需要包装之后才能存放
引用类型有STring 数组
ArrayList
泛型–限定集合中存储数据的类型
成员方法:增删改查
ArrayList<String> list =new ArrayList<String>()
ArrayList<String> list =new ArrayList<>() //jdk7之后的
打印这个对象打印的是其中的内容,不是地址值,显示的时候会用[]将其中的内容括起来
sout(list);
添加字符串遍历 格式
添加数字遍历 格式 ---基本数据类型 粗腰包装
包装类
ArrayList<对应基本类型的包装类> list =new ArrayList<String>()
ArrayList<Integer> list =new ArrayList<String>()
P23 43 115 计算机原理