类和对象
·定义类
[修饰符]class <类名>[extends 父类名][implement 接口列表]{ 定义成员变量; 定义成员方法; }
修饰符:可选,public/abstract/final
类名:必选 一般要求首字母大写
extends 父类名:可选,用于指定继承哪个父类
implements 接口列表:可选,用于指定该类实现了那些接口
★类文件的名称必须与类名相同
·类的成员方法由方法的声明和方法体两部分组成
[修饰符] <方法返回值的类型><方法名>([参数列表]){ [方法体] }
·成员变量和局部变量
☆在类体中变量定义部分所声明的变量为类的成员变量
[修饰符]class <类名>[extends 父类名][implement 接口列表]{ 定义成员变量; 定义成员方法; }
修饰符:可选,public/protected/private
final :可选,用于指定该成员变量为不会改变的常量
transient:可选,暂时性变量,用于对象存盘
volatile:共享变量,用于并发线程的共享
☆在方法体中声明的变量和方法的参数为局部变量
[final]<变量类型><变量名>
final:可选,用于指定该局部变量为常量
★当局部变量和成员变量相同时,成员变量会被隐藏,如果使用成员变量,必须使用关键词this
·构造方法
只是一种特殊的方法,名字与类名相同,没有返回值,也不用void修饰,用于对对象中所有成员变量进行初始化,在创建对象时就会被调用。
★如果用户没有定义构造方法,则java会自动提供一个默认的构造方法。
例子:
public class Fruit { public String color; public Fruit(){ color="绿色"; } public void harvest() { String color="红色"; System.out.println("水果是:"+color); System.out.println("水果已经收获……"); System.out.println("水果原来是:"+this.color+"的"); } public static void main(String[] args) { Fruit fruit = new Fruit(); fruit.harvest(); } }
——————————————————————————————————
·创建包
package 包名;
当包中还包含包的时候,可以使用“包1.包2.…….包n”进行指定。
★在java中提供的包相当于系统中的文件夹。例如, package com.wgh中有一个Demo类的话,那么他的实际路径相当于 com/wgh/Demo.java
·使用包中的类
1、使用长引用包中的类
只需在类名前面加上完整的包名即可
com.wgh.Demo circ= new com.wgh.Demo
2、使用import语句引入包中的类
格式:import 包名1.包名2.…….包名n.类名|*;
★当存在多个包名的时候,包名之间使用.隔开,同时包名和类名 之间也用.隔开,*代表包中所有的类
☆引入一个类的时候:import com.wgh.Demo;
☆如果引入多个类:import com.wgh.*;表示引入这个包中所有 的类。
--------------------------------------------------------------------
继承
·子类对象的创建
可以使用extends来指名其父类,格式如下
[修饰符]class 类名 extends 父类名
[修饰符]可选:public、abstract、final
[类名]必选:必须是合法的java标识符。
[父类名]:必选:指定定义的子类继承于哪个父类
☆例子
abstract class Cattle extends Animal{
……
}
★子类能够继承父类中声明为public和protected的成员变量和方法,但是不能继承private的成员变量和方法;
★如果子类中声明了一个与父类的成员变量/成员方法同名的成员变量,则子类不能继承父类的成员变量/成员方法。此时,此时称子类的成员变量/方法隐藏/覆盖了父类的成员变量/方法。
☆例子
1、创建Animal类
public class Animal { public boolean live = true; public String skin=""; public void eat() { System.out.println("动物会吃食物的"); } public void move() { System.out.println("动物都会动"); } }
2、创建子类Bird
public class Bird extends Animal{ public String skin = "羽毛"; public void move() { System.out.println("鸟是会飞的"); } }
3、创建zoo类,在其中,创建Bird的对象,并分配内存,调用该类的成员方法,以及成员变量。
public class Zoo { public static void main(String[] args) { Bird bird =new Bird(); bird.eat(); bird.move(); System.out.println("鸟是:"+bird.skin); } }
运行结果:
动物会吃食物的
鸟是会飞的
鸟是:羽毛
★super关键字
1、调用父类的构造方法
super ([参数列表]);
[参数列表]如果父类的构造方法中包括参数,则为必选。
☆例
①在Animal类中添加一个默认的构造方法,和一个带参数构造方法
public Animal(){ } public Animal(String strSkin){ skin = strSkin; }
②如果要在子类Bird中使用父类的带参数的构造方法
Public Bird(){ super("羽毛"); }
2、操作被隐藏的成员变量和被覆盖的成员方法
在子类中操作父类中被隐藏的成员变量和被覆盖的成员方法。
super.成员变量名
super.成员方法名([参数列表])
☆例
super.skin="羽毛"; super.move();
—————————————————————————————————
多态
·方法的重载
方法的重载是指在一个类中,出现多个方法名相同,但是参数个数或者参数类型不同的方法,则称为方法的重载。
☆例:
public class Calculate { final float PI=3.14159f; //求圆形的面积 public float getArea(float r){ float area=PI*r*r; return area; } //求矩形的面积 public float getArea(float l,float w) { float area = l*w; return area; } //画任意形状的图形 public void draw(int num) { System.out.println("画"+num+"个任意图形的形状"); } public void draw(String shape) { System.out.println("画一个"+shape); } public static void main(String[] args) { Calculate calculate = new Calculate(); float l = 20; float w = 30; float areaRectagle=calculate.getArea(l, w); System.out.println("求长为"+l+"宽为"+w+"的矩形面积是"+areaRectagle); float r = 7; float areaCirc = calculate.getArea(r); System.out.println("求半径为"+r+"的圆形的面积是:"+areaCirc); int num = 7; calculate.draw(num); calculate.draw("三角形"); } }
·方法的覆盖
覆盖是父子类之间的关系,子类继承父类的方法名与父类的方法名相同时候,子类就不能继承父类的方法,子类的方法覆盖了父类的方法。通过覆盖,可以使一个方法在不同的子类中表现出不同的行为。
★子类不能覆盖父类中声明为final或者static的方法
★子类必须覆盖父类中声明为abstract的方法,或者子类也应该声明为abstract
★子类覆盖父类中的同名方法时,子类的方法声明也必须和父类中被覆盖的方法声明一样。
-------------------------------------------------------------------
抽象类与final类
抽象类
只声明方法的存在而不去具体实现他。抽象类不能被实例化,也就是不能创建其对象。在定义抽象类的时候,要在关键字class前面加上abstract。
格式
abstract class 类名{
类体
}
在抽象类中创建的,没有实际意义的,必须要重写的方法叫做抽象方法。抽象方法只有方法的声明,而没有方法的实现。用关键字abstract进行修饰。
格式:
abstract <方法返回值类型> 方法名 (参数列表);
★抽象方法不能使用private和static关键字进行修饰
abstract class Instrument { abstract void play(); } class piano extends Instrument { public void play() { System.out.println("钢琴演奏"); } } class cello extends Instrument { public void play() { System.out.println("大提琴演奏"); } } class violin extends Instrument { public void play() { System.out.println("小提琴演奏"); } } class testplay1 { public void testplay(Instrument obj) { obj.play(); } } public class InstrumentTest { public static void main(String[] args) { Instrument piano1 = new piano(); //抽象类不能创建对象 Instrument violIn1 = new violin(); Instrument cello1 = new cello(); testplay1 test = new testplay1(); test.testplay(cello1); test.testplay(violIn1); test.testplay(piano1); } }
★抽象方法不能使用private或者static关键字进行修饰
包含一个或者多个抽象方法的类必须被声明为抽象类。
·final类
改类不能被继承,即不能有子类。
final class 类名{
类体
}
——————————————————————————————————
接口
java一个类只能有一个父类。
使用interface来定义一个接口。接口的定义分为接口的声明和接口体
格式
[修饰符]interface 接口名 [extends 父接口名列表]{ [pbulic][static][final]常量; [public][sbstract] 方法; }
★接口中的方法只有定义,没有被实现
☆接口文件的文件名必须与接口名相同。
实现接口
可以在类中实现接口,在类中实现接口,可以使用implements,格式如下
[修饰符]class <类名>[extends 父类名] [imlements 接口列表]{ }
★在类中实现接口时,方法的名字、返回值类型、参数的个数及类型,必须与接口中的完全一致,并且实现接口中的所有的方法。(抽象类不需要实现接口中的所有的方法)
例子:
public interface Calculate { float getArea(float r); float getCir(float r); } import java.util.Scanner; public class Cire implements Calculate { final float PI = 3.14159f; public float getArea(float r) { float area = PI * r * r; return area; } public float getCir(float r) { float cir = 2 * PI * r; return cir; } public static void main(String[] args) { // TODO Auto-generated method stub Cire yuanCire = new Cire(); System.out.println("请输入一个半径"); Scanner cinScanner= new Scanner(System.in); float r = cinScanner.nextFloat(); float area = yuanCire.getArea(r); float cir =yuanCire.getCir(r); System.out.println("圆的面积是"+area); System.out.println("圆的周长是"+cir); } }
--------------------------------------------------------------------
数组
声明一维数组:
int arry[ ]=new int[ 6]; int arry1[ ] = {1,2,3,4};
实例:
import java.util.Random; //random类 public class ArrayNew { /** * @param args */ public static void main(String[] args) { Random random = new Random(); int [] a = new int [random.nextInt(20)];/*随机产生0~20的整数值。*/ double []b= new double [random.nextInt(20)]; System.out.println("a"+a.length); System.out.println("b"+b.length); for(int i=0;i<a.length;i++)//a.length获取数据的长度 { a[i]=random.nextInt(20); System.out.println("a["+i+"]的值是"+a[i]); } for(int i=0;i<b.length;i++){ b[i]=random.nextInt(10); System.out.println("b["+i+"]的值是:"+b[i]); } // TODO Auto-generated method stub } }
例二:
public class Arraysize { public static void main(String[] args) { // TODO Auto-generated method stub Overarray [] arrayOverarray=new Overarray[6]; int [] Array1 = new int[5]; double []Array2 = new double[6]; for(int i=0;i<Array1.length;i++) { Array1[i]=i; arrayOverarray[i]=new Overarray(Array1[i]); } for(int i=0;i<Array2.length;i++){ Array2[i]=Math.tan(i); arrayOverarray[i]=new Overarray(Array2[i]); } } } public class Overarray { public Overarray(int i){ System.out.println("int 类型数组"+i); } public Overarray (Double i){ System.out.println("double类型的数组"+i); } }
·二维数组
定义:int [][]array=new int [2][3];
初始化:array = new int []...[]{1,2,3,,4……};
或者:array = new int []…[]{new 构造方法(参数列),new 构造方法(参数列),……};
·使用二维数组
二维数组求最小值
public class MutiArray { //定义一个二维数组 int grades[][]={ {77,68,76,5}, {32,45,65,67}, {34,45,56,69} }; //求数组中的最小值,使用循环 public int minimum() { int lowGrade=grades[0][0]; //二维数组中,数组名.length的意思是,有多少行,行名.length是那一行有多少列。 for(int row=0;row<grades.length;row++){ for(int cloumn=0;cloumn<grades[row].length;cloumn++){ if(grades[row][cloumn]<lowGrade) lowGrade=grades[row][cloumn]; } } return lowGrade; } public static void main(String[] args) { MutiArray m=new MutiArray(); System.out.println("最小的数字是:"+m.minimum()); // TODO Auto-generated method stub } }
打印三维数组
public class Treewei { /** * @param args */ public static void main(String[] args) { int[][][] a = new int[1][2][3]; for(int i=0; i<a.length; i++){ for(int j=0; i<a[i].length; j++){ for(int k=0; k<a[i][j].length; k++) System.out.println(a[i][j][k]); } } } }
数组的操作
复制数组:
语法:System.arraycopy(Array1,0,array2,0,length);
Array1是源拷贝数组
Array2是目标数组
public class Arraycopy { public static void main(String[] args) { int []array ={1,5,4,3,2,5,33,23,24,24}; int []array2 = new int [10]; // 将array拷贝到array2中去 System.arraycopy(array, 0, array2, 0, array.length); // 简单的遍历方法 for (int i:array2) System.out.println("arrar2:"+i); } }
数组排序:
Arrays类提供的几个方法:
sort() 快速排序(从小到大)
bingarySearch()对已经排好序的数组进行二叉树搜索,如果搜索到结果,则返回索引值,否则返回负值
fill() 填充数组
equals() 比较数组中的数是否相等。是返回true,否返回false。
public static void main(String[] args) { String [] s=new String[]{"abc","deede","Hello","asdkj","12"}; String [] s2=new String[5]; //复制一个数组。 System.arraycopy(s, 0, s2, 0, s.length); // 对数组快速排序 Arrays.sort(s); //从数组中找到一个元素,从0开始计数 System.out.println(Arrays.binarySearch(s, "asdkj")); //对数组进行快速排序 System.out.println(Arrays.asList(s)); //对数组忽略大小写排序 } }
import java.util.Arrays; public class arrayfill { public static void main(String[] args) { int []a1=new int[5]; //使用填充数组,进行填充数组内的数字 Arrays.fill(a1, 111); for(int i:a1) System.out.println("数组是"+i); } }
————————————————————————————————
字符串
声明字符串变量
String str [];
字符串的比较:
1.equal()方法和equalslgnoreCase()方法
·equal()方法
String用于比较两个字符串是否相等,使用的是比较两个字符串是否相等,不能用==号来比较。比较的是内容,区分字符大小写。==号比较的是内存地址。
相关推荐
### Java基础学习笔记知识点 #### 一、Java学习路线概览 Java学习通常分为几个阶段,从基础到高级,逐步深化。以下是对给定文件中提到的学习路线的详细解析: ##### 第一阶段:Java基础 - **JAVASE**:Java标准版...
本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...
以上是Java基础学习笔记中涉及的关键知识点,涵盖了输入输出、对象创建、随机数生成、数组和集合的使用以及字符串操作。这些是学习Java编程时的基础内容,深入理解和熟练运用这些知识将有助于进一步学习更复杂的Java...
Java基础学习笔记
Java基础学习笔记中详细介绍了Java编程语言的一些基础知识,主要包括数组的声明与操作、方法的定义与使用、循环结构、静态成员的概念、Java的基本数据类型、类的定义与成员变量的封装、构造方法以及Java的包结构等...
Java基础学习笔记全集涵盖了广泛的Java编程概念,是学习和准备Java相关笔试的理想资源。这份资料集合了J2EE框架、MVC模式、线程管理、Struts框架、MD5加密算法以及Java常用类的使用等多个核心主题。下面将对这些关键...
Java基础学习笔记(印象笔记) Java 是一种广泛使用的面向对象编程语言,最初由 Sun Microsystems(现为 Oracle Corporation)于1995年发布。它具有简单、易学、可移植、安全和高性能等特点。 Java 是一种跨平台语言...
这份“JAVA基础学习笔记资料很全面”涵盖了从基础到高级,包括Spring框架在内的多个主题,对于初学者和进阶者都是宝贵的资源。 首先,Java基础知识是学习的起点,包括Java环境配置、语法特性、数据类型、运算符、...
这份“java基础学习笔记 java整合技术 java工具类.zip”压缩包显然包含了一系列与Java相关的学习资料,特别是关于基础、整合技术和工具类的深度探讨。下面我们将深入解析这些主题。 首先,Java基础是学习Java的起点...
1. **Java基础**:介绍Java语言的基本语法,如变量、数据类型、运算符、控制流程(条件语句、循环)、数组、字符串以及异常处理。这些基础知识是理解和编写任何Java程序的基石。 2. **面向对象编程**:深入讲解Java...
这份"Java基础学习笔记.zip"包含了多个主题,涵盖了Java语言的基础到进阶内容,非常适合初学者和有经验的开发者复习巩固。 首先,我们来看"day03【List、Set】-笔记.pdf",这部分主要讲解了Java集合框架中的两种...