第一章 Java入门
1. java的三大应用场景
Java SE:标准版,c/s
Java EE:企业版,web开发
Java ME:移动版
2.特点
面向对象的、开源的、支持垃圾回收、跨平台(支持多种操作系统)的高级编程语言。
简单的、面向对象的、分布式的、解释型、健壮的、安全的、结构中立的、可移植的、高效的、多线程语言。
3. jdk jvm jre
jvm: java虚拟机; 利用软件技术模拟的一台计算机; 借助虚拟机实现跨平台
jre:java运行环境;一系列的jar包;java程序要想运行,必须jre环境
jdk: java开发包;jvm+jre+一系列工具组件(程序) java.exe,java.exe...
运行原理:![](https://i-blog.csdnimg.cn/blog_migrate/c2030af3854a0b8bacd99de6bae90e75.png)
4.数据类型
数据类型:不同的类型在内存中占据的存储空间是不一样的
大类别:8种基本类型、引用类型
基本数据类型
-
整形:根据存储范围的不同:byte(字节、8bit、-128~127,-27~2)、short(短整型,16bit)、int(整形,4字节,21亿)、long(长整形,8字节)
-
浮点型:float(单精度) double(双精度)
-
字符型:char 单引号引起来的字母、汉字或数字
-
布尔型:boolean 取值:true/false 用来当成条件判断的结果使用
引用数据类型
字符串:String、数组、自定义类
5.声明变量
第一种方式:
//数据类型 变量名; //变量名=值; int num; num=2;
第二种方式:
//数据类型 变量名=值; int num=2;
变量名的命名规则:
1.由字母、数字、下划线、$符号构成;
2.不能以数字开头。即字母、下划线和$符号开头;
3.不能使用java中的关键字;
public static void main(String [] args)//方法体 { //声明变量 赋值 byte bt1=127; int a=10; char sex='男'; long lg=100; float f1=3.14f; double b1=3.14; boolean bln=true; //未经赋值的变量 不能直接使用 System.out.println(a); System.out.println(sex); }
6.各种类型的运算符
算术运算符:+
-
*
/
%
++
--
后置即(i++或i--
)优先级最低,先进行其他运算,再进行自增运算
关系运算符:>=
<=
<
>
!=
==
逻辑运算符:&&
与 ||
或 !
非
赋值运算符:=
+=
*=
/=
%=
条件运算符:?:
int money=120; String role=money>1000?"女主角":"路人甲"; /*if(money>1000) { role="女主角"; } else { role="路人甲"; }*/ System.out.println(role);
优先级:一元运算符>算术>关系>逻辑>赋值>条件
public static void main(String[] args) { int num=100; int num1=num++; System.out.println(num1); System.out.println(num); if(++num>=101) { System.out.println("猜对了"); } }
7.类型转换
表达式中不同类型的数据在运算时会进行转换:
1、隐式转换(自动):小类型----->大类型;byte---->short--->int--->long; float---->double
2、显式转换(强制):大类型----->小类型;long--->int--->short--->byte;double--->float
int a=10; double d=20.9898; a=(int)d;
字符串类型转换:
String str1="100"; int a=Integer.parseInt(str1); System.out.println(a);
8.流程控制语句
if if else if else if ... else... switch(a) { case a: }
判断三条边能否构成三角形
int a=10,b=20,c=30; if(a+b>c&&a+c>b&&b+c>a) { System.out.println("新三角形"); } else { System.out.println("不成啊"); }
根据money绝对如何做
int money=10000; if(money<10000) { System.out.println("上交"); } else if(money>=10000&&money<=20000) { System.out.println("留下2000"); } else if(money>20000&&money<30000) { System.out.println("留下3000"); } else { System.out.println("...s"); }
switch
int num=1; switch(num)//switch里可填类型 byte,short,int,char,String { case 1: System.out.println("金奖"); break; case 2: System.out.println("银奖"); break; case 3: System.out.println("铜奖"); break; default://缺省,默认 System.out.println("好惨"); }
第二章 流程控制和循环语句
1、程序执行顺序
顺序执行:从上到下、从左到右;
选择判断:需要根据条件去判断执行某一分支
循环:重复,循环
2、控制台输入
步骤:
1、创建Scanner对象;导入包
//扫描器:类名 对象名(自己定义)=new 构造方法(System.in); Scanner sc=new Scanner(System.in);
2、提示输入信息
System.out.println("请输入用户的年龄");
3、调用Scanner中的方法,获取各种类型的数据
String name=sc.next();//获取字符串 int age=sc.nextInt();//获取整形 double height=sc.nextDouble();//获取double
public static void main(String[] args) { System.out.println("请输入用户的名字"); //创建 Scanner对象 //扫描器:类名 对象名(自己定义) =new 构造方法(System.in); Scanner sc=new Scanner(System.in); String name=sc.next();//获取字符串 System.out.prinln("请输入用户的年龄"); int age=scanner.nextInt();//获取整形 System.out.println("请输入用户的身高"); double height=scanner.nextDouble();//获取身高 System.out.println("名字是:"+name+"年龄是:"+age+"身高是:"+height); }
3、分支语句
-
if
-
if....else
-
多重if...else
-
swith
4、循环语句
重复执行的过程称为循环。
计算机的计算能力、执行速度、记忆能力很强。可代替人进行遍历和累加。
循环分类:
1.while
int i=1; while(i<=10) { System.out.prinln("hello"+i); i++; }
2.do--while
int i=1; do{ System.out.println("我喜欢JAVA"); i++; }while(i<=10);
3.for
for(int i=1;i<=10;i++) { System.out.println("这是for循环"); } //执行顺序 //1、int i=1; //2、i<=10;若成立进入循环主题 //3、循环体 //4、i++; //重复2~4,直至2不满足条件,退出循环
while 与 do--while的区别:
1、while先判断再执行
2、do---while 先执行一次,然后再判断
应用场景:
循环次数明确的情况下一般使用for循环,不明确则使用 while 或 do---while
循环输入5次成绩,求出平均成绩、最大成绩、最小成绩
public static void main(String[] args) { Scanner sc = new Scanner(System.in); int soc; int sum=0; int min=101; int max=-1; for (int i=1;i<=5;i++) { System.out.println("请输入第" + i + "个成绩"); soc=sc.nextInt(); sum+=soc; if (soc<min) { min=soc; } if (soc>max) { max=soc; } } System.out.println("平均成绩:"+sum/5+" 最大值:"+max+"最小值:"+min); }
5、跳出循环
break
:终止循环
利用break
打印出出素数
public static void main(String[] args) { int j,count=0; for (int i=1;i<=1000;i++) { for (j=2;j<i;j++) { if (i%j==0) { break; } } if (i==j) { System.out.print(i+"\t"); count++; if (count==5) { System.out.println(); count=0; } } } }
continue
:终止本次,继续下次循环
利用continue
同时求出奇数和 偶数和
public static void main(String[] args) { int sum1=0,sum2=0; for(int i=0;i<=100;i++) { if (i%2==0) { sum2+=i; continue; } sum1+=i; } System.out.println("奇数和为:"+sum1+" 偶数和:"+sum2); }
注意:break与continue后的语句均不会执行
6、循环嵌套
//外层循环执行一次,内层循环执行一轮 for(int i=1;i<=9;i++) { for(int j=1;j<=9;j++)//控制一行打印多少“*” { System.out.print("*\t"); } System.out.prinln(); }
百钱百鸡问题
public static void main(String[] args) { int x,y,z; for (x=0;x<20;x++) { for (y=0;y<33;y++) { z=100-x-y; if (z==300-15*x-9*y) { System.out.println("公鸡"+x+"只 母鸡"+y+"只 小鸡"+z+"只\n"); } } } }
鸡兔同笼问题
public static void main(String[] args) { int x,y; for (x=1;x<35;x++) { y=35-x; if (4*y+2*x==94) { System.out.println("鸡有"+x+"只 兔有"+y+"只"); } } }
水仙花数
ublic static void main(String[] args) { int a,b,c; for (int i=100;i<=999;i++) { a=i%10; b=i/100; c=i/10%10; if (a*a*a+b*b*b+c*c*c==i) { System.out.println(i); } } }
第三章 类和对象
1、认识类和对象
对象:对现实生活一个个体的描述。
属性:对象的特征
方法:特定的行为
类:对一系列具备相同的属性和行为的对象的描述。
类和对象的关系
类:实例化--->得到对象
对象:抽象---->类
2、创建类
创建学生类:
1、类名:首字母大写(Pascal命名法)
//语法:访问修饰符 类关键字 类名 //public:公有的,可以被任意其他类使用 //public修饰的类名要和文件名保持一致 public class Student{ //1、属性:变量 char sex; int age; double height; String hobby; //2、方法 /*访问修饰符:public 公有的 *返回值类型:void 无返回值 *方法名:自己定义 驼峰命名法 *参数: *{方法体} */ public void playGame() { System.out.println("在玩游戏"); } }
2、属性:定义在类中的变量
类型 | 默认值 | 说明 |
---|---|---|
String | null | 空地址,空引用 |
int | 0 | |
double | 0.0 | |
char | 空格:\0 | |
boolean | false |
3、方法
//2、方法 语法:访问修饰符 返回值类型 方法名(参数){方法体} /*访问修饰符:public 公有的 *返回值类型:void 无返回值 *方法名:自己定义 驼峰命名法 *参数: *{方法体} */ //方法的使用:1、定义方法 2、调用方法 //1、无参数、无返回值的方法 //定义: public void playGame() { System.out.println("在玩游戏"); } //调用: public static void main(String[] args) { Student student = new Student(); student.name="大力"; //对象.方法名(); student.study(); } //2、无参数、有返回值的方法 //定义: public String buy(){ System.out.println("拿钱"); System.out.println("去宠物店"); System.out.println("买宠物"); String pig="小猪"; //return :返回 具体的值(要和规定的返回值类型保持一致) ;结束方法的运行 return pig; } //调用: public static void main(String[] args) { Student student = new Student(); student.name="大力"; //对象.方法名(); //student.study(); //声明变量 接受返回值 String result=student.buy(); System.out.println("吃红烧肉:"+result); System.out.println(student.buy()); } //3、有参数、无返回值的方法 //定义: //定义中的参数:形参 public void study2(String course,int hour){ if(hour<12){ System.out.println(name+"在学习"+course); } else { System.out.println("游戏攻略:"+course); } } //调用: public static void main(String[] args) { Student student = new Student(); student.name="大力"; String course="前端"; int hour=16; //调用带参数的方法 //调用时必须按照规定提供相同类型,相同个数,实际的数据 student.study2(course,hour); } //4、有参数、有返回值的方法 //定义: /** * 买苹果 * @param money 钱 * @return 苹果的个数 */ public int buyApple(int money){ if(money<10){ return 2; }else if(money>10&&money<20){ return 5; } return 20; } //调用: public static void main(String[] args) { Student student = new Student(); student.name="大力"; int num= student.buyApple(50); System.out.println(student.name+"买入苹果:"+num); }
方法的调用
1、同类中的方法如何调用
直接写方法名
方法名(); 有参数传参数,无参数不用传
2、不同类中的方法相互调用
先创建对象,然后对象名.方法名(); 有参数传参数,无参数不用传
3、创建对象
public static void main(String[] args){ //创建对象 //类:自定义的数据类型,等同于int,double等 //语法:类名 对象名=new 类名(); //引用类型 //栈:先进后出;空间小,读取速度快;存储基本数据类型和引用类型 //堆:空间大,读取速度相对慢;存储对象 Student stu=new Student(); //操作属性 :通过对象去访问属性 student1.name="小文"; student1.sex='男'; student1.age=18; student1.hobby="吹拉弹唱"; System.out.println(student1.name+student1.sex+student1.age+student1.hobby); //调用方法 student1.playGame(); System.out.println(student1); Student student2=new Student(); //操作属性 :通过对象去访问属性 student2.name="小宝"; student2.sex='男'; student2.age=18; student2.hobby="吃喝玩乐"; System.out.println(student2.name+student2.sex+student2.age+student2.hobby); //调用方法 student2.playGame(); }