目录
基础知识:
基本框架:
注释:
关键字:
字面量:(数据类型)
变量:
注意事项:
计算机的存储规则:
基础语法:
标识符:
键盘录入:
IDEA项目结构的介绍
算数运算符:
判断和循环
顺序结构
分支结构
if语句
switch语句格式
while循环
循环结构
数组
数组的静态初始化
数组的地址值和元素访问
数组元素访问
数组的动态初始化
二维数组
二维数组的动态初始化
Arrays 类
方法
方法的定义
带返回值方法的调用
注意事项:
方法的重载:
面向对象
类和对象
如何定义类
如何得到类
如何使用对象
面向对象的进阶
封装
Java内存分配介绍
从内存的角度去解释
this的内存原理
成员变量和局部变量的区别
函数的调用;
random
字符串
创建String对象的两种方式
字符串的比较
好玩
使用 SimpleDateFormat 格式化日期
public class ywj1 {
public static void main(String[] args){ //快捷 psvm 回车
System.out.println("Hello world"); //快捷键 sout 打印 换行
System.out.print("Hello world"); //打印 不换行
}
}
//格式化代码 CTRL+Alt+l
// arr.fori 循环数组快捷键
//CTRL + Alt + M 自动抽取方法
//shift + F6 变量的批量修改
// 单行注释
/* 多行注释 */
/** 注释信息 **/
被Java赋予特定含义的英文单词
关键字的字母全部为小写
常用的代码编辑器,针对关键字有特殊的颜色标记,非常直观
class //用于(创建/定义)一个类,类是Java最基本的组成单元 //class + 类名
告诉程序员:数据在程序中的书写格式
System.out.println(123) //输出整数
System.out.println('a') //输出字符
System.out.println("abc") //输出字符串
/*拓展:
\t 制表符 在打印的时候,把前面的字符串的长度补齐到8,或者8的倍数。最少补1个空格,最多补8个空格
布尔 boolean
*/
// 数据类型 变量名 = 数据值;
int a = 10;
double b = 10.00;
String name //字符串
Boolean
只能存一个值
变量名不允许重复定义
一条语句可以定义多个变量
变量在使用之前一定要进行赋值
变量的作用范围
在计算机中,任意数据都是以二进制的形式来存储的
/*
二进制 0b 开头
十进制 不用加任何前缀
八进制 以 0 开头
十六进制 以 0x 开头 由0-9 a-f组成
*/
由数字、字母、下划线和美元符($)组成
不能以数字开头
不能是关键字
区分大小写
/*- 小驼峰命名法:方法、变量 例如: name firstName - 大驼峰命名法:类名 Student GoodStudent */
//导包 导包的动作必须出现在类定义的上边
import java.util.Scanner;
//创建对象 表示我要开始用Scanner这个类了
Scanner sc = new Scanner(System.in); //sc是变量名 可以变 其他都不允许改变
//接收数据 真正开始干活了
int i = sc.nextInt(); //这个格式里,只有i是变量名,可以变,其他都不允许改变
project (项目)
module(模块)
package(包)
class(类)
数字进行运算时,数据类型不一样不能不能运算,需要转成一样的,才能运算
隐式转换
需要注意的一点是:如果把一个取值范围打的数值,赋值给取值范围小的变量。是不允许赋值的。如果一定要这么做就需要加入强制转换。
(格式:目标数据类型 变量名 = (目标数据类型)被强制转的数据;)
"+" //字符串出现时为连接符 从左到右逐个执行 ++ //作用 加 ;变量的值加1 -- //变量的值减1
/*
if(关系表达式){
语句体;
} else if(关系表达式){
}
...
else{
语句体;
}
*/
switch(表达式){
case 值1:
语句体1;
break;
case 值1:
语句体1;
break;
....
default:
语句体N+1;
break;
}
/*
1、default 不一定要写在最下面 但是习惯性写在下面 2、case 穿透 所以要记得写 break
/*
初始化语句;
while(条件判断语句){
循环体语句;
条件控制语句;
}
*/
for( ){
}
while(){
}
do{
}while(true)
//格式一:数据类型 [] 数组名
int [] array
//格式二:数据类型 数组名 []
int array []
char [] arr = new char[100]; //定义一个数组长度为100的数组
初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程 完整格式 :数据类型[ ] 数组名 = new 数据类型[ ] { 元素1,元素2,元素3...}
简化格式:数据类型[ ] 数组名 = { 元素1,元素2,元素3...};
int[] array = new int[]{1,2,3};
//简化格式
int[] array ={1,2,3};
doble[] array1 = new double[]{1,2,3};
int [] arr = {1,2,3,4,5};
System.out.println(arr); //此时输出的是数组的地址值
int [] arr = {1,2,3,4,5};
int n = arr[0]; //获取数组中的数据
System.out.println(n);
arr[1] = 100; //把数据存到数组当中
//遍历打印
for(int i=0;i
动态初始化:初始化是只指定数组长度,由系统数组分配初始值
格式:数据类型[ ] 数组名 = new 数据类型[数组长度]
/*
格式;数据类型[][] 数组名 = {{元素1,元素2},{元素1,元素2}};
eg: int[][] arr = {{11,22},{33,44}};
int arr[][] = {{11,22},{33,44}};
type[][] typeName = new type[typeLength1][typeLength2];
int[][] a = new int[2][3];
给数组赋值:通过 fill 方法。
对数组排序:通过sort 方法,按升序。
比较数组:通过== equals ==方法比较数组中元素值是否相等。
查找数组元素:通过binarySearch 方法能对排序好的数组进行二分查找法操作。
方法(method)是程序中最小的执行单元(实际上就是自己写的函数)
什么时候会用到方法?
就是把重复的代码,具有独立功能的代码可以抽取到方法中。
实际开发中,方法有什么好处?
提高代码的重复用性
提高代码的可维护性
/*
格式
public static void 方法名(){ //void视情况而定
方法体(就是打包起来的代码);
//return 返回值;
}
调用:(必须先定义后调用,否则程序会报错)
方法名();
*/
/*
直接调用:
方法名(实参);
赋值调用:
整数类型 变量名 = 方法名(实参);
输出调用:
System.out.println(方法名(实参));
*/
方法不调用就不执行
方法与方法之间是平级关系,不能互相嵌套
方法的编写顺序和执行顺序无关
方法的返回值类型为void,表示方法没有返回值,没有返回值可以省略return语句不写。如果要写return,后面不能跟具体的数据。
return语句下面,不能编写代码,因为永远执行不到,属于无效的代码。
return关键字
方法没有返回值:可以省略不写。如果书写,表示方法结束
方法有返回值:必须要写。表示结束方法和返回结果。
同一个类中,方法名不同,参数不同的方法。与返回值无关。
参数不同:个数不同、类型不同、顺序不同。
好处;
定义方法的时候不需要那么多单词
调用方法的时候也不需要那么麻烦了
找东西解决问题就叫面向对象
类(设计图):是对象共同特征的描述
对象:是真实存在的具体实例
public class 类名{ 1、成员变量(代表属性,般是名词) 2、成员方法(代表行为,一般是动词) 3、构造器 4、代码块 5、内部类 }
类名 对象名 = new 类名();
访问属性:对象名.成员变量名
访问行为:对象名.方法名(...)
补充:
用来描述一类事物的类,专业叫做:Javabean类
在Javabean类中,是不写main方法的。
在以前,编写main方法的类,叫做测试类
我们可以在测试类中创建Javabean类的对象并进行赋值调用。
类名首字母建议大写,需要见名知意,驼峰模式;
一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。
实际开发中建议还是一个文件定义一个class类
成员变量的完整定义格式是:修饰符 数据类型变量名称 = 初始化值;一般无需指定初始化值,存在默认值。
告诉我们,如何正确设计对象的属性和方法
对象代表什么,就得封装对应的数据,并提供数据对应的行为
好处?
让编程变得简单,有什么事情,找对象,调方法就行。
降低我们的学习成本,可以少学、少记,或者说压根不用学,不用记对象有哪些方法,有需要时去找就行。
private关键字
是一个权限修饰符,为了保证数据的安全性
可以修饰成员(成员变量和成员方法)
被private修饰的成员只能在本类中才能访问
针对于每一个私有化的成员变量,都要提到get和set方法
set方法:给成员变量赋值
get方法:对外提供成员变量的值
//作用:给成员变量name进行赋值
public void setName(String n){
return name;
}
//作用;对外界提供name属性的
public String getName(){
return name;
}
this关键字
可以区分成员变量和局部变量
就近原则
System.out.println(age) //就近原则
System.out.println(this.age) //不会到局部位置去找 只会调用成员位置的
构造方法
构造方法也叫构造器、构造函数
作用:在创建对象的时候,由虚拟机自动调用,给成员变量进行赋值(初始化)的
格式:
/*
piblic class Student{
修饰名 类名(参数){
方法体;
}
}
*/
特点:
方法名与类名相同,大小写也要相同
没有返回值类型,连void都没有
没有具体的返回值(不能由return带回结果数据)
注意事项
构造方法的定义
如果没有定义构造方法,系统将给出一个默认和无参数构造方法
如果定义了构造方法,系统将不再提供默认的构造方法
构造方法的重载
带参构造方法,和无参构造方法,两者方法名相同,但是参数不同,这叫做构造方法的重载
推荐的使用方式
无论是否使用,都都手动书写无参数构造方法,和带全部参数的构造方法
标准Javabean
类名要见名知意
成员变量使用private修饰
提供至少两个构造方法
无参构造方法
带全部参数的构造方法
成员方法
提供每一个成员变量对应的setXxx()/getXxx()
如果还有其他行为,也需要协商
快捷键
可以快速插入私有化的全名变量
// alt +insert //或者 alt + Fn + insert
插件:1秒生成标准Javabean
文件—>设置—>插件—>在Maketplace中搜索 ptg —>安装
栈内存
方法运行时所进入的内存,变量也是在这里
堆内存
new出来的东西在这块内存中开辟空间并产生地址
方法区
字节码文件加载时进入的内存
本地方法栈
寄存器
基本数据类型
数据值时存储在自己的空间中
特点:赋值给其他变量,也是赋的真实的值
引用数据类型
数据值是存储在其他空间中,自己空间中存储的是地址值
特点:赋值给其他变量,赋的地址值
this的作用:区分局部变量和成员变量
this的本质:所在方法调用者的地址值
成员变量:类中方法外的变量
局部变量:方法中的变量
主要是自己遇到的和使用过的
Random r = new Random(); //随机生成一个整数数 赋值给 r
import java.util.Random;
public class dd {
public static void main(String[] args) {
int n = 10;
while(n!=0){
//随机生成一个整数
Random r = new Random();
//定义生成的整数的范围是1~20;
int rr = r.nextInt(20) + 1;
System.out.println(rr);
n = n -1;
}
}
}
/*
random.nextInt(int n)
随机生成一个int值,该值介于[0,n)之间,也就是0-n之间的随机数,包括0不包括n
随机生成0-9的数:random.nextInt(10)
随机生成1-10的数:random.nextInt(10)+1
*/
随机点名
import java.util.Random;
public class ee {
public static void main(String[] args) {
Random random = new Random();
String[] names = {"刘备","曹操","关羽","张飞","赵云","孙权"};
//通过随机生成的数来定义下标,从而为随机选取
int index = random.nextInt(names.length);
System.out.println("随机抽取到的名字为:" + names[index]);
}
}
随机输出10个1~100之间的数
random.ints(0,100).limit(10).sorted().forEach(System.out::println);
API:应用程序编程接口
String的注意点:
字符串内容是不会发生改变的,它的对象在创建之后不能被更改
/*
直接赋值:
String name = "张三";
new:
//空参构造
String s = new String();
基本数据类型:比的书数据值
引用数据类型:比的是地址值
boolean res = s1.equals(s2); //判断s1和s2是否相等
boolean res = s1.equalsIgnoreCase(s2);//比较字符串对象中的内容是否相等 忽略大小写
package test;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date Now = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM- hh:mm:ss");
System.out.println("当前时间为:" + simpleDateFormat.format(Now));
}
}