目录
一、面向对象与面向过程
1.1 两者的概念
1.2 举例
二、类和对象的概念
2.1 概念
2.2 基本语法
//创建类
class <class_name> {
field; //成员属性
method; //成员方法
}
//创建一个对象
<class_name> <对象名> = new <class_name>();
2.3 举例
- 每个人都有名字,年龄,国籍,这些成为属性。
- 每个人都会吃和睡觉,这些成为行为。
- 我们可以创建人这个类
- 有个这个类我们就可以创建对象,用new关键字
- 通过对象去调用这个属性和方法
- 于是又变成了下面代码的样子
public class Note {
public static void main(String[] args) {
//创建一个人对象
Person person = new Person();
person.name = "张三";//给这个对象的name属性赋值
person.age = 18;
person.country = "中国";
person.show();//调用这个对象的show方法
Person person1 = new Person();
person1.show();
}
}
class Person {
String name;
int age;
String country;
public void eat(){
System.out.println("I can eat");
}
public void sleep() {
System.out.println("I can sleep");
}
public void show(){
System.out.println("name:" + name + " age:" + age + " country:" + country);
}
}
输出:
name:张三 age:18 country:中国
name:null age:0 country:null
2.4 内存布局
2.5总结
person2.name = "z";
三、static关键字
看见static,与对象无关,是个公有,共有的含义
3.1 static修饰属性,类属性,类变量
public class Note {
public static void main(String[] args) {
Person person = new Person();
person.name = "张三";
person.age = 18;
person.show();
System.out.println("-----------------------------------");
Person person1 = new Person();
person.country = "A国";
person.show();
person1.show();
System.out.println("-----------------------------------");
person.country = "B国";
person.show();
person1.show();
}
}
class Person {
String name;
int age;
static String country = "中国";
public void show(){
System.out.println("name = " + name + ",age = " + age + ",country = " + country);
}
}
输出:
name = 张三,age = 18,country = 中国
-----------------------------------
name = 张三,age = 18,country = A国
name = null,age = 0,country = A国
-----------------------------------
name = 张三,age = 18,country = B国
name = null,age = 0,country = B国
内存图:
3.2 static修饰方法,类方法,工具方法
public class Note {
public static void main(String[] args) {
Person person = new Person();
person.name = "张三";
person.age = 18;
person.show();
Person.fun();
}
}
class Person {
String name;
int age;
static String country = "中国";
static void fun(){
System.out.println("静态方法");
//show(); //error
System.out.println(country);
}
public void show(){
System.out.println("name = " + name + ",age = " + age + ",country = " + country);
}
}
输出:
name = 张三,age = 18,country = 中国
静态方法
中国
3.3 static修饰代码块
3.3.1 普通代码块
public class Note {
public static void main(String[] args) {
//普通代码块
{
int x = 20;
}
int x = 10;
System.out.println("x = " + x);
}
}
输出:
x = 10;
3.3.2 成员代码块
public class Note {
public static void main(String[] args) {
Person person = new Person();
Person person1 = new Person();
}
}
class Person {
private String name;
//构造快
{
System.out.println("1 构造快");
}
public Person(){
System.out.println("2 构造方法");
}
}
输出
1 构造快
2 构造方法
1 构造快
2 构造方法
3.3.3 静态代码块
四、面向对象的封装特性,暂时学过private
4.1 修饰符权限
举例
public class Note {
public static void main(String[] args) {
Bank bank = new Bank();
bank.setPassword();
}
}
class Bank {
private String card;
private String passwpord = "123456";
private double val;
public String getCard(){
return card;
}
public void setPassword(){
Scanner scanner = new Scanner(System.in);
int count = 0;
while(true){
System.out.println("输入原密码:");
String oldPass = scanner.nextLine();
if (oldPass.equals(passwpord)){
System.out.println("输入新密码");
passwpord = scanner.nextLine();
System.out.println("修改后的密码" + passwpord);
break;
}
count ++;
if (count == 3){
System.out.println("已输入错三次,失败");
break;
}
}
}
public double getVal() {
return val;
}
}
五、构造方法
5.1 构造方法的语法规则
5.2 举例
public class Note {
public static void main(String[] args) {
Person person = new Person();
person.show();
Person person1 = new Person("张三");
person1.show();
Person person2 = new Person("李四",18);
person2.show();
}
}
class Person {
private String name;
private int age;
public Person(){
//name = null;age = 0
System.out.println("这是无参构造方法");
}
public Person(String n){
//name = null;age = 0
name = n;
System.out.println("这是一个参数的有参构造");
}
public Person(String n,int num){
//name = null;age = 0
name = n;
age = num;
System.out.println("这是两个参数的有参构造");
}
public void show(){
System.out.println("name = " + name + ",age = " + age);
}
}
六、this关键字
public class Note {
public static void main(String[] args) {
Person person = new Person("李四",18);
person.show();
}
}
class Person {
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
System.out.println("这是两个参数的有参构造");
}
public void show(){
System.out.println("name = " + name + ",age = " + age);
}
}
class Person {
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
System.out.println("这是两个参数的有参构造");
}
public void fun(){
this.fun();
}
public void show(){
System.out.println("name = " + name + ",age = " + age);
}
}
class Person {
private String name;
private int age;
public Person(){
System.out.println("!!!!!");
}
public Person(String name){
this();
}
public Person(String name,int age){
this(name);
this.age = age;
}
}
七、匿名类
public class Note {
public static void main(String[] args) {
System.out.println(new Person("张三"));
}
}
class Person {
String name;
public Person(String name){
this.name = name;
}
}
输出
Person@1b6d3586 //这是引用类型的地址
八、toString方法
public class Note {
public static void main(String[] args) {
System.out.println(new Person("张三"));
}
}
class Person {
String name;
public Person(String name){
this.name = name;
}
public String toString(){
String ret = "name = " + this.name;
return ret;
}
}