Java的基本语法下
一、Scanner和Random
1.Scanner:用于键盘键入值。
使用步骤:
a.导包:import java.util.Scanner;
b.创建对象:Scanner sc = new Scanner(System.in);
c:键入数据:int input = sc.nextInt();
2.Random:用于产生随机数
a.导包:import java.util.Random;
b.创建对象:Scanner rd = new Random();
c:键入数据:int number = sc.nextInt(10);//获取数据的范围【0,10)
二、数组
存储同一种数据类型的多元素的容器。
1.定义格式:
a.数据类型[] 数组名;定义了一个int类型的数组,数组名是arr。
b.数据类型 数组名[];定义了一个int类型的变量,变量名是arr数组。
2.数组初始化:所谓数组初始化,就是为数组开闭内存空间,并为数组中的每一个元素赋予初始值。
a.动态初始化:只给出长度,由系统给出初始值。
数据类型[] 数组名 = new 数据类型[数组长度];
b.静态初始化:给出初始化值,由系统决定长度。
数据类型[] 数组名 = {值1,值2,值3…};
3.数组中常见的异常:
4.二维数组:
存储的元素是一维数组的数组。
二维数组的遍历:
public class Teste2 {
public static void main(String[] args) {
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
for(int i = 0;i<arr.length;i++) {
for(int j = 0;j<arr[i].length;j++) {
System.out.println(arr[i][j]);
}
}
}
}
三、Java中的内存分配
1.栈:存储的是局部变量(定义在方法中的变量),使用完毕立即回收。
2.堆:存储的是New出来的东西,实体,对象。
a.每一个对象都有地址值。
b.每一个对象的数据都有默认值。
byte、short、int、long:0
float、double:0.0
char:’\u0000’
boolean:false
引用类型:null
c.使用完毕会在垃圾回收器空闲的时候被回收。
3.方法区:面向对象进阶,存放.class字节码文件。
4.本地方法区:和系统相关。
5.寄存器:给CPU使用。
四、Java中的方法
1.方法的调用:
(1)有明确返回值的调用
a.单独调用没有意义。b.输出调用,有意义,但我可能需要拿到结果进行进一步操作。
c.赋值调用。
(2)void修饰的方法只能单独调用。
2.方法的重载:在同一个类中,出现了方法名相同的情况。
(1)方法重载的特点:方法名相同,参数列表不同(参数的个数,参数对应的数据类型不同),与返回值无关。
(2)调用:Java虚拟机会 通过参数列表的不同来区分同名的方法。
3.方法的参数传递:
a.如果方法的参数是基本数据类型,形式参数的改变不影响实际参数。
public class Test3 {
public static void main(String[] args) {
int a = 10;
int b = 20;
change(a,b);
System.out.println("a:"+a+"b:"+b);
}
public static void change(int a,int b) {
a = b;
b = a+b;
System.out.println("a:"+a+"b:"+b);
}
}
//输出:
a:20b:40
a:10b:20
b.如果方法的参数是引用数据类型,形式参数的改变直接改变实际参数。
五、面向对象思想:
一个对象的内存图解
多个对象的内存图解:
成员变量和局部变量的区别
/ | 在类中的位置不同 | 在内存中的位置不同 | 生命周期不同 | 初始化值不同 |
---|---|---|---|---|
成员变量 | 在类中,方法外 | 在堆内存(成员变量属于对象) | 随着对象的创建而存在 | 有默认的初始值 |
局部变量 | 在方法定义中或方法声明上 | 在栈内存中(局部变量属于方法) | 随着方法的调用而存在 | 没有默认的初始值,必须定义赋值再使用 |
六、类和对象的细节:
1.private关键字的由来及使用(封装)
(1)使用private关键字的原因:通过对象直接访问成员变量,会存在数据安全问题,使用private关键字能够不让外界的对象直接访问成员变量。
(2)private是一个访问权限修饰符,可以修饰成员变量和成员方法,被private修饰的成员只能在本类中被访问。
(3)针对private修饰的成员变量,相应的提供了getXxx()和setXxx()用于获取和设置成员变量的值。
public class Student {
String name;
//int age;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
if(0>age||age>200) {
System.out.println("输入的年龄有误");
}
}
public void show() {
System.out.println("姓名是:"+name+",年龄是:"+age);
}
}
public class StudentDemo {
public static void main(String[] args) {
Student s = new Student();
s.show();
s.name = "安逸";
//s.gae = -28;
s.setAge(28);
s.show();
}
}
2.this和super关键字:
(1)== this关键字 ==:如果有局部变量和成员变量名相同,在局部使用的时候,采用的是就近原则,这个时候就要使用this关键字来打破就近原则。
this代表所在类的对象的引用,方法被哪个对象调用,this就代表哪个对象。
this关键字的使用场景:局部变量隐藏成员变量。
(2)== super关键字 ==:
3.构造方法:
(1)方法名和类名一样,没有返回值类型,连void都没有,没有具体的返回值。
(2)注意事项:
a.如果我们没有给出构造方法,系统将会提供默认的无参构造方法。
b.如果我们自己给出了有参构造方法,系统将不会默认给出无参构造方法,如果要使用无参构造方法,就必须自己定义。
c.有参构造方法能够直接给成员变量赋值。
4.String类
(1)String类的构造方法。
(2)通过构造方法创建的字符串对象和直接赋值方式创建的字符串对象的区别:
通过构造方法创建字符串对象是在堆内存;
通过赋值方式创建对象是在方法区的常量池。
==:基本数据类型比较的是基本数据类型的值是否相同;引用数据类型比较的是引用数据类型的地址值是否相同。
(3)String类的判断功能:
(4)==操作符与equal方法比较:
总结 == :对于对象来说,特殊的类,如String、File、Date,使用比较的是对象的地址,equals比较的是内容;除了特殊的类之外其他普通的类的对象,==和equals比较的都是对象的内存地址。如果想要改变某个类的equals,不想用equals来比较对象的内存地址,就需要重写equals方法。
5.JavaBean
JavaBean实际上是一个实体类,一个完整的JavaBean:包含私有的属性,属性对应get和set方法
/*
* 这是我的学生类(一个完整的JavaBean:包含私有的属性,属性对应get和set方法)
*/
public class Student {
//学号
private String id;
//姓名
private String name;
//年龄
private String age;
//居住地
private String address;
public Student() {
}
public Student(String id, String name, String age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return this.age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return this.address;
}
public void setAddress(String address) {
this.address = address;
}
}
6.包装类(Wrapper):
针对八种基本数据类型定义相应的引用类型——包装类(封装类)
7.toString()
父类Object的toString方法就是输出当前对象的内存地址。如果想要输出类的其他信息,就要重写toString()。
public class BaozhuangleiTest1 {
public static void main(String[] args) {
Integer i = new Integer(112);//装箱
int i0 = i.intValue();//拆箱
Integer i1 = 112;//自动装箱
int i2 = i1;//自动拆箱
System.out.println(i0);
String a = new String();
System.out.println(a.toString());
System.out.println(a);
Student m = new Student();
//m.name = "安逸";
System.out.println(m.toString());
System.out.println(m);
}
}
8.static关键字——类属性(静态变量)、类方法(静态方法)
(1)设计思想(使用static关键字):
类属性作为该类各个对象之间共享的变量,在设计类时,分析哪些类属性不因对象的不同而改变,将这些属性设置为类属性。相应的方法设置为类方法。
如果方法与调用者无关,则这样的方法通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用。
(2)static关键字: