是Java程序的运行时环境,包含JVM和运行时所需的核心类库,我们想运行一个Java程序,只需要安装一个JRE即可。
是Java程序开发工具包,包含JRE和开发人员使用的工具,开发工具:编译工具(javac.exe),运行工具(Java.exe)
(1)定义
(2)作用域
public class Demo1{
//实例对象,作用范围在整个类中,可以不给初始值,会有默认值
String name;
int age=1;
public static void main(String[] args) {
/*局部变量,必须声明且初始化,作用范围只在函数中
在add()方法中不能调用*/
int a=1;
System.out.println(a);
/*main中调用实例对象*/
Demo1 demo=new Demo1();
System.out.println(demo.age);
System.out.println(demo.name);
}
/*其他方法*/
public void add(){
}
}
public class Demo02 {
//常量定义一般用大写字母表示,且修饰符先后顺序无影响,static final或者final static都一样
static final double PI=3.14;
public static void main(String[] args) {
System.out.println(PI);
}
}
public class Demo01 {
//类变量 加static
static double salary=2500;//在main中可以直接输出
//实例变量,从属于对象,必须由对象引用;
String name;
int age;
//main方法
public static void main(String[] args) {
//局部变量,必须声明和初始化
int i=10;
System.out.println(i);
//变量类型 变量名=new Demo01();
Demo01 demo01=new Demo01();
System.out.println(demo01.age);//如果age没进行初始化,会输出默认值0或者0,0.0
System.out.println(demo01.name);//字符串默认16位0000,bool值默认false;除了八个基本类型,其余都是null;
System.out.println(salary);
}
//其他方法,
}
System.out.println("Hello world!");//字符串常量
System.out.println(5);//整数常量
System.out.println(true);//布尔常量
System.out.println('a');//字符常量
//System.out.println(null);//空常量不可直接输出
```java
//整数
byte num1=2;
short num2=4;
int num3=3;
long num4=3l;//long类型后面要加l区分
//小数
float num5=1.4F;//float类型要加F区分
double num6=3.1415926;
//字符,字符串
char name='A';//单引号
String name2="中国";//双引号,String首字母大写
//布尔型
boolean flag=true;
boolean flag2=false;
(1)自动类型转换:把一个表示数据范围小的数值或者变量 赋值给令一个表示数据范围大的变量(2)强制类型转换:可以将表示范围大的转小的:int K=(int)88.8
加+,减-,乘*,除/,取余%,整数相除只能得到整数,想要得到小数,必须用浮点数运算
(1)整数进行运算
int a=6;
int b=4;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
System.out.println(a%b);
(2)字符进行运算,'A’对应的值是65,'a’是97
//字符参加运算
char c='A';
System.out.println(a+c);
//字符串+操作
System.out.println("hello"+"world");
System.out.println("hello"+666);
System.out.println("hello"+666+1);
System.out.println(666+1+"hello");
int i=10;
int j=20;
int k=30;
System.out.println((i>j)&(i>k));
System.out.println((i>j)|(i<k));
2.逻辑与,逻辑或与短路与,短路或的区别:
(1)A&B,A|B:不管A是对是错,后面的B都会继续执行。
(2)A&&B:只要A错了,整体错,B就没必要执行了。
(3)A||B:只要A对,整体对,B也没必要执行了。
格式:关系表达式1?表达式1:表达式2;
如果关系表达式1的值为True:执行表达式1,否则执行表达式2.
(1)Python中数据输入是input()函数,可将输入值赋值给其他变量:name=input("请输入姓名:")
(2)Java中数据输入
导包:
创建对象:接受数据
Scanner sc= new Scanner(System.in);
int i=sc.nextInt();
System.out.println(i);
1.输入三个和尚的身高并求出最高
import java.util.Scanner;
public class demo02 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//输入三个和尚的身高
System.out.println("请输入身高:");
int height1=sc.nextInt();
int height2=sc.nextInt();
int height3=sc.nextInt();
//利用三元运算符求最大身高
int tempheight=height1>height2?height1:height2;
int Maxheight=tempheight>height3?tempheight:height3;
System.out.println(Maxheight);
}
}
Java中的if格式:
if(表达式){
语句体;
}
if(表达式){
语句体1;
}else{
语句体2;
}
if(表达式1){
语句体1;
}else if(表达式2){
语句体2;
}...
else{
语句体n+;
}
Python中的if格式:
if 表达式:
语句体
if condition1:
statment_block_1
elif condition2:
statment_block_2
else:
statment_block_3
"""
如果 "condition_1" 为 True 将执行 "statement_block_1" 块语句
如果 "condition_1" 为False,将判断 "condition_2"
如果"condition_2" 为 True 将执行 "statement_block_2" 块语句
如果 "condition_2" 为False,将执行"statement_block_3"块语句
"""
Java中的switch:
switch(表达式){
case 值1:语句体1;break;
case 值2:语句体2;break;
case 值3:语句体3;break;
default: 语句体4;[break]//此处的break可有可无,执行到default语句后会自动退出
}
Python中的match case:
match subject:
case <pattern_1>:
<action_1>
case <pattern_2>:
<action_2>
case <pattern_3>:
<action_3>
case _:
<action_wildcard>
while循环更适合于循环次数不明确的情况下:
Java语法结构:
while(条件判断语句){
循环体语句;
条件控制语句;
}
python语法结构:
while 判断条件(condition):
执行语句(statements)……
#end关键字,在输出print()中,可以使输出元素在同一行,并用某符号隔开
a,b=0,1
while b<10:
print(b,end=" " )#用空格隔开
"""print(b, end=",") 用逗号隔开隔开"""
a,b=b,a+b
Java语法结构:
for(初始化语句;条件判断语句;条件控制语句){
循环体语句;
}
Python语法结构:
for 临时变量 in 待处理数据集:#每循环一次将待处理数据集中数据赋值给临时变量
<statements>
sites = ["Baidu", "Google","Runoob","Taobao"]
for site in sites:
print(site)
获取随机数:
使用方法:导包,创建对象,使用
import java.util.Random;
Random random=new Random();
int number=random.nextInt(10);//从[0-10)随机选一个数
System.out.println(number);
一次性存储同类型的大量数据
int[] arr//定义了int类型的数组,数组名是arr
(2)数据类型 变量名【】
int arr[]//定义了int类型的变量,变量名是arr数组
int[] arr=new int[3]
//定义了一个int类型的数组,数组名是arr,
//通过new为其申请内存空间,数组内存储三个int性变量
(2)数组内容访问
数组名【索引】:索引值从0开始指向第一个元素
package Array;
public class array_creat {
public static void main(String[] args) {
int[] arr=new int[5];
System.out.println(arr);//输出数组的内存信息
System.out.println(arr[0]);//输出第一个元素
}
}
数组定义时的内存分配图:
取数组内数值时的内存图:
内存回收:栈内的数据使用完会立即被回收,堆不会立即回收
数据类型[]变量名=new 数据类型[]{元素1,元素2,.....}
int[] arr=new int[]{1,2,3}
(3)格式2:
数据类型[]变量名={元素1,元素2,.....}
int[] arr={1,2,3}
当数组内部元素非常多,并且需要逐个输出是,就会用到遍历,通过
数组名.length
获取数组长度,以便在循环中用来控制循环次数。
int[] arr={.......};
for(int i=0;i<arr.length;i++)
{
System.out.printlen(arr[i]);
}
package Array;
public class array_exception {
public static void main(String[] args) {
/* 1. 索引越界:访问数组中不存在的索引对应的元素,造成索引越界问题
ArrayIndexOutOfBoundsException
2. 空指针异常:访问的数组已经不指向堆内存数据,造成空指针异常
NullPointerException
*/
int [] arr=new int[3];
//System.out.println(arr[4]);
arr=null;
System.out.println(arr[0]);
}
}
public static void func_name(数据类型 参数名,....){
//方法体
}
//方法名();
func_name(参数);
def func_name():
#方法体
package Function;
public class Func1 {
public static void main(String[] args) {
int max=Max_num(9,10);
System.out.println(max);
}
//定义一个方法判断两个数值的最大值,并返回最大值
public static int Max_num(int num1,int num2){
if (num1>num2){
return num1;
}else {
return num2;
}
}
}
//参数个数不同
add(int, int)
add(int, int, int)
参数类型不同
add(int, int)
add(int, float)
//参数顺序不同
add(int, float)
add(float, int)
int add(int, int)
float add(int, int)
1.加断点并运行,程序从断点处开始执行:
2.调试:点击控制台的按钮(或F7)逐行执行
3.停止Debug
取消断点,可再次点击一次:
如果断点比较多可通过以下方式:
package API;
import java.util.Scanner;
public class String_Scanner {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一串数据!");
String line = scanner.nextLine();
System.out.println("输入的数据是:"+line);
}
}
定义学生类,Student类包含属性与方法
//学生类
public class Student {
//属性
String name;
int age;
//方法
public void study(){
System.out.println("学生");
}
}
public class application {
public static void main(String[] args) {
//类是抽象的,需要实例化
//类实例化后返回自己的对象
Student student=new Student();
}
}
public class application {
public static void main(String[] args) {
//类是抽象的,需要实例化
//类实例化后返回自己的对象
Student student=new Student();
//具体赋值
student.name="小红";
student.age=20;
System.out.println(student.age);
}
}
class Student:
name=None
gender=None
nationality=None#国籍
native_place=None#籍贯
age=None
#创建对象
student1=Student()
student1.name='张飞
package Test_Demo;
//学生类
public class Student {
String name;
int age;
//一个类即使什么都不写,也会存在一个方法
//无参构造(显示构造器)
public Student() {
}
}//快捷键alt+insert选择constructor进行有参或无参构造
封装是指将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法实现对隐藏信息的操作和访问成员变量private,提供对应的getXxx()/setXxx()方法。
在项目实战中,为了数据的安全性考虑,我们一般都会隐藏代码实现细节,用private来修饰属性,使用private修饰其他类无法访问本类私有化的属性,一般来讲,get是取来值的方法,set是设置值的方法,因为get在英文中有取,拿的意思,而set有设置的意思,所以用源get,set能很形象的明白方法的目的,比如对于一个name属性,getName就是取出这个name的名称,而setName就是设置name的名称定义两个方法:分别是get()和set()方法,当外界需要使用私有成员变量时可以通过调用者两个方法:
(1) 将Student类中的age改成私有之后,测试类中无法调用。
package test;
public class Person01 {
//用private来修饰属性
private String name;
private int age;
//给属性添加get、set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
测试类:
package test;
public class Person02 {
public static void main(String[] args) {
//创建Person01对象
Person01 p1 = new Person01();
//现在我想给Person01的对象属性附上值
p1.name = "张三"; //不能这样赋值 如果给Person01里name的private修饰符去掉就可以这样赋值
//通过set方法赋值
p1.setName("张三");
//是不是每一个set只能赋一个值 如果把Person01类的setAge()方法删掉,那这个就会报错
p1.setAge(18);
//这样拿不到值,会报错
// System.out.println("姓名:"+p1.name+"\n年龄:"+p1.age);
//得通过get方法才能拿到
System.out.println("姓名:"+p1.getName()+"\n年龄:"+p1.getAge());
}
}
结果:
姓名:张三
年龄:18
(3)当定义的私有成员比较多时,不方便一个个手敲,快捷键使用alt+insert:
(4)例如私有成员变量age,可以在set()方法中设置判断语句,防止修改的年龄不符合正常数字,如负数:
public void setAge(int age) {
//this.age = age;
if (age<0||age>120){
System.out.println("输入年龄有误");
}else {
this.age=age;
}
}
Java API:指的是JDK中提供的各种功能的Java类,这些类将底层的实现封装了起来,我们不需要关心这些类如何实现,只需要学习这些类的使用即可,我们可以通过帮助文档来学习这些API.
举例:Scanner类的使用:
部分方法:
String s="abcd"
char[] chs={'a','b','c'};
String s1=new String(chs);
String s2=new String(chs);
//方法二:
String s3="abc";
String s4="abc";
package API;
public class String1 {
public static void main(String[] args) {
//方法一:构造方法的方式得到对象
char[] chs={'a','b','c'};
String s1=new String(chs);
String s2=new String(chs);
//方法二:直接赋值的方法得到对象
String s3="abc";
String s4="abc";
//比较字符串对象地址是否相等
System.out.println(s1==s2);
System.out.println(s1==s3);
System.out.println(s3==s4);
System.out.println("-------------");
//比较字符串的内容是否相等
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println(s3.equals(s4));
}
}
nextline();
字符串名.charAt(i)//i从0开始遍历
,返回char指定索引处的值。 指数范围为0至length() - 1 。 该序列的第一个char值在索引0 ,下一个索引为1 ,依此类推,与数组索引一样。字符串名.length()
package API;
import java.util.Scanner;
public class Sting遍历 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入字符串:");
//CTRL+alter+v自动补全
String line = scanner.nextLine();
for (int i=0;i<line.length();i++){
System.out.println(line.charAt(i));//逐个输出字符
}
}
}
- 接口1的定义
package Demo6;
public interface UserService {
//接口中的所有定义都是抽象的 public abstract
void run(String anme);//定义方法可以不用写public abstract,默认就是
void Delete(String name);
}
//定义完接口后可通过类来实现
package Demo6;
public interface TimeService {
void time();
}
package Demo6;
//快捷键alt+insert选中implment
//实现接口的类必须重写接口中的方法
//接口可以多继承
public class UserServiceImp implements UserService,TimeService{
@Override
public void run(String anme) {
}
@Override
public void Delete(String name) {
}
@Override
public void time() {
}
}
package Demo14;
public class Outer {
private int id=10;
public void out(){
System.out.println("这是外部类方法");
}
//内部类
public class Inner{
public void in(){
System.out.println("这是内部类方法");
}
//内部类方法可以调用外部类中私有属性
public void getID(){
System.out.println(id);
}
}
}
package Demo14;
public class Application {
public static void main(String[] args) {
Outer outer = new Outer();
//通过外部类对象实例化内部类
Outer.Inner inner = outer.new Inner();
}
}
package Demo14;
public class Outer {
private int id=10;
public void out(){
System.out.println("这是外部类方法");
}
}
class A{
}
class B{
}
package Demo14;
public class Outer {
//局部内部类
public void out(){
class A{
}
}
}
package Demo14;
public class Application {
public static void main(String[] args) {
new Apple().eat();
}
}
class Apple{
public void eat(){
System.out.println("1");
}
}