Classes e objetos
-
- Orientado a processos e orientado a objetos
- Instanciação de classes e classes
- A estrutura de armazenamento da classe instanciada
- Maneiras de inicializar variáveis de membro
- Encapsulamento
- métodos getter e setter
- esta palavra-chave
- Método de construção
- método toString
- Objeto anônimo
- Bloco de código
Orientado a processos e orientado a objetos
- A linguagem C é orientada para o processo, com foco no processo, analisando as etapas para resolver o problema e, gradativamente, resolvendo o problema por meio de chamadas de função.
- JAVA é baseado na orientação a objetos, com foco em objetos, dividindo algo em diferentes objetos e completando-o pela interação entre objetos.
- Orientado para o processo concentra-se no processo, e o comportamento envolvido em todo o processo é a função.
- Orientado a objetos concentra-se no objeto, ou seja, o sujeito envolvido no processo de participação. É através da lógica conectar as funções uma a uma
[Conceito orientado a objetos]
- Orientado a objetos é uma forma de pensar sobre os problemas, é um tipo de pensamento. Por exemplo: conceitos e exemplos. A teoria e a prática. Nome e realidade e assim por diante.
- Uma classe é um termo geral para uma classe de objetos. O objeto é uma instância deste tipo de reificação
- Os benefícios da orientação a objetos: Para tornar as coisas complexas simples, basta encarar um objeto.
【Design Orientado a Objetos】
O design orientado a objetos apreende uma experiência importante: quem possui os dados, quem fornece métodos externos para manipular os dados (privado)! (A parte passiva é a proprietária dos dados e a parte ativa é o executor)
Durante o desenvolvimento: encontre objetos, crie objetos, use objetos e mantenha relacionamentos entre os objetos.
Resumo: Orientado a objetos é uma maneira de descrever coisas no mundo objetivo com código (classes). Uma classe contém principalmente os atributos e comportamentos de uma coisa
Instanciação de classes e classes
Uma classe é um termo geral para uma classe de objetos. Um objeto é uma instância desse tipo de reificação.Uma
classe pode instanciar inúmeros objetos.
Abaixo usamos um exemplo para entender a instanciação de classes e classes
class Person {
public int age;//成员属性 实例变量 字段 属性
public String name;
public static String sex; //静态成员变量 方法区
public void eat() {
//成员方法
System.out.println("吃饭!");
}
public void sleep() {
System.out.println("睡觉!");
}
public static void func(){
System.out.println("静态成员方法");
}
}
public class Main{
public static void main(String[] args) {
Person person = new Person();//通过new实例化对象
person.eat();//成员方法调用需要通过对象的引用调用
person.sleep();
//产生对象 实例化对象
Person person2 = new Person();
Person person3 = new Person();
//静态成员变量和方法的调用
System.out.println(Person.sex);
Person.func();
}
}
Variável membro:
definida dentro da classe, fora do método é
acessada através de referências de objetos.
Se não inicializada, então seu valor é um valor padrão (valor padrão zero)
- Se for um tipo de referência, o valor é nulo (incluindo matrizes, strings de String, etc.)
- Se for um tipo simples, o valor é o valor padrão correspondente ao seu tipo
byte | baixo | int | grande | flutuador | em dobro | Caracteres | boleano |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0L | 0.0f | 0,0 | '\ u0000' hexadecimal (também pode ser tratado como 0) | falso |
Comportamento / método:
[eat () sleep ()] é um método de membro de instância
func () é um método de membro estático
Como posso acessar variáveis de membro estático e métodos de membro? Como
você pode ver aqui, não há necessidade de instanciar objetos para os estáticos ! ! !
Chamada direta
Nome da classe. Variável de membro estático / método de membro estático
Para resumir a estática:
- Para propriedades de membro estático ou métodos de membro estático, não depende do objeto .
- Existe apenas uma variável de membro estático, que é armazenada na área do método.
- Dados não estáticos não podem ser acessados dentro de um método estático.
A estrutura de armazenamento da classe instanciada
Maneiras de inicializar variáveis de membro
1. Inicialização no local (inicialização ofensiva dentro da classe)
2. Inicialização padrão
3. Inicialização fora da classe (mais usado)
public class Main{
public static void main(String[] args) {
Person person1 = new Person();
person1.name = "星星";
person1.age = 20;
Person person2 = new Person();
person2.name = "狒狒";
person2.age = 40;
}
}
Encapsulamento
Quando escrevemos código, geralmente há duas funções envolvidas: implementador de classe e chamador de classe. A essência do encapsulamento é permitir que o chamador da classe não precise entender como o implementador da classe implementa a classe, desde que saiba como Basta usar a classe.
Isso reduz os custos de aprendizagem e uso dos usuários da classe, reduzindo assim a complexidade
As duas palavras-chave privado / público significam "controle de acesso".
- Variáveis de membro ou métodos de membro modificados por public podem ser usados diretamente pelo chamador da classe.
- Variáveis de membro ou métodos de membro modificados por private não podem ser usados pelo chamador da classe
por exemplo
class Person {
private String name = "张三";
private int age = 18;
public void show() {
System.out.println("我叫" + name + ", 今年" + age + "岁");
}
}
class Test {
public static void main(String[] args) {
Person person = new Person();
person.show();
}
}
- Neste ponto, o campo foi decorado com privado. O chamador da classe (no método principal) não pode usá-lo diretamente. Em vez disso, o método show é necessário. Neste momento, o usuário da classe não precisa entender os detalhes de implementação da classe Person.
- Ao mesmo tempo, se o implementador da classe modificar o nome do campo, o chamador da classe não precisa fazer nenhuma alteração (o chamador da classe não tem acesso a campos como nome e idade)
métodos getter e setter
Getter: o método para obter o valor da propriedade
setter: o método para modificar o valor da propriedade
Usamos esses dois métodos para encapsular as propriedades da classe, de modo a atingir o propósito de acessar as propriedades
class Person {
private String name;//实例成员变量
private int age;
public void setName(String name){
//name = name;//不能这样写
this.name = name;//this引用,表示调用该方法的对象
}
public String getName(){
return name;
}
public void show(){
System.out.println("name: "+name+" age: "+age);
}
}
class Main {
public static void main(String[] args) {
Person person = new Person();
person.setName("caocao");
String name = person.getName();
System.out.println(name);
person.show();
}
}
esta palavra-chave
Podemos ver o método setter no código agora mesmo
private String name;
public void setName(String name){
//name = name;//不能这样写
this.name = name;//this引用,表示调用该方法的对象
}
Isso representa a referência do objeto atual e você pode usar isso para acessar os campos e métodos do objeto.
Três usos:
- this.attribute; // Acessar os atributos do objeto atual
- this. method; // chamar o método do objeto atual
- this (); // Chame o método de construção do objeto atual (ps: deve ser colocado na primeira linha, e só pode haver um método de construção dentro)
Método de construção
O método de construção é um método especial que será chamado automaticamente quando um novo objeto for instanciado usando a palavra-chave new para completar a operação de inicialização
Quantas etapas existem para instanciar / criar um objeto ?
Student stu = new Student (); // Instanciar um objeto em
duas etapas
- Alocar memória para o objeto
- Chame o método de construção apropriado, indicando que há mais de um método de construção, talvez mais
Regras de gramática
- O nome do método deve ser igual ao nome da classe
- O construtor não tem declaração de tipo de valor de retorno
- Deve haver pelo menos um método de construção em cada classe (se não estiver claramente definido, o sistema irá gerar automaticamente uma construção sem parâmetros)
class Person {
private String name;//实例成员变量
private int age;
private String sex;
//默认构造函数 构造对象
public Person() {
this.name = "caocao";
this.age = 10;
this.sex = "男";
}
//带有3个参数的构造函数
public Person(String name,int age,String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public void show(){
System.out.println("name: "+name+" age: "+age+" sex: "+sex);
}
}
public class Main{
public static void main(String[] args) {
Person p1 = new Person();//调用不带参数的构造函数 如果程序没有提供会调用不带参数的构造函数
p1.show();
Person p2 = new Person("zhangfei",80,"男");//调用带有3个参数的构造函数
p2.show();
}
}
método toString
Person person = new Person("caocao",19);
System.out.println(person);
Se você imprimir a referência, ele chamará o método toString por padrão e executará o resultado:
Podemos reescrever o método toString para imprimir o resultado que desejamos.
Por exemplo:
class Person {
private String name;
private int age;
public Person(String name,int age) {
this.age = age;
this.name = name;
}
public void show() {
System.out.println("name:"+name+" " + "age:"+age);
}
//重写Object的toString方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person("caocao",19);
person.show();
System.out.println(person);
}
}
Desta forma, a impressão da referência sairá de acordo com o conteúdo desejado.
Objeto anônimo
Anonimato significa simplesmente um objeto sem nome.
- Os objetos que não são referenciados são chamados de objetos anônimos.
- Objetos anônimos só podem ser usados ao criar objetos.
- Se um objeto for usado apenas uma vez, você não precisa usá-lo mais tarde, você pode considerar o uso de um objeto anônimo
new Person("caocao",19).show();//通过匿名对象调用方法
Funcionalidades: não depende do objeto, só precisamos chamar suas propriedades ou métodos através do nome da classe
Bloco de código
- Bloco de código nativo
- Bloco de código estático
- Exemplo de bloco de código / bloco de código de construção
- Bloco de código síncrono (multithread)
Bloco de código nativo: o bloco de código no método
public class Main{
public static void main(String[] args) {
{
//直接使用{}定义,普通方法块
int x = 10 ;
System.out.println("x1 = " +x);
}
int x = 100 ;
System.out.println("x2 = " +x);
}
}
Bloco de código estático: geralmente usado para inicializar propriedades de membros estáticos
//静态代码块
static {
count = 10;//只能访问静态数据成员
System.out.println("I am static init()!");
}
Bloco de código de instância: o bloco de código definido na classe, o bloco de código de construção é geralmente usado para inicializar variáveis de membro de instância
//实例代码块
{
this.name = "bit";
this.age = 12;
this.sex = "man";
System.out.println("I am instance init()!");
}
Ordem de execução
- Bloco de código estático
- Bloco de código de exemplo
- Método de construção