基本数据类型与数组
1.常用数据类型就不多说了,double,int,char,boolean,就这四种够用了,其它的就不一一举出了。字符串类可以存入一个字符串,要通过类定义的方式进行实例化。所以在比较两个字符串是否相等的时候,要用实例名.equals(被比较的字符串)的方式进行两个字符串的比较。比较两个字符串不能用==来比较,因为这个符号只能用来比较两个用基本数据类型定义的数据。我们还可以用字符串对象名.charAt(1)的方式来访问字符串的第2个字符。
2.数组的定义方式,例如 一维数组的定义方式为int [] a=new int[12],或者int a[]=new int[12];二维数组的定义方式为int a[][]=new int a[3][4],这样子就定义了一个三行四列的二维数组。如何访问数组的元素我就不说了。数组的长度可以通过数组名.length的方式访问。
循环章节
3.运算符和循环分支语句章节就不多赘述了,和python还有c语言都差不多。
类与对象
4.在类章节,我们可以通过面向对象的思想创建多个类,并且在类中定义我们想要的成员变量和方法。
(1)如果我们有某个类的变量需要多个类中的方法或者通过程序入口来修改,我们可以加public static关键字然后通过类名.变量名来访问该变量。类方法也可以通过加public static关键字来通过类名.方法名的方式来访问。
(2)方法名在其它类中调用。还有就是this关键字,举个很简单的例子来理解this关键字,下面我们看一段代码:
class test1{
int x=10,y=5;
void f() {
int x=1,y=2;
System.out.println(this.x+this.y);
System.out.println(x+y);
}
}
this关键字的作用使用被隐藏的成员变量,因为在f函数中x和y为局部变量,在f中直接使用x和y的值会直接使用局部变量的值,成员变量的值将会被隐藏,所以要使用原来类中定义的x和y的值,就得通过this.成员变量名的方式来访问,所以第一个输出的值就是15,第二个输出的值就是3。
(3) 带有关键字public的类或变量是所有类共有,proteced类是子类和父类共同拥有,而privat是本类私有。
(4)重写,是发生在父类和子类中,通过继承将会继承父类所有的不带有private关键字的方法或变量,那么在子类中,可以对父类的方法进行重写,俗称修改父类的方法,当子类把父类的方法修改之后,就通过子类的类名调用子类的重写方法就是实现子类的方法中的内容,这时候被继承的父类中的方法就不会被实现或执行,所以你如果要通过子类再次调用父类的方法,就得用super关键字,下面我们还是举一个简单的例子帮助理解super关键字。
public class est {
public static void main(String[] args) {
test1 c=new test1();
c.f();
test2 d=new test2();
d.f();
}
}
class test1{
int x=10,y=5;
void f() {
System.out.println("我是父类的方法执行结果:");
System.out.println(x+y);
}
}
class test2 extends test1{
int x=3,y=2;
void f() {
System.out.println("我是子类重写父类方法后的执行结果:");
System.out.println(x-y);
System.out.println("我是在子类通过调用父类被重写隐藏后的方法的执行结果:");
super.f();
System.out.println("我是通过关键字super调用父类变量x,y的执行结果");
System.out.println(super.x*super.y);
}
}
//下面是该代码块执行结果:
/*
我是父类的方法执行结果:
15
我是子类重写父类方法后的执行结果:
1
我是在子类通过调用父类被重写隐藏后的方法的执行结果:
我是父类的方法执行结果:
15
我是通过关键字super调用父类变量x,y的执行结果
50
*/
其实说简单一点就是你重写了你继承自父类的方法或你重新定义了和父类同名的变量的时候,这时候父类的方法和变量就会被隐藏起来,这时候你还想通过子类调用父类的方法和变量就得通过super.方法或super.变量名的方式来访问父类中的方法或变量。
(5)重载,是发生在一个类中,就是可以定义了多个同名的方法,但是他们的参数设置不同,那么这种方式就叫做重载,举个例子帮助理解:
public class est {
public static void main(String[] args) {
test1 e=new test1();
e.f();e.f(1);e.f(1,2);
}
}
class test1{
int x=10,y=5;
void f() {
System.out.println("原始的方法");
System.out.println(x+y);
}
void f(int x)
{
System.out.println("重载!");
System.out.println(x);
}
void f(int a,int b) {
System.out.println("这就是重载!");
System.out.println(a+b);
}
}
/*
原始的方法
15
重载!
1
这就是重载!
3
*/
(6)当你要实例化一个类对象时,要通过这样的方式给变量赋值,有一个类叫test,其中有两个int型的变量a和b,你就会写 test p=new test(1,2),这种方式在没有构造方法下时不可执行的,因为你传入参数后,会自动调用类中的默认构造方法(默认构造方法是空的),构造方法的作用就是对类中的变量进行设置或修改,所以当你的构造方法没有设置相应的参数时,它就会报错,下面举个例子,帮助理解:
public class est {
public static void main(String[] args) {
test1 c=new test1(1,2);
System.out.println(c.x+c.y);
}
}
class test1{
int x,y;
test1 (int x,int y){
this.x=x;
this.y=y;
}
}
//输出时3
当然这种方法也只能通过此种方法test1 c=new test1(1,2)进行实例化,因为我们修改了构造函数的传入参数,当通过test1 c=new test1(),这种方法实例化对象的时候我们就不需要修改构造方法,因为此时没有传入参数。
(7)至于上转型,我的理解就是可以通过父类的名字来实例化子类的名字。比如下面:
public class est {
public static void main(String[] args) {
test1 e=new test2();
e.f();
}
}
class test1{
int x=10,y=5;
void f() {
System.out.println("我是父类的方法执行结果:");
System.out.println(x+y);
}
}
class test2 extends test1{
int x=3,y=2;
void f() {
super.f();
System.out.println("我是子类的执行结果:");
System.out.println(x+y);
}
}
//执行结果如下:
/*
我是父类的方法执行结果:
15
我是子类的执行结果:
5
*/
还有多态我就不多赘述了,多态就是各个子类将父类方法重写后的多种执行结果。接口不考,我也就不说了。
集合与泛型
5.泛型与集合
这个地方我先上一张图,是本章类与子类之间的继承关系图:
(本图为引用,如有侵权,请联系我删除)
集合中的set就是可将数据去重,list就是存入数据,ArrayList方便查改,LinkedList方便增删。(1)可以通过 LinkedList<类对象> a=new LinkedList<类对象>()的方式来进行创建一个链表,并且要往里面存入数据的时候只能通过a.add(要存入的一个数据)的方式来进行存入操作,如果要修改指定位置的操作就得用a.set(要修改的位置-1,要修改成的数)的方式来进行修改,比如a.set(0,5)就是把链表中第一个位置的数修改成5。然后就是要获取某个索引下的值就可以通过a.get(要获取的数的位置-1)的方式获取,该方法的返回值就是你要获取的数。
(2)我们还可以通过HashMap创建一个映射关系,这种映射关系也就是可以通过键来查询相应的值。可以通过LinkedHashMap<类对象,类对象> b=new LinkedHashMap<类对象,类对象>()的方式来创建一个LinkedHashMap,然后我们要通过b.put(类对象1,类对象2)的方式来往这个Map中添加内容,通过b.get(类对象1)的方式来获得类对象1所对应的类对象2的内容。我们要修改键所对应的值的时候,可以通过b.put(类对象1,类对象2)的方式来进行修改,所以如果当前Map中有类对象1,put方法就会对相应类对象2进行修改,如果没有类对象1,就会将这一映射加入到map中。
然后总结的就是这些,纯手敲,无复制,祝各位学习进步,期末取得好成绩!